2015-02-20 3 views
1

Мы используем Spring Data Neo4j 3.2.0 и Neo4j-пространственной 0,13 Neo4j-2.1.6 в Grails проекта 2.4.3WithinDistance в пространственной индексации не Neo4j дать соответствующий результат

В UserDomain

@Indexed(indexType = IndexType.POINT, indexName = "junctionLocations") 
    Point wkt 

В UserRepository

@Transactional 
     Result<UserDomain> findWithinDistance(final String indexName, Circle circle) 

@Query("START item=node:junctionLocations({0}) RETURN labels(item) as label ,item") 
     List match(String a) 

Так что, когда мы бежим

Iterable<UserDomain> teamMembers1 = userDomainRepository.findWithinDistance 
("junctionLocations", new 
       Circle(new Point(28.6100,77.2300),new Distance(2, Metrics.KILOMETERS))); 

Затем дать точные данные , но когда мы бежим

Iterable<UserDomain> teamMembers = userDomainRepository.match("withinDistance:[28.6100,77.2300,2.0]") 

, то это не дает каких-либо данных, но если увеличить расстояние до 10000, то это дает данные.

На самом деле мы хотим получить правильные данные, используя Cypher Query. Мы что-то упускаем? Есть ли способ получить правильные данные с помощью Cypher?

+1

Может быть, расстояние по умолчанию составляет метров. Или вам нужно перевернуть lat/lon. Не уверен. –

+0

Если расстояние в метр, то, как следует эту работу Iterable teamMembers1 = userDomainRepository.findWithinDistance ("junctionLocations", новый круг (новый пункт (28.6100,77.2300), новый Distance (2, Metrics.KILOMETERS))); , Я не думаю, что проблема связана с метром или километром – abhaygarg12493

+0

Это работает, проблема в том, что я переворачиваю lat/lon ... Моя ошибка – abhaygarg12493

ответ

0

Я думаю, что есть некоторые проблемы в документации пространственной Repository

@Transactional 
Result<T> findWithinDistance(final String indexName, final double lat, double lon, double distanceKm); 

. В базе данных мы имеем corrdinates Дели и Гургаон

Дели Широта: 28,38 Долгота: 77,12

Gurgaon Широта: 30,30 Долгота: 74,60

Так что с моей точки зрения, если я поиск

findWithinDistance("junctionLocations", 28.6100,77.2300, 35.5); 

т.е. 28.6100 широчайшие и 77.23 долго и 35,5 Расстояния в км

это не дает каким-либо данным

Но если поменять латы, положение долготы затем запросу дать соответствующему результату

findWithinDistance("junctionLocations",77.2300, 28.6100, 35.5); 

Так что, если я правильно, то в Spatial Repository правильный путь

@Transactional 
Result<T> findWithinDistance(final String indexName, final double lon, double lat, double distanceKm); 
Смежные вопросы