我使用此代码以 wgs84 格式查找距离给定点最近的 nabours(变量 co)
for(Node n : geomPoints){
ExecutionResult result = engine.execute("START a=node(" + n.getId() + ") "+
"MATCH a-[:FIRST_NODE]->()-[:NEXT*0..]->()-[:NODE]->b "+
"RETURN b");
Iterator<Node> nodes = result.columnAs("b");
while(nodes.hasNext()){
Node nodesInGeom = nodes.next();
Float lon = Float.parseFloat(nodesInGeom.getProperty("lon").toString());
Float lat = Float.parseFloat(nodesInGeom.getProperty("lat").toString());
Coordinate coo = new Coordinate(lon,lat);
if(co.distance(coo)<distance) {
distance = co.distance(coo);
nearestNabour = nodesInGeom;
}
}
所以这段代码的重要部分就是这部分
co.distance(coo)
因为我被告知这个函数使用欧几里得距离而不是距离,所以我需要 fpr wgs84 格式
所以我的问题是:neo4j satial 中是否有一个函数可以返回正确的距离?
非常感谢
最佳答案
我建议使用 org.geotools.referencing.datum.DefaultEllipsoid.WGS84.orthodromicDistance() 方法。例如,请参阅它在 OSMImporter 中的使用 https://github.com/neo4j/spatial/blob/master/src/main/java/org/neo4j/gis/spatial/osm/OSMImporter.java#L2158
为了回答有关查找最接近该点的几何图形的第二个问题,请查看 https://github.com/neo4j/spatial/blob/master/src/main/java/org/neo4j/gis/spatial/SpatialTopologyUtils.java#L102 处的实用程序方法 findClosestEdges 。这将返回 PointResult 的集合,其中包含最近的 Point 及其所属的 Geometry。如果您查看代码,您会发现它使用 JTS 类 LocationIndexedLine 来计算边缘的最近部分。
关于java - neo4j 空间 wgs84 距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20548731/