Запросы пространственных шифров не работают
Я настроил пространственный плагин для Neo4j со следующими вызовами API REST:
POST http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addSimplePointLayer
{
"layer" : "geom",
"lat" : "lat",
"lon" : "lon"
}
POST http://localhost:7474/db/data/index/node/
{
"name" : "geom",
"config" : {
"provider" : "spatial",
"geometry_type" : "point",
"lat" : "lat",
"lon" : "lon"
}
}
Я добавляю пространственные узлы со следующим кодом Scala (встроенным в приложение Play):
val mergeStatement = Cypher(
"""
MERGE (location: Location {placesID: {id}, name: {name}, lat: {lat}, lon: {lon}})
RETURN id(location)
"""
).on("id" -> id, "name" -> name, "reference" -> reference, "lat" -> latitude, "lon" -> longitude)
val nodeID = mergeStatement().head[Long]("id(location)")
val bodyA = JsObject(Seq(("value",JsString("dummy")),("key",JsString("dummy")),("uri", JsString(Neo4jREST.baseURL + "node/" + nodeID.toString))))
WS.url(Neo4jREST.baseURL + "index/node/geom").withHeaders("Accept" -> "application.json").post(bodyA) map { response =>
val bodyB = JsObject(Seq(("layer",JsString("geom")),("node", JsString(Neo4jREST.baseURL + "node/" + nodeID.toString))))
WS.url(Neo4jREST.baseURL + "ext/SpatialPlugin/graphdb/addNodeToLayer").withHeaders("Accept" -> "application.json").post(bodyB)
}
Все выглядит хорошо и
POST http://neo4jurl/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance`
{
"layer" : "geom",
"pointX" : 8.5,
"pointY" : 47.3,
"distanceInKm" : 10
}
возвращает некоторые узлы Location (и некоторые узлы из самого пространственного индекса - это нормально?), но
POST http://neo4jurl//db/data/cypher
{
"query" : "start node = node:geom('withinDistance:[8.5,47.3, 10.0]') return node"
}
только возвращается
{
"columns" : [
"node"
],
"data" : []
}
Что случилось? Чего-то не хватает?
1 ответ
Решение
Вы смешиваете слои с индексами. Запрос на шифрование работает только с индексами. Так что даже не создавайте слой. Просто создайте пространственный индекс и добавьте узлы к пространственному индексу, и Cypher увидит их.
См. Например, http://maxdemarzi.com/2014/01/31/neo4j-spatial-part-1/.