0
votes

I am following the tutorial at http://neo4j.github.io/spatial/#rest-api-add-a-node-to-the-spatial-index to test Spatial 0.12 with Neo4j 2.0M03. I am trying SimplePointLayer example, to get the nodes within a radius.

Although it looks like everything is created (layer, index etc..) as expected and my domain nodes are indexed properly, my Cypher query or my java spatial query code do not return any result.

When I try the exact same thing with Neo4j 1.9 and Spatial 0.11, it works just fine.

Before digging this issue any further I wanted to ask Neo4j community first if this is a known issue or not. Thanks in advance.

-- Testing steps based on Peter's comment --

geo_layer.json:

{
    "layer" : "geom",
    "lat" : "lat",
    "lon" : "lon"
}

curl -H "Content-Type: application/json" -X POST -d @geo_layer.json http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addSimplePointLayer

geo_index.json:

{
    "name" : "geom",
    "config" : {
            "provider" : "spatial",
            "geometry_type" : "point",
            "lat" : "lat",
            "lon":"lon"
            }
}

curl -H "Content-Type: application/json" -X POST -d @geo_index.json http://localhost:7474/db/data/index/node

geo_node.json:

{
    "lat" : 60.1,
    "lon" : 15.2
}

curl -H "Content-Type: application/json" -X POST -d @geo_node.json http://localhost:7474/db/data/node

New node's id is 5 - I started with an empty graph.

domain_node.json:

{
    "value": "dummy",
    "key": "dummy",
    "uri": "http://localhost:7474/db/data/node/5"
}

curl -H "Content-Type: application/json" -X POST -d @domain_node.json http://localhost:7474/db/data/index/node/geom

cypher_query.json:

{
    "query": "start node = node:geom('withinDistance:[60.0,15.0, 100.0]') return node;"
}

curl -H "Content-Type: application/json" -X POST -d @cypher_query.json http://localhost:7474/db/data/cypher

The result:

{
  "message" : "org.neo4j.gis.spatial.indexprovider.GeoPipeFlowHits.iterator()Lorg/neo4j/graphdb/ResourceIterator;",
  "exception" : "AbstractMethodError",
  "fullname" : "java.lang.AbstractMethodError",
  "stacktrace" : [ "org.neo4j.cypher.internal.spi.gdsimpl.TransactionBoundQueryContext$NodeOperations.indexQuery(TransactionBoundQueryContext.scala:120)", "org.neo4j.cypher.internal.spi.DelegatingOperations.indexQuery(DelegatingQueryContext.scala:107)", "org.neo4j.cypher.internal.executionplan.builders.EntityProducerFactory$$anonfun$2$$anonfun$applyOrElse$2.apply(EntityProducerFactory.scala:70)", "org.neo4j.cypher.internal.executionplan.builders.EntityProducerFactory$$anonfun$2$$anonfun$applyOrElse$2.apply(EntityProducerFactory.scala:68)", "org.neo4j.cypher.internal.executionplan.builders.EntityProducerFactory$$anon$1.apply(EntityProducerFactory.scala:38)", "org.neo4j.cypher.internal.executionplan.builders.EntityProducerFactory$$anon$1.apply(EntityProducerFactory.scala:37)", "org.neo4j.cypher.internal.pipes.StartPipe$$anonfun$internalCreateResults$1.apply(StartPipe.scala:34)", "org.neo4j.cypher.internal.pipes.StartPipe$$anonfun$internalCreateResults$1.apply(StartPipe.scala:33)", "scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)", "org.neo4j.cypher.internal.ClosingIterator$$anonfun$hasNext$1.apply$mcZ$sp(ClosingIterator.scala:36)", "org.neo4j.cypher.internal.ClosingIterator$$anonfun$hasNext$1.apply(ClosingIterator.scala:35)", "org.neo4j.cypher.internal.ClosingIterator$$anonfun$hasNext$1.apply(ClosingIterator.scala:35)", "org.neo4j.cypher.internal.ClosingIterator.failIfThrows(ClosingIterator.scala:84)", "org.neo4j.cypher.internal.ClosingIterator.hasNext(ClosingIterator.scala:35)", "org.neo4j.cypher.PipeExecutionResult.hasNext(PipeExecutionResult.scala:157)", "scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)", "scala.collection.convert.Wrappers$IteratorWrapper.hasNext(Wrappers.scala:29)", "org.neo4j.cypher.PipeExecutionResult$$anon$1.hasNext(PipeExecutionResult.scala:73)", "org.neo4j.helpers.collection.ExceptionHandlingIterable$1.hasNext(ExceptionHandlingIterable.java:58)", "org.neo4j.helpers.collection.IteratorWrapper.hasNext(IteratorWrapper.java:42)", "org.neo4j.server.rest.repr.ListRepresentation.serialize(ListRepresentation.java:58)", "org.neo4j.server.rest.repr.Serializer.serialize(Serializer.java:75)", "org.neo4j.server.rest.repr.MappingSerializer.putList(MappingSerializer.java:61)", "org.neo4j.server.rest.repr.CypherResultRepresentation.serialize(CypherResultRepresentation.java:83)", "org.neo4j.server.rest.repr.MappingRepresentation.serialize(MappingRepresentation.java:42)", "org.neo4j.server.rest.repr.OutputFormat.assemble(OutputFormat.java:185)", "org.neo4j.server.rest.repr.OutputFormat.formatRepresentation(OutputFormat.java:133)", "org.neo4j.server.rest.repr.OutputFormat.response(OutputFormat.java:119)", "org.neo4j.server.rest.repr.OutputFormat.ok(OutputFormat.java:57)", "org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:96)", "java.lang.reflect.Method.invoke(Method.java:601)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)" ]

-- Alternatively --

location.json:

{
    "layer" : "geom",
    "node" : "http://localhost:7474/db/data/node/5"
}

curl -H "Content-Type: application/json" -X POST -d @location.json http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer

geo_query.json:

{
    "layer" : "geom",
    "distanceInKm" : "100",
    "pointX" : "15",
    "pointY" : "60"
}

curl -H "Content-Type: application/json" -X POST -d @geo_query.json http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance

returns empty result set.

1

1 Answers

0
votes

Make sure you are adding the node to the index prior to querying it via Cypher, as that creates the necessary structurs in the DB, see https://github.com/neo4j/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/SpatialPluginFunctionalTest.java#L268