Neo4j возвращает вычисляемое поле в запросе на географическое расстояние

#neo4j

#neo4j

Вопрос:

Я начал работать несколько недель назад с Neo4j, и все, что я хочу сделать, это вернуть все узлы в базе данных (которые все содержат свойство с их местоположением в формате долготы / широты), упорядоченные по расстоянию от определенной географической точки, в частности моего текущего местоположения.

Это необходимое вычисление:

 dlon = lon2 - lon1 
dlat = lat2 - lat1 
a = (sin(dlat/2))^2   cos(lat1) * cos(lat2) * (sin(dlon/2))^2 
c = 2 * atan2( sqrt(a), sqrt(1-a) ) 
d = R * c (where R is the radius of the Earth)
  

Я прочитал документацию и не могу найти, как хранить процедуры для ее выполнения, как я бы делал в других СУБД, и я почти уверен, что не могу выполнить операцию SIN или COS в запросе.

Есть ли какой-либо способ выполнить этот запрос к базе данных и получить упорядоченные данные вместо того, чтобы получать все результаты и выполнять вычисления один за другим и возвращать их в порядке вручную?

Ответ №1:

Cypher имеет haversin функцию для вычисления расстояний на поверхности озера, см. http://docs.neo4j.org/chunked/stable/query-functions-mathematical.html#functions-haversin

Комментарии:

1. Это именно то, что мне нужно