问题标签 [neo4j-spatial]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
237 浏览

playframework - 我可以在 Play 中使用的 Neo4j-Spatial 的 SBT 依赖项是什么?框架

如何在 Play 中添加对 neo4j-spatial 的依赖!框架 build.scala ?

我在 Build.scala 中使用以下解析器来导入 Neo4j:

我应该如何包含 Neo4j-Spatial?我想在我的 Java 代码中使用类似以下的内容:

SpatialDatabaseService当前未解决。(我正在使用 Play 2.2.2)

0 投票
2 回答
249 浏览

playframework - 将 NodeEntity 直接添加到 Neo4j-Spatial 层?

我有一个类NodeA,用@NodeEntity注释。它有很多领域,包括:

请注意,NodeA 已经能够通过latlon字段存储足够的位置信息。我想将 NodeA 类型的节点添加到空间层中,以便可以使用GeoPipeline运行空间查询。

  1. 如何将 NodeA 对象直接添加到空间层中?目前,我只能将点等添加new Coordinate(13.766, 55.566)到空间层中。(如果没有解决方案,如何将 NodeA 节点与其对应的 Coordinate 节点关联?)
  2. 我需要将节点单独 添加到空间索引中吗?

我在用:

  • Java in Play!Framework 2.2.2(可更新)
  • 嵌入式Neo4j-Spatial 0.13-neo4j-2.0.1(可更新)

编辑:当我将 NodeA 类型的现有节点连接到 RTREE_ROOT 时,GeoPipeline抱怨缺少NodeA 节点的bbox 属性。(果然NodeA中没有bbox属性,但在其他Coordinate类型的节点中存在)。

0 投票
1 回答
1776 浏览

neo4j - neo4j 空间包含搜索

我正在尝试开发一个 Web 服务,它能够将包含给定 GPS 位置的行政区域的名称返回给我。

我已经开发了一个 java 应用程序,能够使用空间插件和 Java API 在 neo4j 中插入一些多边形(我国的行政区域)。然后,给出一个 gps 位置,我可以得到包含它的多边形的名称。

现在我正在尝试使用 Neo4j 的 REST API(而不是 java api)来做同样的事情,但我找不到任何示例。

所以我的问题是:

1)是否可以使用 REST API 在 Neo4j 中插入多边形(如果我很好理解可以使用 WKT 格式)?

2) 是否可以执行空间查询来查找包含给定 gps 位置的所有多边形?

谢谢,恩里科

0 投票
0 回答
80 浏览

playframework - 如何在 GraphRepository 以及 Neo4j-Spatial Index 中存储节点

我在Play!Framework应用程序 中使用带有Spring数据的Neo4j-Spatial 。

我有一个用户类型的@NodeEntity 我想将它存储在数据库中,以及一个用于基于位置的查询的空间索引。

我看到的示例使用 GraphDatabaseService 创建一个节点:

然后将此节点添加到空间索引中:

但是,节点没有与之关联的特定类型(例如User )。为此,我必须首先创建interface UserRepository extends GraphRepository<User>

然后将 User nodeEntity 添加到存储库:

但是,这会创建3 个节点(空间索引 RTree 中的 1 个,neo4j 图中的 2 个)。这样做的正确方法是什么?我只想要2个节点:

  1. neo4j 图中一个User类型的节点
  2. 一个节点包含与上述节点相关的位置信息。
0 投票
1 回答
358 浏览

java - dumpToString 中的一个奇怪的类转换异常

以下代码生成以下奇怪的异常:

该测试应该创建一条随机路线并返回距离起点一定距离内的节点。然而,线条

生成错误:“线程“main”中的异常 java.lang.ClassCastException:java.lang.Long 不能转换为 java.lang.Double” - 我已经通过注释掉 System.out 行意味着它来检查这一点运行得很好。

请注意,我在运行之前清理了目录,因此目录中应该没有其他节点。完整的堆栈跟踪如下

0 投票
1 回答
1076 浏览

neo4j - Neo4j Spatial,索引和层之间的关系

我对 neo4j 空间中的图层和索引之间的关系感到困惑。特别是我有以下三个问题:(我可以根据要求提供代码示例,但它有很多代码并且与问题没有真正的关系)。

1)如果您使用空间索引提供程序添加索引,则完全可以使用 neo4j 空间而无需显式创建任何层。但是,这是否意味着它隐式创建了一个层,并且我可以通过 Java API 直接访问该层?

2)假设我创建了一个图层。是否可以在此层上执行 Cypher 查询而无需显式创建索引?必须将相同的节点添加到图层和空间索引似乎并不正确,但据我发现,如果您明确创建索引,则只能将 Cypher 与空间一起使用。

3) 我一直使用 SpatialIndexProvider.SIMPLE_WKT_CONFIG 作为我的索引提供者,但这意味着我必须创建一个属性 wkt 并提供输入 POINT(XY),我希望能够告诉我的编码器使用,比如说,两个属性经度和纬度。这可能吗?层似乎是可能的,但索引却不是这样。

0 投票
2 回答
372 浏览

neo4j - NEO4J空间索引错误

我们最近从 Neo4j 1.9 升级到 2.1,现在在使用空间索引更新现有对象时收到错误消息。

我们正在使用以下内容:

Spring Data NEO4J 3.1 Neo4j 2.1.2 服务器与空间插件

我已将问题缩小到以下 REST 调用:

我收到以下回复:

编辑

在做了一些额外的研究后,我发现错误被抛出,因为几何关系的根节点(952)不等于索引根的根节点(2308)。

以下是关联几何节点和索引根的关系和节点属性:

0 投票
1 回答
547 浏览

java - 在 Neo4J 中批量插入 shapefile

目前我正在使用 Neo4j + Neo4j Spatial,我想问你是否有办法将 shapefile 批量导入数据库,就像他们处理 OSM 文件一样,这是因为我正在处理一个巨大的数据集(100GB+)和层+索引在插入数十万个几何图形时肯定会减慢我的速度,同时使用标准的ShapeFileImporter

我的问题是:有没有办法批量导入 shapefile,在插入之后,我们执行 database.reIndex() 的方式与处理 .osm 文件的方式相同吗?

我正在使用 neo4j 2.1.2 和 neo4j-spatial 0.13

ps.:我还尝试使用以下设置我的 GraphDatabaseService:

但似乎 ShapeFileImporter 无论如何都会创建和使用它们。

0 投票
3 回答
1157 浏览

neo4j - 将记录添加到空间层后,Neo4J 性能大幅下降

所以我有大约 7000 万条空间记录要添加到空间层(我用一小部分测试过,一切都很顺利,查询返回与 postgis 相同的结果,层操作似乎很好)但是当我尝试将所有空间记录添加到数据库中,性能迅速下降到在大约 500 万条(大约 2 小时运行时间)记录时变得非常缓慢,并在大约 770 万条(经过 8 小时后)处挂起。

由于空间索引是使用图结构构建自身的 Rtree,我想知道为什么当 os 记录数增加时它会降级。如果我没记错的话,Rtree 插入是 O(n),这就是为什么我担心它可能是重新排列边界框之间的事情,不是树叶的节点导致 addToLayer 过程随着时间的推移而变慢。

目前我正在向这样的层添加节点(很多硬编码的东西,因为我试图在模式和代码风格之前找出问题):

有什么想法吗 ?关于如何提高性能的任何想法?

ps.:使用 java API Neo4j 2.1.2,Spatial 0.13 Core i5 3570k @4.5Ghz,32GB ram 专用 2TB 7200 硬盘到数据库(没有操作系统,没有虚拟内存文件,只有数据本身)

ps2.:所有几何图形都是 LineStrings(如果这很重要:P),它们代表街道、道路等。

ps3.:节点已经在数据库中,我只需要将它们添加到图层中,以便我可以执行空间查询,bbox 和 wkb 属性都可以,经过测试并适用于一小部分。

先感谢您

更改并再次运行代码后(仅将点插入数据库需要 5 小时,不涉及层)发生这种情况,将尝试增加 jvm 堆和嵌入式图形内存参数。

28/07 -> 增加内存没有帮助,现在我正在测试 RTreeIndex 和 LayerRTreeIndex 中的一些修改(该字段到底有什么maxNodeReferences作用?

它被硬编码为 100,并且当(明智地添加的节点数)我的addToLayer方法崩溃到 OutOfMemory 错误时,更改其值会发生变化,如果我没记错的话,更改该字段的值会增加或减少树的宽度和深度(比 50 宽 100, 50 比 100 深)。

总结到目前为止的进展:

  • @Jim 纠正的交易使用不正确
  • 根据@Peter 的建议,内存堆增加到 27GB
  • 3 个空间层,但现在问题变得真实,因为它们是大的。
  • 在向空间层添加节点时做了一些内存分析,我发现了有趣的点。

内存和 GC 分析: http: //postimg.org/gallery/biffn9zq/

在整个过程中使用最多内存的类型是 byte[],我只能假设它属于几何 wkb 属性(几何本身或 rtree 的 bbox)。考虑到这一点,我还注​​意到(您可以查看新的分析图像)使用的堆空间量从未低于 18GB 标记。

根据这个问题是java原语垃圾收集java中的原 语类型是原始数据,因此不会受到垃圾收集,并且仅在方法返回时从方法的堆栈中释放(所以也许当我创建一个新的空间层时,所有那些wkb 字节数组将保留在内存中,直到我手动关闭图层对象)。

这有任何意义吗 ?难道没有更好的方法来管理内存资源,这样该层就不会一直加载未使用的旧数据吗?

0 投票
2 回答
1074 浏览

neo4j - Neo4j Spatial 只返回一个节点

我在 neo4j 中创建了一个空间索引,但是在搜索附近的地方时,我只得到一个结果。

我的查询是:

我在空间索引中有 3 个节点,这些节点具有以下坐标:

  • 节点 1 纬度、经度:63.3654、10.3578
  • 节点 2 纬度、经度:63.3654、10.3577
  • 节点 3 纬度、经度:63.3654、10.3578(同一节点 1)

理论上这三个节点在同一个区域。

任何想法?

更新

我执行了这些步骤来使用空间(全部从 neo4j 浏览器执行-> rest api)

1) 索引创建

2)节点创建(都以相同的方式)

3) 节点到空间索引

4) 节点到层

任何 API 响应都正常,所有索引节点都包含 :RTREE_REFERENCE 关系。

根据查询中的距离参数,这会返回不同的节点,但总是一个......