使用Neo4j空间查询得到错误距离的问题排查
问题根源:坐标参数顺序颠倒
你在创建Location节点时,颠倒了point函数中latitude和longitude的参数值,导致Neo4j计算的距离与在线工具结果不符。
具体分析
- Neo4j的
point({latitude: ..., longitude: ...})要求:latitude对应纬度(范围-90°90°),`longitude`对应经度(范围-180°180°)。 - 你的创建语句中,把实际的经度值(77.xx)赋值给了
latitude,实际的纬度值(12.xx/13.xx)赋值给了longitude。这让Neo4j判定两个点的纬度差约1°、经度几乎一致,计算出的距离约111公里(纬度每度的近似距离)。 - 而在线计算器使用了正确的坐标对应关系(纬度12.xx/13.xx,经度77.xx),此时两个点经度差约1°,在高纬度区域,经度每度的距离会因纬度余弦值缩小,最终结果约23.7公里。
修正后的创建语句
CREATE p = (:Location {location: point({latitude: 12.958174189153517, longitude: 77.74457111606239})}) RETURN p CREATE p = (:Location {location: point({latitude: 13.958174189153517, longitude: 77.744577645})}) RETURN p
使用你原本的查询语句重新计算,结果就会和在线工具的23.71公里匹配。
内容的提问来源于stack exchange,提问作者Vishal Jamdade
相关产品推荐
相关产品推荐

