neo4j中空间交集之后的子图

时间:2018-05-28 11:31:34

标签: neo4j spatial

我最近开始使用neo4j db及其空间插件。

我的数据模型由4个不同的节点组成:建筑物,楼层,房间和设备。所有这些都与关系有关,并且#34; HAS"。

添加到空间图层的节点是Building。

这就是这一刻:

data model 要使用下一个cypher

获取在给定多边形中相交的所有建筑物
WITH 'POLYGON((-6.342523097991944 39.47879396554205, -6.339948177337647 
39.47879396554205, -6.339948177337647 39.478121118127696, 
-6.342523097991944 39.478121118127696, -6.342523097991944 
39.47879396554205))' as polygon
CALL spatial.intersects('geom',polygon) YIELD node
RETURN node

返回一个建筑物的特殊性:

enter image description here

现在,我要做的是从相交的建筑物中获取子图形。这是我的尝试:

WITH 'POLYGON((-6.342523097991944 39.47879396554205, -6.339948177337647 
39.47879396554205, -6.339948177337647 39.478121118127696, -6.342523097991944 
39.478121118127696, -6.342523097991944 39.47879396554205))' as polygon
CALL spatial.intersects('geom',polygon) YIELD node
MATCH (node)-[:HAS]->(Floor)-[:HAS]->(Room)-[:HAS]->(Device)
RETURN *

输出下一个图表:

enter image description here

这个结果与我想要的结果相似但不完全相同。我需要的是所有相交的建筑,所有的楼层,房间和设备。这个结果只给我的房间和有设备的房间。我不知道如何编写密码以获得我需要的东西。

除此之外,以前的cypher大约需要7秒才能输出结果,那个时间是否跟我实际图形的大小一样正常?对我来说似乎很重要。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以指定可变长度模式:

...
CALL spatial.intersects('geom',polygon) YIELD node
MATCH (node)-[:HAS*0..3]->(Item)
RETURN Item