java - neo4j 空间 wgs84 距离

标签 java neo4j neo4j-spatial

我使用此代码以 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/

相关文章:

Neo4j 空间索引删除

neo4j - 这两个 Cypher 查询有什么区别?

java - Android:无法在 Textview 中将来自 SQLite 的字符串设置为 HTML

java - 数组赋值操作题

java - 将新几何图形添加到 Neo4J 中的 osm 文件

database - neo4j 图数据库的效率

java - Neo4j 未正确保存标签

java - 如何强制子类使用父类(super class)变量?

java - 我应该同步 notifyObservers 调用吗?

neo4j - 标记已删除节点的最佳方法是什么?