neo4j国家县城的空间索引

时间:2014-07-30 05:47:16

标签: neo4j neo4j-spatial

我刚开始使用neo4j-spatial并且对空间几何的基础知识有很好的理解 - 多边形,点,线。

因此,我们正在构建基于OSM行政区域(如国家,县和城市)索引旅游信息(仅限点)的Web应用程序。如何使用neo4j-spatial存储和索引此类数据?我熟悉RDBMS,因此我们能够使用PostGIS link to solution

创建解决方案

我为每个管理区域创建了图层和索引。

POST http://localhost:7474/db/data/index/node {"name":"india", "config": {"provider":"spatial", "wkt":"wkt"}}

创建多边形节点

POST http://localhost:7474/db/data/index/node { layer : "india", name:"Hyderabad", wkt : "POLYGON((11.0 11.0, 11.0 12.0, 12.0 12.0, 12.0 11.0, 11.0 11.0))" }

另外,如何根据给定的GPS旅游点确定行政区域,以便为其创建节点?

2 个答案:

答案 0 :(得分:0)

不确定你是否做了正确的事。

您可以通过发布到节点端点来创建具有位置(作为wkt或geo-coords)的节点。

然后将该节点添加到空间索引中。

参见max blog帖子: http://maxdemarzi.com/2014/01/31/neo4j-spatial-part-1/

不幸的是,cypher docs错过了这一点,但这是一个测试: https://github.com/neo4j-contrib/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/SpatialPluginFunctionalTest.java#L407

http://neo4j-contrib.github.io/spatial/#rest-api-add-a-node-to-the-spatial-index

答案 1 :(得分:0)

在我看来,你可能想要一种组合方法来解决这个问题。您的帖子没有提供太多信息,但您的第二个REST调用未正确形成。

这是一个answer to another question,向您展示如何做您想做的事。

我没有在那个答案中显示它,但是用于创建多边形节点的正确REST语法是:

POST http://localhost:7474/db/data/node {"name":"Hyderabad", "wkt":"POLYGON((11.0 11.0, 11.0 12.0, 12.0 12.0, 12.0 11.0, 11.0 11.0))"}

或者,如果您希望为节点提供一个或多个标签:

POST http://localhost:7474/db/data/transaction/commit {"statements":[{"statement":"CREATE (n:City {name : 'Hyderabad', wkt : 'POLYGON((11.0 11.0, 11.0 12.0, 12.0 12.0, 12.0 11.0, 11.0 11.0))') RETURN id(n)" }]}

我倾向于在你的城市,县,省和国家之间建立标准的Neo4j关系(这个例子假设两个节点都存在):

MATCH (n:City {name : 'Hyderabad'}), (m:Country {name :'India'}) CREATE (n)-[:IS_IN]->(m);

然后我将所有的城市,县等放入一个空间索引(例如'印度'索引)。然后,如果您使用距离为零且返回限制为1的旅游点进行“内部距离”Cypher查询:

START n = node:India('withinDistance:[11.5,11.5,0.0]') RETURN n LIMIT 1

您将获得包含最小实体的节点。然后,您可以按照关系访问父实体。

还有一件事。有各种批量加载Java应用程序,以及LOAD CSV Cypher命令。如果你还没有,你应该检查一下。

恩典与和平,

吉姆