gpt4 book ai didi

java - Neo4j-spatial 在 OSM 中查找节点并找到到 POI 的最短路径

转载 作者:行者123 更新时间:2023-11-29 05:33:25 35 4
gpt4 key购买 nike

嗨,我是 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

谢谢

最佳答案

我可以发表一些意见:

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

最后,根据名称查找 POI 的两个建议。任何一个: - 动态层 - 或地理管道

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

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

关于java - Neo4j-spatial 在 OSM 中查找节点并找到到 POI 的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20332147/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com