1

嗨,我是 neo4j 的新手,想弄清楚 atm 的一切工作原理

我导入了一个 OSM 文件,现在我正在处理一个函数,您可以输入 WGS84 格式的点和 POI,然后该函数会找到到 POI 的最短路径。

因此,为了找到离我的 WGS84 点最近的几何图形,我使用

Coordinate co = new Coordinate(12.9639158,56.070904);
List<SpatialDatabaseRecord> results2 = GeoPipeline
                .startNearestNeighborLatLonSearch(layer, co, 1)
                .toSpatialDatabaseRecordList();

但后来我的问题开始了,因为我真的不明白 OSM 文件是如何构建的

是否有一个函数可以让我通过名称获取我的 POI 节点?我从 OSM 文件中获取索引

SpatialDatabaseService spatialService = new SpatialDatabaseService(database);
Layer layer = spatialService.getLayer(osm);
LayerIndexReader spatialIndex = layer.getIndex();

我可以使用它按属性搜索节点吗?

为了找到点之间的最短路径,我找到了一个 dijkstra 算法

PathFinder<WeightedPath> finder = GraphAlgoFactory.dijkstra(
        Traversal.expanderForTypes( ExampleTypes.MY_TYPE, Direction.BOTH ), "cost" );
WeightedPath path = finder.findSinglePath( nodeA, nodeB );

现在的问题是我的关系类型是什么???我认为它应该是 NEXT 但我如何将它包含在代码中?我必须用 NEXT 创建一个枚举吗???

如果我走对了路,有人可以给我一些反馈并给我一些帮助吗?

好的,终于找到了如何通过 id 找到节点:D 不太难,但我搜索了很长时间:D

谢谢

4

1 回答 1

3

我可以发表几点意见:

  • 我们目前不向 OSM 导入器中的 lucene 索引添加名称或标签,但这是一个好主意。
  • 所做的是将所有几何图形(poi、街道、多边形等)添加到 RTree 索引中。这是调用 layer.getIndex() 时返回的索引。该索引可用于在区域内查找事物,还可以在搜索索引时按几何属性(名称或标签)进行过滤。这可能是您按名称查找内容的最佳选择。请参阅下面的两个选项。
  • OSM 模型中的路线查找并非微不足道,因为当前模型是为 OSM 完整性而设计的,所有 osm 节点都表示为一个巨大的连接网络中的真实节点,包括所有几何形状(不仅仅是道路)。该图很复杂,遍历者需要知道如何遍历它以实现路线查找。它并不像遵循 NEXT 关系那么简单。例如,参见http://www.slideshare.net/craigtaverner/neo4j-spatial-backing-a-gis-with-a-true-graph-database上的幻灯片 13 和 15 。每个线段确实有一个长度,但您真正想要的是一个更简单的图形,它仅具有交叉点的节点,以及这些点之间的总行驶距离的单一关系。该图不存在,但可以由 OSM 导入器添加。

最后,关于按名称查找 POI 的两个建议。要么: - 动态层 - 或 geopipes

对于动态层,您可以使用 CQL 语法或键值对(用于标签)。有关每个示例,请参见https://github.com/neo4j/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/TestDynamicLayers.java的第 81 和 84 行。这种方法允许在 RTree 的回调中在遍历期间完成对名称的测试。

对于 GeoPipes,您定义了一个流,RTree 返回的每个对象都将传递给下一个过滤器。这应该具有与动态层相同的性能,并且使用起来更直观。例如,参见https://github.com/neo4j/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/pipes/的第 99 和 112 行的“filter_by_osm_attribute”和“filter_by_property”测试GeoPipesTest.java。它们都按名称搜索街道。

于 2013-12-02T22:14:24.750 回答