使用Neo4J使用纬度/经度查找距离

时间:2018-08-13 12:27:09

标签: neo4j

我在一个表中有一个由景点组成的CSV,而其他表则由一个公司的办公地点组成。这两个表也都包含纬度和经度信息。

名胜古迹

组成的CSV文件结构

POI_Name经度纬度城市
POI_1 77.573957 12.970125班加罗尔
POI_2 77.579886 13.009582班加罗尔
POI_3 77.546688 13.023931钦奈

同样,我们有一个CSV文件,其中包含公司的办公地点

办公室经度纬度城市
Office_1 78.324445 12.970125班加罗尔
Office_2 77.254555 13.234444金奈
Office_3 76.098438 14.135567班加罗尔

两个表都包含数千个记录。现在,我想在Neo4J中创建一个查询,该查询将按降序排列前5个最近的景点办公室位置(在查询中作为参数传递)在运行时。

1 个答案:

答案 0 :(得分:0)

由于每次两个节点之间的距离都是相同的,因此我建议您解析所有地点与所有办公室之间的距离,并创建一个以km为单位的距离值或节点之间的距离(placei,officej)的“距离”关系,那么您只需查询另一个节点的前n个最近的节点(然后您可以运行以下查询:MATCH(p:Place)-[d:DISTANCE]->(o:Office {myoffice})RETURN p,o,d ORDER按d.km ASC限制5)。您将节省时间和计算成本。

无论如何,您都可以使用下一个查询:

MATCH (p:Place), (o:Office {id:myoffice}) RETURN distance(point({latitude: p.latitude, longitude: p.longitude}), point({latitude: o.latitude, longitude: o.longitude})) / 1000.0 as km, p, o ORDER BY km ASC LIMIT 5