Playframework 将节点直接添加到Neo4j空间层?

Playframework 将节点直接添加到Neo4j空间层?,playframework,neo4j,neo4j-spatial,Playframework,Neo4j,Neo4j Spatial,我有一个类NodeA,用@NodeEntity注释。它有许多领域,包括: @Indexed public Double lat; @Indexed public Double lon; 注意,NodeA已经能够通过lat和lon字段存储足够的位置信息。我想将NodeA类型的节点添加到空间层中,以便可以使用GeoPipeline运行空间查询 如何将节点a对象直接添加到空间层中?目前,我只能在空间层中添加点,例如新坐标(13.766,55.566)。(如果没有解决方案,如何将节点a节点与其对应的

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

@Indexed
public Double lat;

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

  • 如何将节点a对象直接添加到空间层中?目前,我只能在空间层中添加点,例如
    新坐标(13.766,55.566)
    。(如果没有解决方案,如何将节点a节点与其对应的坐标节点关联?)
  • 是否需要将节点单独添加到空间索引中 我正在使用:

    • 玩Java!框架2.2.2(可更新)
    • 嵌入式Neo4j空间0.13-Neo4j-2.0.1(可更新)

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

    我在这里找到了解决方案:

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

    java提供了一个更新的实现:

    @测试
    使用不确定索引()的公共无效测试{
    Map config=SpatialIndexProvider.SIMPLE\u WKT\u config;
    IndexManager indexMan=db.index();
    Index=indexMan.forNodes(“layer2”,配置);
    事务tx=db.beginTx();
    Node batman=db.createNode();
    字符串wktPoint=“点(41.14 37.88)”;
    蝙蝠侠集属性(“wkt”,wktPoint);
    字符串蝙蝠侠1=“蝙蝠侠”;
    蝙蝠侠.setProperty(“名称”,蝙蝠侠1);
    增加(蝙蝠侠,虚拟,价值);
    Map params=新的HashMap();
    双[]点={37.87,41.13};
    参数put(LayerNodeIndex.POINT_参数,
    点);
    参数put(LayerNodeIndex.DISTANCE_IN_KM_参数,2.0);
    IndexHits hits=index.query(
    LayerNodeIndex.in_距离_查询,参数);
    成功();
    tx.finish();
    Node=hits.getSingle();
    assertTrue(node.getId()==batman.getId());
    assertTrue(node.getProperty(“name”).equals(batman1));
    }
    
    您可以在博客旁找到梵高的艺术作品,其中包含Neo4j空间和弹簧数据Neo4j 3.0.1

    这正是我想要的。 @NodeEntity包含wkt属性,节点被添加到空间存储库中

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