2015-12-08 2 views
1

Я использую neo4j-пространственный 0.13 и Neo4J 2.1.8 в производстве.в пределахDistance неточно вообще

У меня есть эти два момента:

Point(48.89205f,2.373335f) 
Point(48.885464f,2.2808545f) 

haversine Используя формулу, расстояние между этими двумя точками: 6.8 км.

Я ожидаю, что этот запрос, чтобы вернуть хотя бы другую точку:

START targetedPersons = node:personslocation("withinDistance:[2.373335,48.89205, 7.0]") 
return targetedPersons.id 

, но это не так.

Однако, когда я передаю несколько большее значение, например, 11.0 в качестве третьего аргумента, он работает.

Почему? Это известная серьезная ошибка?

Я действительно подозреваю, что математическая формула, используемая inDistance, немного отличается от формулы haversine ...
Может кто-нибудь подтвердить?

ответ

1

Обратите внимание, что API для withinDistance в Cypher использует порядок lat, lon вместо более общего порядка lon, lat. Убедитесь, что это то, что вы ожидаете. (Я предполагаю, что вы знаете об этом, так как вы переключились порядок в ваших примерах)

Я считаю, что это функция Neo4j-пространственный используются для вычисления расстояния: https://github.com/neo4j-contrib/spatial/blob/769e87e02aa065971a4452a247f08eb0a38cce7c/src/main/java/org/neo4j/gis/spatial/pipes/processing/OrthodromicDistance.java#L77

+0

Да я знаю, что это тонкость восприятия с заказом, но мне удалось справиться с этим. Я только что осуществил то же вычисление, но все еще есть проблема точности. – Mik378

+0

Мне удалось уточнить алгоритм, используя тот же метод, что и в cypher + reordering lat lon. Это работает сейчас, спасибо. – Mik378

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