2013-12-12 40 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執行了一項實用方法。我也會更新上面的答案。 –