再会,
我想在更大的范围内构建几何图形。为此,我将几何数据从各种来源(也是 shp 文件)导入使用 spring-data-neo4j 的嵌入式 Neo4j 数据库。到现在为止还挺好。
我被困在哪里:在我的域中,我定义了一个Building
具有形状的实体Polygon wkt;
是否可以通过创建具有Polygon
属性的节点CRUDRepository
?
有了Point
它就可以了:例如
@NodeEntity
public class Building implements Serializable{
@GraphId
private Long id;
@Indexed(indexType = IndexType.POINT, indexName = "building_wkt_index", unique = false)
private Point wkt;
}
public interface BuildingRepository extends GraphRepository<Building>, SpatialRepository<Building>{
/**
* CRUD
*/
}
Building b = new Building();
b.setWkt(new Point(12,12));
buildingService.save(b);
问题是没有为Lines
和实现 IndexTypes Polygons
。这是我第一个使用 spring-data 和 neo4j 的项目,所以我不确定我应该采取哪个方向。查看 neo4j 空间文档显示使用 wkt 应该可以存储Polygon
s(参见http://neo4j-contrib.github.io/spatial/#spatial-server-plugin)
https://stackoverflow.com/a/26567534还建议通过 REST 创建空间索引。另一个建议是:https ://stackoverflow.com/a/24741823 。
我尝试像这样手动创建空间索引:
Transaction tx = template.getGraphDatabaseService().beginTx();
template.getGraphDatabaseService().index().forNodes("building_wkt_index", MapUtil.stringMap(
IndexManager.PROVIDER, "spatial", "geometry_type", "polygon", "wkt", "wkt"));
tx.success();
并调用存储库的 save()。但是,这似乎不起作用。wkt 没有被存储,它是空的。
是否有可能以Building
某种方式使用这个命名索引(甚至可能) - 或者将所有事务移动到 neo4j 空间插件的 REST 上真的是唯一的方法。
例如,是否可以实施一个新的IndexType
? 非常感谢所有输入!