我们在Grails Project 2.4.3中使用 Spring Data Neo4j 3.2.0 和 Neo4j-spatial 0.13-neo4j-2.1.6
在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得到正确的数据?
答案 0 :(得分:0)
我认为空间存储库的文档存在一些问题
@Transactional
Result<T> findWithinDistance(final String indexName, final double lat, double lon, double distanceKm);
。在数据库中,我们有德里和古尔冈的corrdinates
德里纬度:28.38 经度:77.12
古尔冈纬度:30.30 经度:74.60
所以从我的观点来看,如果我搜索
findWithinDistance("junctionLocations", 28.6100,77.2300, 35.5);
即28.6100 lat和77.23 long以及35.5 km in km
这不提供任何数据
但是如果我交换lat,Lon位置然后Query给出适当的结果
findWithinDistance("junctionLocations",77.2300, 28.6100, 35.5);
所以,如果我是正确的,那么在Spatial Repository中正确的方法是
@Transactional
Result<T> findWithinDistance(final String indexName, final double lon, double lat, double distanceKm);