Я хочу вычислить ближайшее расстояние от точки до файла shp (ports.shp) из данных о естественной земле.
Например, я загружаю функции файла:
...
String filename = "10m_cultural/ne_10m_ports.shp";
...
public static void Calcs(String filename)
throws IOException, NoSuchAuthorityCodeException, FactoryException, TransformException {
HashMap<String, Object> params = new HashMap<>();
params.put("url", DataUtilities.fileToURL(new File(filename)));
DataStore ds = DataStoreFinder.getDataStore(params);
String name = ds.getTypeNames()[0];
SimpleFeatureSource source = ds.getFeatureSource(name);
SimpleFeatureCollection features = source.getFeatures();
}
Теперь, например, точка, от которой я хочу вычислить расстояние:
GeometryFactory gf = JTSFactoryFinder.getGeometryFactory();
Point p = gf.createPoint(new Coordinate(43, 18));
Я знаю, что для вычисления расстояния сделаю:
CoordinateReferenceSystem crs = CRS.decode("EPSG:4326");
Point start = gf.createPoint(new Coordinate(43, 18));
Point dest = gf.createPoint(new Coordinate(?????));
GeodeticCalculator gc = new GeodeticCalculator(crs);
gc.setStartingPosition(JTS.toDirectPosition(start.getCoordinate(), crs));
gc.setDestinationPosition(JTS.toDirectPosition(dest.getCoordinate(), crs));
double distance = gc.getOrthodromicDistance();
но я не знаю, как найти координаты точки назначения (файл ports.shp):
Point dest = gf.createPoint(new Coordinate(?????));
У меня есть features
от загрузки файла, но нет метода getCoordinates()
.
Кроме того, как я вижу, ports.shp
состоит из множества POINT
геометрии. Должен ли я каким-то образом вычислять каждую точку с опорной точкой, а затем выбирать ближайшую?