2014-01-07 2 views
0

Какова причина и как исправить это исключение:Neo4j с пространственным: NotFoundException: Более отношения

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.

Исключение генерируется, когда я пытаюсь импортировать shape-файл (это код в неуправляемом расширении):

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

Файл формы генерируется из CSV файл с ogr2ogr - это, кажется, законна и читаются без исключений. В исходном файле там было около 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 

Как обойти это? Мне нужно загрузить миллионы очков в дБ. Боковой вопрос: теперь я создаю новый графический пространственный хранилище данных - это правильно? Может быть, я должен загрузить его в существующий график db?

UPDATE:

Я попытался ввести координаты "вручную" с помощью методов TestSimplePointLayer. Я получил то же исключение вокруг 450-й координаты. Букет из них такой же, как вы можете видеть в образце, но они действительны. Как обойти это?

ответ

0

Вы пропустите шаг здесь. Вы создаете пространственный индекс, а затем добавляете пользователей в индекс.

Так, например, если у вас был файл формы всех штатов или округов или почтовых индексов в США, вы можете создать пространственный слой с этими фигурами и добавить к ним пользователей.

Вы можете использовать простой точечный слой, если хотите, но они должны быть уникальными, но пользовательские узлы, которые находятся в этих местах, не обязательно должны быть. См. http://java.dzone.com/articles/running-along-graph-using-0 и http://www.markhneedham.com/blog/2013/03/10/neo4jcypher-finding-football-stadiums-near-a-city-using-spatial/ для лучшей идеи.

+0

спасибо, я был в состоянии импортировать данные с помощью объекта ИПП. Никогда не удалось с шейп-файлом, т. – user3167332

0

Я встречаю ту же ошибку, когда пытаюсь добавить узел к тому же lon/lat (0,0) к слою. Когда вставлено более 100 RTREE_CHILD узлов ref, это исключение появляется. Это ошибка исходного кода.

SRC/главная/Java/орг/Neo4j/ГИС/Пространственное/rtree/RTreeIndex.java

попробовать этот раздвоенный плагин:

https://github.com/linkedin-inc/spatial