我创建了Neo4j的空间索引,但附近的地点搜索时我只得到一个结果。
我的查询是:
START n=node:geom('withinDistance:[63.36, 10.35, 50.0]') RETURN n
而我在这个坐标中空间索引3个节点:
- 节点1纬度,经度:63.3654,10.3578
- 节点2纬度,经度:63.3654,10.3577
- 节点3 LAT,经度:63.3654,10.3578(相同的节点1)
理论上这三个节点在同一地区。
任何想法?
UPDATE
我执行这些步骤,以使用空间(从Neo4j的浏览器执行所有 - > REST API)
1)索引创建
:POST /db/data/index/node/
{
"name" : "geom",
"config" : {
"provider" : "spatial",
"geometry_type" : "point",
"lat" : "lat",
"lon" : "lon"
}
}
2)节点创建(全部以相同的方式)
:POST /db/data/node
{
"name":"Franciscatos Pizza",
"lat": 63.3654,
"lon": 10.3578
}
3)节点到空间索引
:POST /db/data/index/node/geom
{
"value":"dummy",
"key":"dummy"
"uri":"http://localhost:7474/db/data/node/8"
}
4)节点到层
:POST /db/data/ext/SpatialPlugin/graphdb/addNodeToLayer
{
"layer":"geom",
"node":"http://localhost:7474/db/data/node/8"
}
任何API响应是OK和索引的所有节点包含:RTREE_REFERENCE关系。
根据查询的距离参数,这将返回我在不同的节点,但总是一个...
大流士
第一件事情,不要做第3步)。 步骤3)和4)是有些多余的,但步骤3)使得在该节点的几何信息的副本,并创建一个被存储到层的第二节点。 取而代之的是,做这个新步骤3)。
START n = NODE(8)
SET n.id = ID(n)
这暗号代码添加包含的Neo4j节点数量的节点上的“身份证”参数。 一旦你这样做,你可以使用Cypher支架空间索引查询。 请注意,第一行有不同的节点号各一次。 这个“身份证”属性是自我指涉。
另外,做你的第3步),但不要做第4步)。 但你不会得到,如果你做一个REST几何查询你所期望的。
看看你的成绩提高。
格雷斯与和平,
吉姆
PS。
迈克尔,
实际上,有与空间发挥两个相互竞争的办法现在。 如果您使用addNodeToLayer您添加节点层(第4步),该节点直接连接到RTREE图和Cypher支架查询不会找到节点。 如果您使用的是Java也是如此。 您可以通过使用findGeometriesWithinDistance和findGeometriesInBBox REST查询。
如果使用“节点添加到空间索引”的方法,以您的节点添加到一个层(如步骤3),它实际上不是节点添加到层。 一个新的节点由含有几何属性的原始节点和包含原始节点的节点的Neo4j数量的“id”属性上的副本,该副本节点被添加到RTREE曲线图。 在“空间索引”实际上并不包含节点列表。 它是空间扩展代码的接入点。 当你做一个暗号空间查询,空间扩展认定,满足查询,然后取消引用在每个“ID”属性建立原始节点返回目录拷贝节点。
这是缺乏“身份证”属性取消引用导致Cypher支架空间索引的查询,如果你只使用步骤4)添加一个节点到层失败的。 通过添加“身份证”属性,提领成功,你从你的查询结果。
shape文件进口商直接链接节点到RTREE,如果你希望能够做暗号空间索引的查询,你需要跟我描述的“身份证”属性添加到每个节点。 OSM的进口商建立相关的“域”和几何节点,但我不认为它使他们能够基于Cypher支架的查询访问。 如果添加了“身份证”属性的每个几何节点,那么他们将。
我可能已经错过了,但我还没有看到任何人指出,如果你使用“节点添加到空间索引”的方法,你原来的2倍,你有节点的数量,以及几何倍数的数存储在数据库中的属性。 由于没有原始节点和复制节点之间建立关系,有没有办法来访问复制节点的几何特性,所以你不能真正从原来的节点删除几何性质。
其结果是,我觉得它更希望我的节点直接通过Cypher支架空间索引通过增加自我指涉的“ID”属性添加到RTREE图形,使他们可查询(可查询的?)。
至于删除节点,就没有用于从层中除去节点REST SpatialPlugin方法。 如果您使用REST空间索引方法的节点添加到RTREE图,那么剩下的通话
:DELETE /db/data/index/node/geom/{ID}
将删除从RTREE节点,但有一个陷阱。 你必须得到复制节点的节点Neo4j的数量,以便为这个工作! 你不能以任何直接的方式。 如果你能得到复制节点的节点号,它将从RTREE删除它,但复制节点不会被删除。
有点讽刺的是,如果将节点添加到RTREE使用addNodeToLayer和不添加的“身份证”属性,调用删除节点从索引中删除从RTREE节点。 如果添加了自我指涉的“ID”属性,然后从索引中删除节点,该节点将被删除。 因此,每一种方法是有缺陷的。
我使用的Neo4j 2.3,发现第3步)是无用的,但不是第4步),如果你还没有克隆的id属性从暗号查询不工作了(返回任何结果)