知道道路起点的坐标,需要计算道路与起点之间指定距离之间的交点坐标。这类问题就像SDO-LRS一样。 oracle spatial中的LOCATE_PT函数。在GeoTools或neo4j空间上有类似的API吗?
答案 0 :(得分:2)
我不确定geotools是否提供了这个功能。但是,JTS中有一个相关的,Geotools和Neo4j-Spatial都使用它。查看JTS包com.vividsolutions.linearref,它包含用于搜索点的线性几何或点的创建/投影的类。我认为方法LengthIndexedLine.extractPoint(length)可能正是您要找的。 p>
在Neo4j-Spatial中,我们有一个实用程序,它使用了LocationIndexedLine(但还没有LengthIndexedLine)。请参阅TestSpatialUtils中的测试代码及其在SpatialTopologyUtils中调用的代码。
今年还有两个Google Summer of Code项目正致力于与此相关的功能。一个是关于地理处理的,我们将在Neo4j-Spatial中使用简单的API公开这些类型的函数。另一个是关于OSM数据模型的数据挖掘,但也可以涉及这些功能。有关更多信息,请观看neo4j和udig邮件列表。到夏天结束时,我们将在Neo4j-Spatial中提供更丰富的地理处理功能。
答案 1 :(得分:1)
我刚刚将一些代码推送到Neoj4-Spatial,用新方法locatePoint包装JTS方法LengthIndexedLine.extractPoint,其行为与Oracle SDO_LRS.LOCATE_PT方法相同。因此,至少在主干上,Neo4j-Spatial现在具备此功能。实际上,这个代码是微不足道的,因为它包装了JTS代码,因此功能一直存在,但现在看起来更像Oracle API。
前面提到的GSoC项目将尝试在某种程度上标准化API,以便以直观的方式提供更完整的功能集。
答案 2 :(得分:0)
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);