この例外の原因と修正方法は次のとおりです。
org.neo4j.graphdb.NotFoundException: More than one relationship[RTREE_CHILD, INCOMING] found for NodeImpl#105
at org.neo4j.kernel.impl.core.NodeImpl.getSingleRelationship(NodeImpl.java:344)
at org.neo4j.kernel.impl.core.NodeProxy.getSingleRelationship(NodeProxy.java:191)
at org.neo4j.collections.rtree.RTreeIndex.getIndexNodeParent(RTreeIndex.java:768)
at org.neo4j.collections.rtree.RTreeIndex.adjustPathBoundingBox(RTreeIndex.java:672)
at org.neo4j.collections.rtree.RTreeIndex.add(RTreeIndex.java:90)
at org.neo4j.gis.spatial.EditableLayerImpl.add(EditableLayerImpl.java:44)
at org.neo4j.gis.spatial.ShapefileImporter.importFile(ShapefileImporter.java:209)
at org.neo4j.gis.spatial.ShapefileImporter.importFile(ShapefileImporter.java:122)
私は 2.0.0 と、コンパイルされた github プロジェクトからの空間 jar を使用しています。
Shapefile をインポートしようとすると例外がスローされます (これはアンマネージ拡張のコードです)。
GraphDatabaseService spatialDb = new GraphDatabaseFactory().newEmbeddedDatabase("/home/db/data/spatial.db");
Transaction tx = spatialDb.beginTx();
try {
ShapefileImporter importer = new ShapefileImporter(spatialDb, new NullListener());
importer.importFile("/home/bla/realshp/users_location.shp", "users_location");
tx.success();
} catch (Exception e) {
e.printStackTrace();
} finally {
tx.close();
return Response.status(200).entity("Done. ").build();
}
シェープ ファイルは、ogr2ogr を使用して CSV ファイルから生成されます。正当なようで、例外なく読み取られます。元のファイルには、次のように定義された約 30000 のポイントがありました (ogr2ogr は経度と緯度を取得します)。
id,longitude,latitude,gender,updated
3,-122.1171925,37.4343361,1,2013-11-20 05:03:22
304,-122.0919000,37.3094000,1,2013-11-03 00:42:01
311,-122.0919000,37.3094000,1,2013-11-03 00:42:01
それを回避する方法は?何百万ものポイントをデータベースにロードする必要があります。副次的な質問: 新しいグラフ空間データストアを作成しましたが、これは正しいですか? たぶん、既存のグラフデータベースにロードする必要がありますか?
アップデート:
TestSimplePointLayer のメソッドを使用して、「手動で」座標を入力しようとしました。450番目の座標で同じ例外が発生しました。それらの束は、サンプルでわかるように同じですが、有効なポイントです。それを回避する方法は?