在Neo4J中向osm文件中添加新的几何体



你好,我试图添加一些餐馆到importet .osm文件。所以我想把餐馆保存为新的点几何,并在正确的点上与现有的osm图连接起来。后来我想读出所有的餐馆,并找到最近的餐馆从任何给定的点。那么我应该在新图层中添加餐厅吗?是否有一种简单的方法可以在正确的地理点将餐馆与图表联系起来?

谢谢你的回答

问候

有两个选项:

  • 编辑现有OSM模型(不琐碎)
  • 新建图层

由于OSM编辑很复杂,我将最后回答这个问题。更简单的选择是添加一个新图层。在这种情况下,您可以使用SimplePointLayer,因为您只处理点。只需使用工厂方法SpatialDatabaseService创建一个。createSimplePointLayer(字符串名称)。这将允许您将单个节点存储为具有lat/lon属性和任何您想要的属性(餐厅名称等)的Point对象。然后查询OSM层(不是点层)的索引以查找附近的几何图形。然后,您可以使用自己的关系将新层的Point节点连接到OSM层的几何节点,以保持餐厅的"附近"性。那么你从OSM中搜索餐馆就需要沿着你的新关系从OSM图中遍历。

另一个选择,编辑OSM模型在今天不是微不足道的。问题在于,您需要找到OSM模型中希望编辑的部分,然后对其应用更改。这不是为您完成的,需要了解OSM图结构。例如,如果您只是导入一个OSM文件,然后使用OSM导入到的同一层对象,向该层添加一个Point几何体,该几何体将作为一个自由浮点数添加,连接到Rtree,但不连接到OSM模型的其余部分。

如果您的点已经是OSM图中的一个现有节点,那么最好的选择是找到该节点并编辑它。如果它已经是一个点几何,那么您只需更改属性(Feature)或OSM节点的标记。如果它不是Point几何体,而只是一个方式的节点,那么您需要将其升级为Point几何体并将其添加到索引中。这种"升级"可以通过添加一个具有正确属性的新节点(称为"geom"节点)并将其添加到RTree来完成。参见osmimport .java中的示例代码https://github.com/neo4j/spatial/blob/f473a2e20f8f5392e211470e8fdc472bcf800e2d/src/main/java/org/neo4j/gis/spatial/osm/OSMImporter.java#L1097.

这让我们回到了在OSM模型中首先找到节点的问题。如果从想要添加的位置开始,那么可以对附近的Geometries进行简单搜索,并遍历它们以找到想要编辑的点。如果您发现不存在这样的点,则需要决定如何添加它。现在可以使用可视化工具(如JOSM、iD或Potlatch,请参阅http://wiki.openstreetmap.org/wiki/Editing)向OSM图中插入一个新点。在代码中做到这一点将更具挑战性。也许你可以计算出你的点是否在一条现有的路径上(足够接近连接两个现有节点的边缘),然后你可以把它插入到链中。这听起来既复杂又有风险,所以我建议不要这么做。它还需要对Neo4j Spatial中的当前OSM模型有更深入的了解,这有点复杂。

最新更新