0

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

因此,我们正在构建需要基于 OSM 行政区域(如国家、县和市)索引旅游信息(仅点)的 Web 应用程序。如何使用 neo4j-spatial 存储和索引此类数据?我熟悉 RDBMS,因此我们能够使用 PostGIS链接到解决方案来创建解决方案

我为每个行政区域创建了图层和索引。

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 旅游点确定行政区域,以便为其创建节点?

4

2 回答 2

0

不确定你是否做对了。

您将通过发布到节点端点来创建具有位置(作为 wkt 或地理坐标)的节点。

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

见最大博客文章: http: //maxdemarzi.com/2014/01/31/neo4j-spatial-part-1/

不幸的是,密码文档错过了这一点,但这是一个测试: 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

于 2014-07-30T08:34:32.567 回答
0

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

这是另一个问题的答案,它向您展示了如何做您想做的事情。

我没有在那个答案中显示它,但是用于创建多边形节点的正确 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 的旅游点进行“withinDistance”密码查询:

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

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

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

恩典与平安,

吉姆

于 2014-08-01T20:53:38.600 回答