【发布时间】:2023-03-23 12:10:01
【问题描述】:
我想根据自然地球数据计算点到 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 几何组成。我必须以某种方式计算每个点与参考点,然后选择最近的吗?
【问题讨论】:
-
这看起来在Geographic Information Systems Stack Exchange 上会更热门。
-
“目标”是指离起始坐标最近的点?如果是这样,您确实必须检查所有其他点。你是如何决定搬家的?
-
@GrayCygnus:是的,我的意思是离起点最近的点(从ports.shp)。我的问题是如何正确读取ports.shp文件中的坐标。然后,我会只需将每个点放到目的地位置,然后找到最接近起点的位置。
-
@polygeo 实际上作为一个编程问题在这里更好