Playframework 将节点直接添加到Neo4j空间层?
我有一个类NodeA,用@NodeEntity注释。它有许多领域,包括: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节点与其对应的
@Indexed
public Double lat;
@Indexed
public Double lon;
注意,NodeA已经能够通过lat和lon字段存储足够的位置信息。我想将NodeA类型的节点添加到空间层中,以便可以使用GeoPipeline运行空间查询
新坐标(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));
}