2013-05-21 3 views
1

Я использую Neo4j 1.8.2 с Neo4j Spatial 0,9 для 1.8.2 (http://m2.neo4j.org/content/repositories/releases/org/neo4j/neo4j-spatial/0.9-neo4j-1.8.2/)Neo4j Пространственно два узла, созданные для каждого пространственно индексированного узла

Далее следуют примеры кода отсюда http://architects.dzone.com/articles/neo4jcypher-finding-football одним change- вместо SpatialIndexProvider .SIMPLE_WKT_CONFIG, я использовал SpatialIndexProvider.SIMPLE_POINT_CONFIG_WKT

Все отлично работает, пока вы не выполните следующий запрос:

START n=node:stadiumsLocation('withinDistance:[53.489271,-2.246704, 5.0]') 
RETURN n.name, n.wkt; 

n.name является нулевым. Когда я исследовал график, я нашел эти данные:

Node[80]{lon:-2.20024,lat:53.483,id:79,gtype:1,bbox:-2.20024,53.483,-2.20024,53.483]}  
Node[168]{lon:-2.29139,lat:53.4631,id:167,gtype:1,bbox:-2.29139,53.4631,-2.29139,53.4631]} 

для узла 80 возвращенных, это выглядит, как это узел, созданный для пространственной записи, который содержит свойство ID: 79. Узел 79 - это фактическая запись стадиона из примера.

Согласно источнику IndexProviderTest, комментарии // Мы не больше это нужно как узел мы вернемся уже 'Реал' узел // Node = узел db.getNodeById ((Long) spatialRecord.getProperty ("Я бы")); , похоже, указывают, что эта функция недоступна в версии, которую я использую.

Мой вопрос в том, что является рекомендуемым способом использования в пределах сопротивления с другими условиями соответствия? Есть еще несколько условий, которые могут быть выполнены, но я не могу заставить обработать фактический узел, чтобы фактически соответствовать им. Должен ли я явно создавать отношения? Не использовать Cypher и использовать основной API для обхода? Разделить запросы?

+0

Lemme попытаться воссоздать это ... –

ответ

1

Два варианта:

а) Использование GeoPipline.startNearestNeighborLatLonSearch, чтобы получить стартовый набор узлов, поставки для последующего Cypher запроса, чтобы сделать согласование/фильтрацию по другим свойствам б) Так как мой Lat/длинные позиции являются общими для многих сущностей [с использованием центра тяжести области], я могу создать отношение от пространственного узла ко всем сущностям, которые находятся в этой области, а затем использовать один запрос Cypher, такой как: START n = node: стадионыLocation ('WithinDistance: [53.489271, -2.246704, 5.0] ') MATCH (n) < - [: LOCATED_IN] - (что-то) WHERE something.someProp = 5 RETURN something

Как советовал Питер, пошел с опцией b. Обратите внимание, что нет способа вернуть обратно пространственно проиндексированный узел, чтобы вы могли создавать отношения с ним. Должен был сделать запрос InternalDistance для расстояния 0,0.

0

Можете ли вы выполнить расширенный тест, который я сделал в https://github.com/neo4j/spatial/blob/2803093d544f56d7dfe8f1d122e049fa73489d8a/src/test/java/org/neo4j/gis/spatial/IndexProviderTest.java#L199? Он показывает, как найти местоположение и пересечь cypher на следующий узел.

+0

Пробовал на 1.8.2, и я получил результаты, но не ожидал. В приведенном выше примере я действительно ищу узлы с идентификаторами 79 и 167. В соответствии с p = n - m, m - это куча узлов, но ни один из них не имеет идентификаторов 79 и 167 (все они кажутся узлами местоположения и а не фактический узел, который содержит не пространственные свойства) – Luanne

Смежные вопросы