几个星期前我开始使用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)
我已经阅读了文档,我找不到如何在其他RDBMS中存储执行程序的程序,而且我很确定我无法在查询中执行SIN或COS操作。 / p>
有没有办法对数据库执行此查询并获取有序数据而不是获取所有结果并逐个进行数学并手动返回它们?
答案 0 :(得分:2)
Cypher有一个haversin
函数来计算球体表面上的距离,sc http://docs.neo4j.org/chunked/stable/query-functions-mathematical.html#functions-haversin