0

我正在使用此代码以 wgs84 格式(变量 co)查找距给定点最近的 nabours

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 中是否有一个函数可以返回正确的距离?

非常感谢

4

1 回答 1

1

我建议使用 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上的实用方法 findClosestEdges /gis/spatial/SpatialTopologyUtils.java#L102。这将返回一个 PointResult 的集合,其中包含最近的 Point 和它所属的 Geometry。如果您查看代码,您会发现它使用 JTS 类 LocationIndexedLine 来计算边的最近部分。

于 2013-12-17T09:31:31.087 回答