WithinDistance не совсем точно
Я использую neo4j-пространственный 0.13 и Neo4J 2.1.8 в производстве.
У меня есть эти два момента:
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
в качестве третьего аргумента, это работает.
Зачем? Это известная серьезная ошибка?
Я действительно подозреваю, что математическая формула, используемая insideDistance, немного отличается от формулы 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