【问题标题】:Creating geohash relationships in neo4j在 neo4j 中创建 geohash 关系
【发布时间】:2018-06-11 10:00:06
【问题描述】:

我有包含 latitude/longitude 字段的 csv 文件,我想要将此纬度/经度转换为 geohash,然后在不同位置之间建立关系节点基于其 geohash 值。
该怎么做?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我在neo4j中加载了我的csv,我只是用纬度和经度制作了位置节点,我没有找到一种方法来建立它们之间的位置关系
  • 我找到了github.com/huashiyiqike/GeoHash_Neo4j,但构建对我不起作用

标签: neo4j cypher neo4j-spatial


【解决方案1】:

Neo4j 有一个spatial plugin,它可以为您的地理数据创建一个 R-Tree。所以不用创建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

您的节点必须具有latitudelongitude 属性。

【讨论】:

  • 谢谢,但我没有找到关于如何使用 R-Tree 做到这一点的清晰教程!?
  • 你看过这个页面了吗:neo4j-contrib.github.io/spatial/0.24-neo4j-3.1/index.html?有一些教程参考。
  • 是的,我看到了它们,但由于我是 neo4j 的新手,所以我不太了解。空间 neo4j 插件在基本 Neo4j 浏览器中不起作用吗?我需要 uDig 才能使用它吗?
  • 我发现 here 该插件具有 geohash 功能。你能帮我吗?
  • 仅供参考,这是一个猜测,当您使用其他层时,插件会生成一棵树,我的示例来自插件的单元测试。我的结果和你一样。
【解决方案2】:

如果只处理Point数据(经纬度),则完全不需要使用spatial插件,可以使用Neo4j 3.4内置的spatial features。内置索引是一个希尔伯特空间填充曲线,这是一个类似于 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 这样的命令添加数据。

【讨论】:

  • 实际上 geohash 层不起作用(它会创建与 R-tree 不同的不相关节点)你可以看到问题here
  • 还是这样?
  • 我看到你发布了一个new version,geohash层是固定在里面的吗?
  • 我想问一下如何将层中geohash的长度固定为7例如??
猜你喜欢
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多