Search code examples
neo4jcypherneo4j-spatial

Neo4J Spatial within distance returns only exact matches


Added data to the neo4j using the below script. The data gets added successfully but there is problem with the querying. The query works only if i give the exact lat and long of a node in the database. Any other coords results in an empty set.

import csv
import requests
import json

headers = {'content-type': 'application/json'}

# Create geom index
url = "http://localhost:7474/db/data/index/node/"
payload= {
  "name" : "geom",
  "config" : {
    "provider" : "spatial",
    "geometry_type" : "point",
    "lat" : "lat",
    "lon" : "lon"
  }
}

r = requests.post(url, data=json.dumps(payload), headers=headers, auth=('neo4j', 'thanks123'))

with open('/home/haripriya/workspace/ContentMatching/src/main/resources/coords.csv', 'rb') as f:   # read data file
    reader = csv.reader(f, delimiter='\t')
    for row in reader:
    # create airport node
    url = "http://localhost:7474/db/data/node"
    payload = {'name': row[0], 'street': row[1], 'city': row[2], 'state': row[3], 'pin': row[4], 'lon': float(row[5]), 'lat': float(row[6])}
    r = requests.post(url, data=json.dumps(payload), headers=headers, auth=('neo4j', 'thanks123'))
    node = r.json()['self']

    #add node to geom index
    url = "http://localhost:7474/db/data/index/node/geom"
    payload = {'value': 'dummy', 'key': 'dummy', 'uri': node}
    r = requests.post(url, data=json.dumps(payload), headers=headers, auth=('neo4j', 'thanks123'))

    #add node to Spatial index
    url = "http://localhost:7474/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer"
    payload = {'layer': 'geom', 'node': node}
    r = requests.post(url, data=json.dumps(payload), headers=headers, auth=('neo4j', 'thanks123'))

example nodes: A 29.6490287781 -98.4621124268 B 30.2107849121 -95.7507781982

START n=node:geom('withinDistance:[29.6490287781, -98.4621124268, 50.0]') RETURN n returns node A but

START n=node:geom('withinDistance:[29.6490287780, -98.4621124260, 50.0]') RETURN n returns empty set


Solution

  • Found a similar question already posted on stackoverflow. The answer had helped. Please find the link below:

    Neo4j Spatial return only one node

    Thanks!