道路の始点の座標がわかっているので、道路と始点からの指定距離との交点の座標を計算する必要があります。この種の質問は、のSDO-LRS.LOCATE_PT関数と同じです。 oraclespatial。GeoToolsまたはneo4jspatialに同様のAPIがありますか?
3 に答える
geotoolsが正確にこの機能を提供するかどうかはわかりません。ただし、JTSには、GeotoolsとNeo4j-Spatialの両方で使用される関連するものがあります。JTSパッケージcom.vividsolutions.linearrefを見てください。このパッケージには、線形ジオメトリに沿ってポイントを検索したり、ポイントを作成/投影したりするためのクラスがあります。メソッドLengthIndexedLine.extractPoint(length)があなたが探しているものかもしれないと思います。
Neo4j-Spatialには、LocationIndexedLineを利用するユーティリティがあります(ただし、LengthIndexedLineはまだ使用されていません)。TestSpatialUtilsのテストコードと、SpatialTopologyUtilsで呼び出されるコードを参照してください。
今年は、これに関連する機能に取り組んでいる2つのGoogle SummerofCodeプロジェクトもあります。1つは特にジオプロセシングに関するもので、Neo4j-SpatialのシンプルなAPIを使用してこれらの種類の関数を公開します。もう1つは、OSMデータモデルのデータマイニングに関するものですが、これらの機能にも触れることができます。詳細については、neo4jおよびudigのメーリングリストをご覧ください。夏の終わりまでに、Neo4j-Spatialで利用できるはるかに豊富なジオプロセシング機能のセットを利用できるようになります。
いくつかのコードをNeoj4-Spatialにプッシュして、JTSメソッドLengthIndexedLine.extractPointを、OracleSDO_LRS.LOCATE_PTメソッドと同じように動作する新しいメソッドlocatePointでラップしました。したがって、少なくともトランクでは、Neo4j-Spatialにこの機能があります。実際には、このコードはJTSコードをラップしているため簡単です。そのため、機能は常に存在していましたが、現在はOracleAPIに少し似ています。
前述のGSoCプロジェクトは、APIをある程度標準化しようとするため、より完全な関数セットを直感的に利用できます。
PrecisionModel precisionModel = new PrecisionModel(PrecisionModel.FLOATING_SINGLE);
GeometryFactory geometryFactory = new GeometryFactory(precisionModel, 0);
Coordinate[] coordinates = new Coordinate[3];
coordinates[0] = new Coordinate(0, 0);
coordinates[1] = new Coordinate(5, 5);
coordinates[2] = new Coordinate(10, 0);
CoordinateSequence coordinateSequence = new CoordinateArraySequence(coordinates);
Geometry geo = new LineString(coordinateSequence, geometryFactory);
LengthLocationMap lengthLocationMap = new LengthLocationMap(geo);
LocationIndexedLine locationIndexedLine = new LocationIndexedLine(geo);
LinearLocation linearLocation = lengthLocationMap.getLocation(len);
Coordinate result = locationIndexedLine.extractPoint(linearLocation);