在 neo4j 中创建 geohash 关系

Creating geohash relationships in neo4j

我有包含 latitude/longitude 字段的 csv 文件,我想要的是将这个 latitude/longitude 转换成 geohash然后根据不同位置节点的geohash值建立关系
怎么做?

Neo4j 有一个 spatial plugin,它为您的地理数据创建一个 R 树。所以你可以直接使用这个插件而不是创建一个geohash。

此外,Neo4j 的最新版本引入了一些新的属性类型,其中之一就是 point。查看文档:https://neo4j.com/docs/developer-manual/3.4/cypher/functions/spatial/

使用空间插件更新 geohash

只需创建一个 geohash layer :

CALL spatial.addPointLayerGeohash('my_geohash_layer_name')

然后将您的节点添加到层中:

CREATE (n:Node {latitude:60.1,longitude:15.2}) WITH n 
CALL spatial.addNode('my_geohash_layer_name',n) YIELD node 
RETURN node

您的节点必须具有 latitude & longitude 属性。

如果您只处理点数据(纬度和经度),则完全不需要使用空间插件,可以使用 Neo4j 3.4 内置的空间功能。内置索引是一个hilbert space-filling curve,这是一个类似于geohash的概念,所以我认为它会满足你的需求。有关如何使用新功能的信息,您可以查看文档或最近的一些博客:

如果您特别想使用 Neo4j Spatial 库并且只需要 geohash,而不是相关的更好的希尔伯特曲线,那么您可以使用 CALL spatial.addPointLayerGeohash('geom') 这样的过程,然后使用 CREATE (n:Node {latitude:60.1,longitude:15.2}) WITH n CALL spatial.addNode('geom',n) YIELD node RETURN node.