gpt4 book ai didi

neo4j 空间包含搜索

转载 作者:行者123 更新时间:2023-12-01 11:38:39 25 4
gpt4 key购买 nike

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

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

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

所以我的问题是:

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

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

谢谢,恩里科

最佳答案

您的两个问题的答案都是肯定的。以下是使用 REST 和 Cypher 的示例步骤。

1) 创建空间层和索引 (REST)。在此示例中,我的索引名为“test”(将创建同名图层和基础空间节点),我的节点上将包含 wkt 几何信息的属性名称为“wkt”。

POST http://localhost:7474/db/data/index/node {"name":"test", "config":{"provider":"spatial", "wkt":"wkt"}}

2)创建一个节点(Cypher)。您可以拥有标签和各种属性。 Neo4j Spatial 唯一关心的部分是“wkt”属性。 (您可以使用 REST 执行此步骤。)

CREATE (n { name : "Fooville", wkt : "POLYGON((11.0 11.0, 11.0 12.0, 12.0 12.0, 12.0 11.0, 11.0 11.0))" })

3) 将节点添加到层中。您可以通过将节点添加到索引或层来实现这一点,但有一个重要的区别。如果将其添加到索引中,将创建一个仅包含几何数据的复制节点,并将其添加到图层中。通过 Cypher 查询将返回您的原始节点,但通过 REST 或 Java 查询将返回副本节点。如果直接将节点添加到层中,那么如果您希望以后能够使用 Cypher 进行查询,则必须采取额外的步骤。在这两种情况下,您都需要节点的 URI,其最后一个元素是 Neo4j 节点编号。在下面的示例中,我假设节点号为 4(如果您在一个新的空数据库上执行此示例,则为 4)。

方法一:

POST http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer { "layer":"test", "node":"http://localhost:7474/db/data/node/4" }

要使此节点可通过 Cypher 搜索,请将节点编号作为用户“id”属性添加到节点。 (你可以用 REST 做到这一点。)

START n = node(4) SET n.id = id(n)

方法 2:使用此方法将使节点数加倍,WKT 存储加倍,并在通过 REST 与 Cypher 进行查询时产生不同的结果。

POST http://localhost:7474/db/data/index/node/test {"value":"dummy","key":"dummy","uri":"http://localhost:7474/db/data/node/4"}

3) 运行您的查询。您可以在 REST 或 Cypher 中进行查询(假设您已按上述方式调节节点)。可用的 Cypher 查询是:“withinDistance”、“withinWKTGeometry”和“bbox”。可用的 REST 查询是:“findGeometriesWithinDistance”、“findClosestGeometries”和“findGeometriesInBBox”。有趣的是,只有 Cypher 允许您查询 WKT 几何中的节点。 findClosestGeometries 和 findGeometriesWithinDistance 之间的 REST 也存在差异,我还不明白,即使参数是相同的。要查看如何进行 REST 调用,您可以发出以下命令:

POST http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance
POST http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findClosestGeometries
POST http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesInBBox

Cypher 查询是:(用实际值替换“<>”之间的文本,包括“<>”)

START n = node:<layer>("withinDistance:[<y>, <x>, <max distance in km>]")
START n = node:<layer>("withinWKTGeometry:POLYGON((<x1> <y1>, ..., <xN> <yN>, <x1> <y1>))")
START n = node:<layer>("bbox:[<min x>, <max x>, <min y>, <max y>]")

我假设您使用的是经度/纬度坐标引用系统 (CRS),因此 x 是经度,y 是纬度。 (这保留了 z 向上的右手坐标系。)

关于neo4j 空间包含搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24548819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com