将NodeEntity直接添加到Neo4j-Spatial层?

时间:2014-07-01 03:02:46

标签: playframework neo4j neo4j-spatial

我有一个 NodeA ,用 @NodeEntity 注释。它有很多领域,包括:

@Indexed
public Double lat;

@Indexed
public Double lon;

请注意,NodeA已经能够通过 lat lon 字段存储足够的位置信息。我想将NodeA类型的节点添加到空间层中,以便我可以使用 GeoPipeline 运行空间查询。

  1. 如何将NodeA对象直接添加到空间层?目前,我只能将new Coordinate(13.766, 55.566)等点添加到空间图层中。 (如果没有解决方案,我如何将NodeA节点与其对应的Coordinate节点相关联?)
  2. 我是否需要将节点分别添加到空间索引中?
  3. 我正在使用:

    • Java in Play!Framework 2.2.2(可以更新)
    • 嵌入式 Neo4j-Spatial 0.13-neo4j-2.0.1(可更新)

    编辑:当我将类型为NodeA的现有节点连接到RTREE_ROOT时, GeoPipeline 会抱怨缺少NodeA节点的 bbox属性。 (果然,NodeA中没有 bbox 属性,但它存在于Coordinate类型的其他节点中。)

2 个答案:

答案 0 :(得分:1)

我在这里找到了解决方案:
http://www.markhneedham.com/blog/2013/03/10/neo4jcypher-finding-football-stadiums-near-a-city-using-spatial/

我们只需要将节点添加到空间索引中。节点应具有 wkt 属性,该属性包含坐标信息。添加到此索引的所有节点也将自动添加到空间层。

IndexProviderTest.java提供了更新的实现:
https://github.com/mneedham/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/IndexProviderTest.java#L251

@Test
public void testWithinDistanceIndex() {
Map<String, String> config = SpatialIndexProvider.SIMPLE_WKT_CONFIG;
IndexManager indexMan = db.index();
Index<Node> index = indexMan.forNodes("layer2", config);
Transaction tx = db.beginTx();
Node batman = db.createNode();
String wktPoint = "POINT(41.14 37.88 )";
batman.setProperty("wkt", wktPoint);
String batman1 = "batman";
batman.setProperty("name", batman1);
index.add(batman, "dummy", "value");
Map<String, Object> params = new HashMap<String, Object>();
Double[] point = {37.87, 41.13};
params.put(LayerNodeIndex.POINT_PARAMETER,
        point);
params.put(LayerNodeIndex.DISTANCE_IN_KM_PARAMETER, 2.0);
IndexHits<Node> hits = index.query(
        LayerNodeIndex.WITHIN_DISTANCE_QUERY, params);
tx.success();
tx.finish();
Node node = hits.getSingle();
assertTrue(node.getId() == batman.getId());
assertTrue(node.getProperty("name").equals(batman1));
}

答案 1 :(得分:0)

博客使用Neo4j Spatial和Spring Data Neo4j 3.0.1找到梵高的艺术作品

<强> http://inserpio.wordpress.com/2014/04/03/artworks-spatial-search/

完全符合我的要求。 @NodeEntity包含 wkt 属性,并且节点被添加到 SpatialRepository