neo4j空间wgs84距离

时间:2013-12-12 16:23:50

标签: java neo4j neo4j-spatial

我正在使用此代码查找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中是否有一个函数,返回正确的距离?

非常感谢

1 个答案:

答案 0 :(得分:1)

我建议使用org.geotools.referencing.datum.DefaultEllipsoid.WGS84.orthodromicDistance()方法。例如,请参阅https://github.com/neo4j/spatial/blob/master/src/main/java/org/neo4j/gis/spatial/osm/OSMImporter.java#L2158

中的OSMImporter中的用法

在回答关于找到最接近的几何的次要问题时,请查看https://github.com/neo4j/spatial/blob/master/src/main/java/org/neo4j/gis/spatial/SpatialTopologyUtils.java#L102处的实用方法findClosestEdges。这将返回PointResult的集合,包含最接近的Point及其所属的Geometry。如果您查看代码,您将看到它使用JTS类LocationIndexedLine来计算边缘的最近部分。