Neo4j фильтрация после пространственного вызова - PullRequest
0 голосов
/ 05 сентября 2018

Мы разрабатываем проект в Neo4j с пространственным плагином, но мы не можем фильтровать по метке узлов, полученных после вызова. Запрос, который мы хотим реализовать, должен соединить 2 узла типа «Улица», которые находятся в пределах 0,1 от расстояния. Следующий код работает с каждым узлом, но мы не можем использовать фильтр.

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. Мы не знаем, как фильтровать на 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

Я просто забыл загрузить узлы улиц, когда загрузил все остальные узлы, моя ошибка

1 Ответ

0 голосов
/ 05 сентября 2018
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, вы пробовали это? Может быть, я не правильно понял вопрос.

...