Graph 基于SHP文件的Neo4j空间图形网络

Graph 基于SHP文件的Neo4j空间图形网络,graph,neo4j,spatial,shapefile,Graph,Neo4j,Spatial,Shapefile,我正在尝试使用Neo4j Spatial在网络上进行距离计算。目标是定义一定距离内的点,但仅定义位于道路上的点 我使用Java中的ShapefileImporter将道路网络数据加载到SHP中。 现在,我可以看到一组具有几何体属性的节点,但看不到任何关系 如何在连接线之间添加关系,以便生成真实的图形 我原以为ShapeFileImporter会将每条线的起点和终点作为一个节点,并在两者之间添加关系 顺便说一句,我正在使用带有Spatial 0.13插件的Neo4j Community 2.1.1

我正在尝试使用Neo4j Spatial在网络上进行距离计算。目标是定义一定距离内的点,但仅定义位于道路上的点

我使用Java中的ShapefileImporter将道路网络数据加载到SHP中。 现在,我可以看到一组具有几何体属性的节点,但看不到任何关系

如何在连接线之间添加关系,以便生成真实的图形

我原以为ShapeFileImporter会将每条线的起点和终点作为一个节点,并在两者之间添加关系


顺便说一句,我正在使用带有Spatial 0.13插件的Neo4j Community 2.1.1。

我还没有玩过它,但它看起来像是接受了shapefile中的每个特征,将每个特征作为节点导入,并允许空间(内部、重叠、相交等)通过空间索引查询其特性-不将线段图层转换为节点和关系


如果要转换道路线段->图形,请记住道路将成为关系,道路的交点将成为节点。

随Neo4j Spatial提供的每个示例导入器都决定如何在图形中构造该数据。此决定由GeometryEncoder实现的选择决定。GeometryEncoder决定如何在图形中构造几何体。对于所有几何图形都分离的数据源(如Shapefile),最简单的一般选择是将每个几何图形作为WKT或WKB存储在单个节点的单个属性中

所以,如果您想将几何图形分解为图形结构,您需要为此编写一个编码器。或者重新使用或修改/扩展已经这样做的代码,比如OSMGeometryEncoder

但是,我认为,首先要问自己的问题是,为什么要将几何体视为一个子图?例如,如果要执行布线,则这是不够的,还需要将所有线串线段连接在一起以创建完整的网络。在本例中,使用已连接的数据集(如OpenStreetMap)要容易得多,它已作为完全连接的图形加载到Neo4j中

如果您特别需要使用shapefile,则过程如下:

  • 编写一个GeometryEncoder,将线字符串转换为子图(可能以OSMGeometryEncoder为模型)
  • 扩展或修改Shapefile导入器,以便在导入期间使用此新几何体编码器
  • 编写代码,查找线字符串之间可能的连接并连接它们(通过合并公共端点节点或通过在它们之间创建特殊关系)
  • 添加您认为路由所需的任何额外元数据(转弯限制等)
  • 编写您的路由算法

感谢您的投入。我使用的是Shapefile,因为这是我的数据所采用的唯一经批准的格式。我已经快速查看了ShapefileImporter源代码,但还没有查看OSMGeometryEncoder,所以这非常有用!