问题标签 [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.
playframework - 我可以在 Play 中使用的 Neo4j-Spatial 的 SBT 依赖项是什么?框架
如何在 Play 中添加对 neo4j-spatial 的依赖!框架 build.scala ?
我在 Build.scala 中使用以下解析器来导入 Neo4j:
我应该如何包含 Neo4j-Spatial?我想在我的 Java 代码中使用类似以下的内容:
SpatialDatabaseService当前未解决。(我正在使用 Play 2.2.2)
playframework - 将 NodeEntity 直接添加到 Neo4j-Spatial 层?
我有一个类NodeA,用@NodeEntity注释。它有很多领域,包括:
请注意,NodeA 已经能够通过lat和lon字段存储足够的位置信息。我想将 NodeA 类型的节点添加到空间层中,以便可以使用GeoPipeline运行空间查询。
- 如何将 NodeA 对象直接添加到空间层中?目前,我只能将点等添加
new Coordinate(13.766, 55.566)
到空间层中。(如果没有解决方案,如何将 NodeA 节点与其对应的 Coordinate 节点关联?) - 我需要将节点单独 添加到空间索引中吗?
我在用:
- Java in Play!Framework 2.2.2(可更新)
- 嵌入式Neo4j-Spatial 0.13-neo4j-2.0.1(可更新)
编辑:当我将 NodeA 类型的现有节点连接到 RTREE_ROOT 时,GeoPipeline抱怨缺少NodeA 节点的bbox 属性。(果然NodeA中没有bbox属性,但在其他Coordinate类型的节点中存在)。
neo4j - neo4j 空间包含搜索
我正在尝试开发一个 Web 服务,它能够将包含给定 GPS 位置的行政区域的名称返回给我。
我已经开发了一个 java 应用程序,能够使用空间插件和 Java API 在 neo4j 中插入一些多边形(我国的行政区域)。然后,给出一个 gps 位置,我可以得到包含它的多边形的名称。
现在我正在尝试使用 Neo4j 的 REST API(而不是 java api)来做同样的事情,但我找不到任何示例。
所以我的问题是:
1)是否可以使用 REST API 在 Neo4j 中插入多边形(如果我很好理解可以使用 WKT 格式)?
2) 是否可以执行空间查询来查找包含给定 gps 位置的所有多边形?
谢谢,恩里科
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个节点:
- neo4j 图中一个User类型的节点
- 一个节点包含与上述节点相关的位置信息。
java - dumpToString 中的一个奇怪的类转换异常
以下代码生成以下奇怪的异常:
该测试应该创建一条随机路线并返回距离起点一定距离内的节点。然而,线条
生成错误:“线程“main”中的异常 java.lang.ClassCastException:java.lang.Long 不能转换为 java.lang.Double” - 我已经通过注释掉 System.out 行意味着它来检查这一点运行得很好。
请注意,我在运行之前清理了目录,因此目录中应该没有其他节点。完整的堆栈跟踪如下
neo4j - Neo4j Spatial,索引和层之间的关系
我对 neo4j 空间中的图层和索引之间的关系感到困惑。特别是我有以下三个问题:(我可以根据要求提供代码示例,但它有很多代码并且与问题没有真正的关系)。
1)如果您使用空间索引提供程序添加索引,则完全可以使用 neo4j 空间而无需显式创建任何层。但是,这是否意味着它隐式创建了一个层,并且我可以通过 Java API 直接访问该层?
2)假设我创建了一个图层。是否可以在此层上执行 Cypher 查询而无需显式创建索引?必须将相同的节点添加到图层和空间索引似乎并不正确,但据我发现,如果您明确创建索引,则只能将 Cypher 与空间一起使用。
3) 我一直使用 SpatialIndexProvider.SIMPLE_WKT_CONFIG 作为我的索引提供者,但这意味着我必须创建一个属性 wkt 并提供输入 POINT(XY),我希望能够告诉我的编码器使用,比如说,两个属性经度和纬度。这可能吗?层似乎是可能的,但索引却不是这样。
neo4j - NEO4J空间索引错误
我们最近从 Neo4j 1.9 升级到 2.1,现在在使用空间索引更新现有对象时收到错误消息。
我们正在使用以下内容:
Spring Data NEO4J 3.1 Neo4j 2.1.2 服务器与空间插件
我已将问题缩小到以下 REST 调用:
我收到以下回复:
编辑
在做了一些额外的研究后,我发现错误被抛出,因为几何关系的根节点(952)不等于索引根的根节点(2308)。
以下是关联几何节点和索引根的关系和节点属性:
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 无论如何都会创建和使用它们。
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 字节数组将保留在内存中,直到我手动关闭图层对象)。
这有任何意义吗 ?难道没有更好的方法来管理内存资源,这样该层就不会一直加载未使用的旧数据吗?
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 关系。
根据查询中的距离参数,这会返回不同的节点,但总是一个......