我正在使用以下查询来创建使用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
范围内?
我真的很感激任何帮助。
答案 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示例的文档的链接)
空间插件应该提供最准确和可预测的结果。