我正在通过 Neo4J 开发 Grails 应用程序,我还想将其导出为 GIS 数据库。
查看如何在 GeoServer/uDig 中使用 neo4j 的示例,似乎空间集成仅通过嵌入式 neo4j 数据库。
有谁知道是否可以进行设置,以便我的 Neo4J 可以通过 REST 使用,以便我可以从不同的地方连接它?
乍一看,它似乎应该是可能的:
// Works with this embedded database
//def graphDb = new GraphDatabaseFactory().newEmbeddedDatabase("/tmp/foo.db");
// Doesn't work with this REST database
graphDb = new RestGraphDatabase("http://localhost:7474/db/data");
Transaction tx = graphDb.beginTx()
SpatialDatabaseService spatialService = new SpatialDatabaseService(graphDb)
SimplePointLayer layer = spatialService.createSimplePointLayer("points")
使用嵌入式数据库,可以很好地创建空间索引。但是,使用 REST 数据库,我只得到一个空指针:
Caused by NullPointerException: null
->> 149 | createCompiler in org.neo4j.cypher.ExecutionEngine
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 48 | <init> in ''
| 59 | createInnerEngine in org.neo4j.cypher.javacompat.ExecutionEngine
| 43 | <init> in ''
| 41 | getReferenceNode in org.neo4j.gis.spatial.utilities.ReferenceNodes
| 78 | getSpatialRoot in org.neo4j.gis.spatial.SpatialDatabaseService
| 114 | getLayer in ''
| 259 | containsLayer in ''
| 303 | createLayer in ''
| 287 | createSimplePointLayer in ''
| 267 | createSimplePointLayer in ''
| 37 | <init> in net.foo.db.neo4j.Neo4JService
SpatialDatabaseService 需要一个 GraphDatabaseService,所以我很困惑为什么它不能与 REST 一起使用。
这是错误还是功能(或我的误解?)
当然,我可以使用create index
API 创建空间索引:
graphDb.index().forNodes( "points", ["provider": "spatial", "geometry_type": "point", "lat": "lat", "lon":"lon"])
这样就可以了,但是我不能那样创建新图层。