Neo4j:使用 distance() 函数确定房屋之间的距离

Neo4j: using distance() function to determine distance between houses

我正在处理来自 csv 文件的数据,该文件包含三列数据:househouseLonghouseLat,其中 house 是房子,houseLong是房子所在位置的经度,houseLat是房子所在位置的纬度。

示例数据如下:

第 1 行 1, 22.6932, 100.5347

第 2 行 2, 25.6589, 98.5679

第 3 行 3, 33.1674, 66.3287

一直到最后一行

第 100 行100, 37.6532, 95.3567

我已将所有这些数据导入 Neo4j - 节点标记为 House

对于每栋房子,我都试图计算出它与其他房子之间的距离。

所以对于 1 号房子,我正在尝试获取从 1 号房到 2 号房、1 号房到 3 号房的距离,依此类推,直到 100 号房。

对于 2 号房屋,我正在尝试获取从 2 号房屋到 1 号房屋、2 号房屋到 3 号房屋的距离,依此类推,直到 100 号房屋。

我不确定实现此查询的最佳方式。现在我能做的就是:

MATCH (h1: House {house: 1}), (h2: House {house: 2})
WITH point({longitude: h1.houseLong, latitude: h1.houseLat}) AS point1, point({longitude: h2.houseLong, latitude: h2.houseLat}) AS point2
RETURN round(distance(point1, point2)) AS Distance

上面的查询给出了房屋 1 和房屋 2 之间的距离,但我不确定如何为查询中的每个房屋缩放此距离。

这应该为您提供距离,按 house 值排序:

MATCH (h1: House), (h2: House)
WHERE h1 <> h2
RETURN
  h1, h2,
  round(distance(
    point({longitude: h1.houseLong, latitude: h1.houseLat}),
    point({longitude: h2.houseLong, latitude: h2.houseLat}))) AS dist
ORDER BY h1.house, h2.house

注意:每对房屋将出现两次(倒序),这显然是您想要的。