2014-06-22 23 views
2

我配置的空間插件的Neo4j具有以下REST API調用:空間暗號查詢不工作

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代碼(嵌入播放應用程序):

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

the Graph displayed in the Neo4j browser

一切看起來很好,

POST http://neo4jurl/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance` 
{ 
    "layer" : "geom", 
    "pointX" : 8.5, 
    "pointY" : 47.3, 
    "distanceInKm" : 10 
} 

回報(從空間索引本身和一些節點? - 這是正常的)某些位置的節點,但

POST http://neo4jurl//db/data/cypher 
{ 
"query" : "start node = node:geom('withinDistance:[8.5,47.3, 10.0]') return node" 
} 

只返回

{ 
    "columns" : [ 
    "node" 
    ], 
    "data" : [] 
} 

有什麼不對?有什麼缺失?

回答

1

您正在將具有索引的圖層混合在一起。密碼查詢只能處理索引。所以不要創建一個圖層。只需創建一個空間索引,並將節點添加到空間索引,然後密碼就會看到它們。

例如參見http://maxdemarzi.com/2014/01/31/neo4j-spatial-part-1/

+0

我開始了一個新的數據庫,並遵循你的指南..現在一切正常!謝謝! –