我正在尝试使用Neo4j Spatial在网络上进行距离计算。目标是在一定距离内定义点,但只定位在道路上的点。
我使用Java中的ShapefileImporter为我的道路网络数据加载了一个SHP。 现在我可以看到一堆具有几何属性的节点,但我看不到任何关系。
如何在连接线之间添加关系以便我有一个真实的图形?
我曾预料到ShapeFileImporter会将每一行的起点和终点作为节点并在两者之间添加关系。
BTW,我正在使用带有Spatial 0.13插件的Neo4j Community 2.1.1。
答案 0 :(得分:0)
我还没玩过它,但看起来它需要shapefile中的每个功能,将每个功能作为一个节点导入,并允许通过空间索引对其属性进行空间(内部,重叠,交叉等)查询 - 而不是将一层内容翻译成节点和关系。
如果你要翻译道路linesegments - >图表,记住道路将成为关系,道路的交叉点将成为节点。
答案 1 :(得分:0)
Neo4j Spatial提供的每个示例导入器都会决定如何在图表中构建该数据。这个决定是通过选择GeometryEncoder实现来做出的。 GeometryEncoder决定如何在图形中构造Geometry。对于所有几何分离的数据源,如Shapefile,最简单的通用选择是将每个几何体作为WKT或WKB存储在单个节点的单个属性中。
因此,如果您希望将几何图形分隔为图形结构,则需要为此编写编码器。或者重新使用或修改/扩展已经完成的操作,例如OSMGeometryEncoder。
然而,我认为,问自己的第一个问题是为什么你想将几何图形看作子图?例如,如果要执行路由,那么这还不够,还需要将所有LineString段连接在一起以创建完整的网络。在这种情况下,使用已连接的数据集(如OpenStreetMap,它已经作为完全连接的图形加载到Neo4j中)要容易得多。
如果您特别需要使用Shapefile,那么该过程将是: