2014-11-06 2 views
1

Я пытаюсь разработать приложение, которое принимает на себя широту, долготу и направление (направление, на которое указывает телефон) от пользователя. Мне нужно использовать координаты для поиска первого объекта (скорее всего, здания), который находится в зоне видимости пользователя. Это здание будет храниться как многоугольник в базе данных. Есть ли запрос Neo4j для этого? Я пытаюсь ответить на вопрос, похожий на «Найти все страны, которые пересекаются Линией Каприкона».Neo4j Spatial - Найти пересечение многоугольника и строки

Спасибо за чтение. Я ценю помощь.

+0

Привет, может быть, этот ответ на Stack может помочь вам http://stackoverflow.com/questions/24548819/neo4j-spatial-contain-search –

+0

Вам нужно попробовать свое собственное решение. Затем вернитесь и задайте вопрос, если что-то пойдет не так. – mihai

ответ

1

Если ваше приложение написано на Java с встроенным API, то Neo4j Пространственное имеет все инструменты, необходимые, потому что она использует JTS внутренне и поэтому вы можете выполнять любые JTS запрос вы хотите. Однако, чтобы извлечь выгоду из индекса RTT, чтобы быстро выполнить запрос, потребуется также ограничить область поиска . Если у вас есть представление о том, максимальное расстояние, которое вы хотите искать вы могли бы решить эту проблему двумя способами:

  1. Либо - сделать начальный поиск расстояния найти все геометрические формы в пределах максимального расстояния, а затем выполнить уточнение на в результате получается набор геометрий, которые пересекают линию видимости.
  2. Или - создать LineString для линии видимости с длиной, соответствующей вашему максимальному расстоянию, а затем выполнить поиск по пересечениям для всех геометрий, которые пересекают этот LineString, и выбрать ближайший.

Этот второй вариант будет работать только в API Java, но будет вполне быстро, так как поиск будет рассматривать только объекты вдоль линии визирования в RTree, поэтому поиск индекса более избирателен, чем расстояние вариант поиска (который будет искать во всех направлениях).

Если вместо этого приложение будет использовать REST API, это будет намного сложнее, поскольку этот API позволяет выполнять поиск точек. Я бы рекомендовал создать неуправляемое расширение и выполнить работу в Java и разоблачить вашу собственную конечную точку REST для этой функции.