将新Geometries添加到Neo4J中的osm文件中

时间:2014-03-12 08:00:18

标签: java neo4j neo4j-spatial

您好我试图将一些餐馆添加到importet .osm文件。所以我想将餐馆保存为新的Point Geometries,并将它们与现有的osm图连接在一起。后来我想读出所有的餐馆,并找到最近的餐厅。那么我应该在新图层中添加餐馆吗?有没有一种简单的方法可以将餐馆与图表连接在正确的地理位置?

感谢您的回答

问候

1 个答案:

答案 0 :(得分:0)

有两种选择:

  • 编辑现有的OSM模型(非常简单)
  • 添加新图层

由于OSM编辑很复杂,我将在最后回答。更简单的选择是添加新图层。在这种情况下,您可以使用SimplePointLayer,因为您只使用点。只需使用工厂方法SpatialDatabaseService.createSimplePointLayer(String name)创建一个。这将允许您将单个节点存储为具有lat / lon属性的Point对象以及您想要的任何其他属性(餐馆名称等)。然后查询附近几何图形的OSM图层(不是点图层)的索引。然后,您可以通过将您的新图层的Point节点与您自己的关系连接到OSM图层的Geometry节点,持久保存餐厅附近的区域来获得乐趣。然后,您从OSM搜索以查找餐馆需要沿着您的新关系从OSM图表中进行遍历。

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

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

这让我们回到了首先在OSM模型中找到节点的问题。如果您要从要添加的位置开始,则可以对附近的几何图形进行简单搜索,然后遍历这些图形以查找要编辑的点。如果您没有找到这样的现有点,则需要决定如何添加它。今天在OSM图中插入一个新点是使用可视化工具完成的(如JOSM,iD或Potlatch,请参阅http://wiki.openstreetmap.org/wiki/Editing)。在代码中执行此操作将更具挑战性。如果你的观点是现有的方式(足够接近连接两个现有节点的边缘),也许你可以解决,你可以将它插入链中。这听起来既复杂又危险,所以我建议不要这样做。它还需要更深入地了解Neo4j Spatial中当前的OSM模型,这有点复杂。