在 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的概念,所以我认为它会满足你的需求。有关如何使用新功能的信息,您可以查看文档或最近的一些博客:
- https://neo4j.com/docs/developer-manual/current/cypher/syntax/spatial/
- https://medium.com/neo4j/working-with-neo4j-date-and-spatial-types-in-a-react-js-app-5475b5042b50
如果您特别想使用 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
.
我有包含 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的概念,所以我认为它会满足你的需求。有关如何使用新功能的信息,您可以查看文档或最近的一些博客:
- https://neo4j.com/docs/developer-manual/current/cypher/syntax/spatial/
- https://medium.com/neo4j/working-with-neo4j-date-and-spatial-types-in-a-react-js-app-5475b5042b50
如果您特别想使用 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
.