嗨,我是新手neo4j并试图弄清楚一切是如何工作的
我导入一个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 );
现在的问题是我的RelationshipTypes ???我认为它应该是NEXT,但我如何在代码中包含它?我是否必须创建一个带有NEXT的枚举???
如果我在正确的方式给你一些帮助,有人可以给我一些反馈吗?
好的终于找到了如何通过id找到节点:D不是太难但我搜索了很长时间:D
谢谢
答案 0 :(得分:3)
我可以发表一些意见:
最后,提出了两个按名称查找POI的建议。或者: - 动态图层 - 或地理位置
对于动态图层,您可以使用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/GeoPipesTest.java的第99和112行的'filter_by_osm_attribute'和'filter_by_property'测试。这些都按名称搜索街道。