使用neo4j cypher查询查找我周围的最近用户

时间:2015-07-26 20:33:08

标签: neo4j

我正在使用以下查询来创建使用lat,lng。

的用户
MERGE (n { user:'a', id:1,lat:40.736184,lng:-73.992006 })   
MERGE (n { user:'b', id:2,lat:40.748475,lng:-73.993808 })
MERGE (n { user:'c', id:3,lat:40.744638,lng:-73.982135 }) 
MERGE (n { user:'d', id:4,lat:40.708929,lng:-74.005567 }) 
MERGE (n { user:'e', id:5,lat:40.729615,lng:-73.975698 })  

如何让40.724152, -74.001276范围内的所有用户都在1 km范围内? 我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:1)

这里是neo4j空间插件的链接:

https://github.com/neo4j-contrib/spatial

之前我没有使用它,但大部分说明都是在嵌入模式下使用它。但是,如果你在服务器模式下使用它,那么这里有预编译插件的链接:

https://github.com/neo4j-contrib/spatial#using-the-neo4j-spatial-server-plugin

您可以在Cypher中执行以下操作:

ABS(user1.lat - user2.lat) < LAT_NUMBER AND ABS(user1.long - user2.long) < LONG_NUMBER

当然,这是一个正方形。此外,LAT_NUMBER和LONG_NUMBER必须是近似值,因为一公里处的纬度/经度与纬度/经度的比率相同(参见this SO question/answer

你也可以使用优质的毕达哥拉斯&#39;定理,虽然我没有看到在Cypher中找到数字平方的方法。再一次,你只需要提出一个经度和经度混合的斜边。

(编辑:请参阅Michael的评论,特别是指向您可以使用的Cypher示例的文档的链接)

空间插件应该提供最准确和可预测的结果。