2016-06-15 5 views
2

neo4j 3.0.2およびneo4j-spatial for 3.0.2で空間データベースを作成しようとしています。私は、プラグインをインストールしていると私は、プラグインは、以下の出力するcURLのcurl -v http://neo4j:[email protected]:7474/db/data/で実行されていることを確認していますNeo4j Spatial 3.0.2:インデックスプロバイダ 'spatial'が見つかりません

{ 
    "extensions" : { 
    "SpatialPlugin" : { 
     "addSimplePointLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addSimplePointLayer", 
     "addNodesToLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addNodesToLayer", 
     "findClosestGeometries" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findClosestGeometries", 
     "addGeometryWKTToLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addGeometryWKTToLayer", 
     "findGeometriesWithinDistance" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance", 
     "addEditableLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addEditableLayer", 
     "addCQLDynamicLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addCQLDynamicLayer", 
     "addNodeToLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer", 
     "getLayer" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/getLayer", 
     "findGeometriesInBBox" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesInBBox", 
     "updateGeometryFromWKT" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/updateGeometryFromWKT", 
     "findGeometriesIntersectingBBox" : "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesIntersectingBBox" 
    } 
    }, 
    "node" : "http://localhost:7474/db/data/node", 
    "relationship" : "http://localhost:7474/db/data/relationship", 
    "node_index" : "http://localhost:7474/db/data/index/node", 
    "relationship_index" : "http://localhost:7474/db/data/index/relationship", 
    "extensions_info" : "http://localhost:7474/db/data/ext", 
    "relationship_types" : "http://localhost:7474/db/data/relationship/types", 
    "batch" : "http://localhost:7474/db/data/batch", 
    "cypher" : "http://localhost:7474/db/data/cypher", 
    "indexes" : "http://localhost:7474/db/data/schema/index", 
    "constraints" : "http://localhost:7474/db/data/schema/constraint", 
    "transaction" : "http://localhost:7474/db/data/transaction", 
    "node_labels" : "http://localhost:7474/db/data/labels", 
    "neo4j_version" : "3.0.2" 
* Connection #0 to host localhost left intact 
}* Closing connection #0 

今、私は新しいsimplePointLayerを作成することができます。

// define entity manager 
$client = $this->get('neo4j.spatial_manager')->getClient(); 



// 1. Create a pointlayer 
$request = $client->request('POST', 
    '/db/data/ext/SpatialPlugin/graphdb/addSimplePointLayer', 
    [ 
     'json' => [ 
      'layer' => 'geom', 
      'lat' => 'lat', 
      'lon' => 'lon', 
     ], 
    ] 
); 

var_dump($request); 

これは、との空間的なルートノードを作成しますrTreeしかし、私は今、次のように空間インデックスを作成する場合:

// 2. Create a spatial index 
$request = $client->request('POST', 
    '/db/data/index/node/', 
    [ 
     'json' => [ 
      'name' => 'geom', 
      'config' => [ 
       'provider' => 'spatial', 
       'geometry_type' => 'point', 
       'lat' => 'lat', 
       'lon' => 'lon', 
      ], 
     ], 
    ] 
); 

var_dump($request); 

私は、エラーメッセージに直面しています:私は間違って何をやっている

"message" : "No index provider 'spatial' found. 

?私は多くのフォーラムなどをチェックしましたが、答えは常に私が持っている空間プラグインをインストールするように思われ、それは最初の出力に従って動作しているようです。

EDIT 2016年6月15日

いただきました奇妙な私はRTREEにノードを追加できることです。

// Create a node with spatial data 
    $json = [ 
     'team' => 'REDBLUE', 
     'name' => 'TEST', 
     'lat' => 25.121075, 
     'lon' => 89.990630, 
    ]; 
    $response = $client->request('POST', 
     '/db/data/node', 
     [ 
      'json' => $json 
     ] 
    ); 

    $node = json_decode($response->getBody(), true)['self']; 

    // Add the node to the layer 
    $response = $client->request('POST', 
     '/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer', 
     [ 
      'json' => [ 
       'layer' => 'geom', 
       'node' => $node, 
      ], 
     ] 
    ); 

    $data = json_decode($response->getBody(), true); 

    var_dump($data); 

そして私は、REST経由ノードを照会することができます

$request = $client->request('POST', 
     '/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance', 
     [ 
      'json' => [ 
       'layer' => 'geom', 
       'pointX' => 89.99506, 
       'pointY' => 25.121260, 
       'distanceInKm' => 10, 
      ], 
     ] 
    ); 

$data = json_decode($request->getBody(), true); 

var_dump($data); 

しかし、なぜ私はインデックスを作成させないのですか?または、自動的にインデックスを作成しますか?もしそうなら、CYPHER(Webコンソールなど)を使ってどのようにクエリを実行できますか?

助けていただけたら幸いです!歓声

答えて

1

Spatialのユーザー定義プロシージャのために、インデックスプロバイダが削除されました(これまではCypherとの統合を提供する唯一の手段でした)。

は、以下を参照してください。このようhttps://github.com/neo4j-contrib/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/procedures/SpatialProceduresTest.java#L113

は(3.0用)の新しいメジャーリリースである我々はそれが賢明なインデックス・プロバイダーを削除することが判明しました。

+1

この重要な情報をお寄せいただきありがとうございます。だから私はCypherで空間クエリをどのように正確に行うのですか?私が 'CALL spatial.withinDistance( 'geom'、{pointX:89.99506、pointY:25.121260}、100)を試してみたら' 'spatial.withinDistance'プロシージャーの呼び出しに失敗しました:原因:java.lang.NoClassDefFoundError :org/neo4j/cypher/internal/compiler/v3_0/commands/expressions/GeographicPoint' – Joran

+1

デフォルトを使用してコールコマンドですべてを作成するときにも同じエラーが発生します: 'CALL spatial.addPointLayer( 'geom')'指定された文字列との一致(t:{t:Tile {name: ''test'、latitude:47.99、経度:7.886})' (*) ' 'CALL spatial.withinDistance( 'geom'、{latitude:47.60、経度:7.7}、100)'を使ってクエリすると、同じエラーが表示されます。 – Joran

関連する問題