2013-12-12 63 views
0

我使用这个代码,找出最接近nabours在WGS84格式的指定点(可变共)Neo4j的空间WGS84距离

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

我会建议使用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使用,看看该工具方法findClosestEdges在https://github.com/neo4j/spatial/blob/master/src/main/java/org/neo4j/gis/spatial/SpatialTopologyUtils.java#L102。这将返回PointResult的集合,其中包含最接近的Point和它所属的几何体。如果您查看代码,您会看到它使用JTS类LocationIndexedLine来计算边的最近部分。

+0

谢谢你的回答。 我不知道是否有办法找到点和多边形之间最短的wgs84距离。 问候 – user3042984

+0

JTS类LocationIndexedLine可以在这里帮助。我们还通过https://github.com/neo4j/spatial/blob/master/src/main/java/org/neo4j/gis/spatial/SpatialTopologyUtils.java#L102执行了一项实用方法。我也会更新上面的答案。 –