2

neo4j 3.0.2 と neo4j-spatial for 3.0.2 で空間データベースを作成しようとしています。プラグインをインストールし、プラグインがcurl -v http://neo4j:neo4j@localhost:7474/db/data/以下を出力する cURL で実行されていることを確認しました。

{
  "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. 

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

編集 15.06.2016

奇妙なのは、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 コンソールで) クエリを実行できますか?

どんな助けでも大歓迎です!乾杯

4

1 に答える 1

1

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

参照: https://github.com/neo4j-contrib/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/procedures/SpatialProceduresTest.java#L113

これは新しいメジャー リリース (3.0 用) であるため、インデックス プロバイダーを削除することが適切であることがわかりました。

于 2016-06-15T14:19:44.567 に答える