2

我需要在地图中表示一个地方的圆形或多边形区域。任何地方都不是地图中的一个 lon lan piont。它是一个多边形区域。目前我拥有的是具有单点 lon lat 表示的单个单索引 wkt 字段。neo4j中如何表示圆形或多边形区域信息?

4

2 回答 2

3

您还应该能够在 WKT 字段中使用多边形表示,不确定它是否有效,但应该可以。因为它将索引多边形的边界框。

在 SDN 3.1.M1 中,还对多边形、圆形和盒子等地理类型提供了更多支持,使其更易于使用。

于 2014-04-08T21:55:31.777 回答
0

这是一个使用 REST 的示例,说明如何在 Neo4j Spatial 中使用多边形。

首先,设置一个配置为使用 WKT 几何的空间索引。

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

我的索引名称是“tickle”。如果您尚未建立 RTree 的基本节点,则此调用将执行此操作。在这些节点中有一个层节点。该层也被命名为“tickle”。如果 RTree 的基础节点已经建立,将添加一个新的层节点。我将添加的节点中包含 WKT 几何图形的属性的名称是“wkt”。

现在,添加一个多边形节点。

POST http://localhost:7474/db/data/transaction/commit {"statements" : [ {"statement" : "CREATE (n:City {name : 'Bartown', wkt : 'POLYGON ((-97.06138 32.837, -97.06133 32.836, -97.06124 32.833, -97.06127 32.832, -97.06138 32.837))"') RETURN id(n)" } ] }

从 Neo4j 空间的角度来看,这没有任何作用。它只是添加了一个具有 name 属性(“Bartown”)和包含 lon/lat 多边形的 wkt 属性的节点。请注意,多边形由成对的经度和纬度组成,每个表示多边形的一个顶点。最后一个顶点必须与第一个顶点具有相同的坐标(这使它成为一个封闭的图形)。请注意返回的节点 ID。它用于下一步。

现在将节点添加到 RTree。如果你创建的节点的ID不是4,把下面语句末尾的数字改成刚刚返回的值。

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

如果显示节点图,您会发现已将节点添加到 RTree 中,该节点的“id”属性与原始节点的内部 ID (4) 匹配,但内部 ID 不同。

所以,现在您已经向 RTree 和空间索引添加了一个节点。如果要添加更多,只需创建更多节点并将它们添加到索引中。

如果您使用 REST 进行查询,Neo4j Spatial 将返回 RTree 节点,必须使用“id”属性取消引用才能获取原始节点。举个例子,

POST http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance {"pointX":"-97.0", "pointY":"32.0", "distanceInKm":"1000.0", "layer":"tickle"}

将返回 RTree 节点 (5)。另一方面,如果您使用 Cypher 进行查询,则会返回原始节点。(这次我不会费心将 Cypher 嵌入到 REST 中。)

开始 n=node:tickle("withinDistance:[32.0, -97.0, 1000.0]") 返回 n;

请注意,Cypher 调用中坐标的顺序是纬度、经度、最大距离。这与其他一切相反,并且是一个错误。

如果你还没有把它整理好,我希望这足以让你开始。我自己刚刚完成了这个!

于 2014-07-07T19:54:14.750 回答