Neo4j空间服务器插件在withinDistance和最近的java.lang.NoClassDefFoundError

时间:2016-06-09 22:38:03

标签: graph neo4j cypher graph-databases

我知道插件正在正确加载,因为其他方法可以工作,例如spatial.procedures和spatial.addNode等。

在这样的调用之后出现错误:

CALL spatial.withinDistance('profile_geo', [43.524, 96.7341], 500)

并且产生的错误是:

Failed to invoke procedure `spatial.withinDistance`: Caused by: java.lang.NoClassDefFoundError: org/neo4j/cypher/internal/compiler/v3_0/commands/expressions/GeographicPoint

尝试使用最近的功能时也会出现相同的错误。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:0)

看起来你缺少GeographicalPoint类所需的Jar。 请确保您的Jars中有此课程。我知道这个类存在于 neo4j-cypher-compiler-3.0-3.0.3.jar 中,但它不适合你,因为它驻留在不同的命名空间中。如果您无法在您的环境中查明相应的Jar,请查看Maven存储库并尝试在那里找到它。

答案 1 :(得分:0)

简短回答:升级到3.0.3(neo4j和插件)

答案很长:

我今天遇到了完全相同的问题。我使用服务器插件版本3.0.2运行版本3.0.2并运行cypher查询:

 CALL spatial.withinDistance("spatial_records",{lon:20.0,lat:50.0},100000000)

Joran在上面的评论中提到REST API是一种可行的替代方案。所以我试了一下,发现他确实是对的。

我使用httpie测试了这个,使用以下命令:

cat tmp.json | http :7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance

tmp.json的样子如下:

{"layer" : "spatial_records","pointX" :3.9706,"pointY" : 46.7907,"distanceInKm" :10000000000}

虽然这有效,但使用CYPHER和存储过程会很好。因此,经过进一步调查,我注意到最近的commit包含以下更改:

-        <neo4j.version>3.0.1</neo4j.version>
+        <neo4j.version>3.0.3</neo4j.version>

...

-import org.neo4j.cypher.internal.compiler.v3_0.commands.expressions.GeographicPoint;
+import org.neo4j.cypher.internal.compiler.v3_0.GeographicPoint;

所以我最终下载了neo4j和空间插件的3.0.3版本。无论以前出现什么问题,似乎都在此版本中修复。现在,对存储过程的调用按预期工作!