空间调用后的Neo4j过滤

时间:2018-09-05 10:57:19

标签: neo4j spatial neo4j-spatial

我们正在Neo4j中开发一个带有空间插件的项目,但无法对调用后获得的节点标签进行过滤。 我们要实现的查询必须连接距离在0.1距离之内的“街道”类型的2个节点。以下代码适用于每个节点,但是我们不能使用过滤器。

MATCH (s1:Street) with s1
CALL spatial.withinDistance('streets',{latitude: s1.latitude, longitude: s1.longitude},0.1)
yield node as s2
WHERE s1.id<s2.id AND s2
CREATE (s1)-[:NEXT_TO]->(s2)
RETURN s1,s2

很显然,这里的NEXT_TO关系是在s1附近的每个节点(甚至不是Street)之间建立的。我们不知道如何对s2进行过滤以仅捕获带有标签Street的节点。 我们尝试了许多解决方案,但没有一个奏效。 你能帮我们吗? 谢谢

编辑:

解决方案是

MATCH (s1:Street) with s1
CALL spatial.withinDistance('layer',{latitude: s1.latitude, longitude: s1.longitude},0.1)
yield node as s2
WHERE s1.id<s2.id AND 'Street' in labels(s2)
CREATE (s1)-[:NEXT_TO]->(s2)
return s1,s2

当我加载所有其他节点时,我只是忘记加载Street节点,这是我的错

1 个答案:

答案 0 :(得分:0)

MATCH (s1:Street) with s1
CALL spatial.withinDistance('streets',{latitude: s1.latitude, longitude: s1.longitude},0.1)
yield node as s2
WHERE s1.id<s2.id AND s2:Street
CREATE (s1)-[:NEXT_TO]->(s2)
RETURN s1,s2

我添加了where子句s2:Street,您是否尝试过?也许我没有正确理解这个问题。