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)

この関数は距離ではなくユークリッド距離を使用すると言われたため、wgs84 形式を fpr する必要があるとのことでした。

だから私の質問は次のとおりです:neo4j satialに正しい距離を返す関数はありますか??

どうもありがとう

4

1 に答える 1

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 での使用を参照してください。

そして、ポイントに最も近い Geometry を見つけることに関する 2 つ目の質問への回答として、https: //github.com/neo4j/spatial/blob/master/src/main/java/org/neo4j でユーティリティ メソッド findClosestEdges を見てください。 /gis/spatial/SpatialTopologyUtils.java#L102 . これは、最も近い Point とそれが属する Geometry を含む PointResult のコレクションを返します。コードを確認すると、JTS クラス LocationIndexedLine を使用してエッジの最も近い部分を計算していることがわかります。

于 2013-12-17T09:31:31.087 に答える