neo4j 3.0.2 및 3.0.2 용 neo4j-spatial을 사용하여 공간 데이터베이스를 만들려고합니다. 나는 플러그인을 설치하고 난 플러그인이 다음에 출력하는 컬 curl -v http://neo4j:[email protected]:7474/db/data/
으로 실행되고 있는지 확인했다 :Neo4j Spatial 3.0.2 : 'spatial'인덱스가 없습니다.
// 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);
이와 공간 루트 노드를 작성합니다
{
"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를 만들 수 있습니다 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.
? 많은 포럼 등을 점검했지만 답은 항상 공간 플러그인을 설치하는 것으로 보입니다. 공간 플러그인은 첫 번째 출력에 따라 작동하는 것으로 보입니다.
// 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);
그러나
편집 2016년 6월 15일는
무슨 이상한 것은 내가 RTREE에 노드를 추가 할 수 있다는 것입니다 왜 내가 색인을 만들지 못하게하는거야? 또는 자동으로 인덱싱을 수행합니까? 그렇다면 CYPHER (예 : 웹 콘솔)를 사용하여 어떻게 쿼리 할 수 있습니까?
도움이 될 것입니다. 건배
중요한 정보를 제공해 주셔서 감사합니다. 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
기본값을 사용하여 호출 명령으로 모든 것을 생성 할 때도 같은 오류가 발생합니다 :'CALL spatial.addPointLayer ('geom')' T.와 함께 match (t : {Tile {name : 'test', 위도 : 47.99, 경도 : 7.886})'및 마지막으로 :'match (t : Tile) spatial.addNode ('geom', t) YIELD 노드 반환 횟수 (*)'. 'CALL spatial.withinDistance ('geom', {위도 : 47.60, 경도 : 7.7}, 100) '을 사용하여 쿼리하면 동일한 오류가 나타납니다. – Joran