2

次の REST API 呼び出しを使用して、Neo4j の空間プラグインを構成しました。

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)
}

Neo4j ブラウザに表示されるグラフ

すべてがうまく見え、

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" : []
} 

なにが問題ですか?何か不足していますか?

4

1 に答える 1

1

レイヤーとインデックスを混同しています。サイファー クエリは、インデックスからのみ機能します。したがって、レイヤーも作成しないでください。空間インデックスを作成し、空間インデックスにノードを追加するだけで、cypher がそれらを認識します。

たとえば、http://maxdemarzi.com/2014/01/31/neo4j-spatial-part-1/を参照してください。

于 2014-06-22T16:30:16.930 に答える