空间索引中的距离neo4j没有给出适当的结果

时间:2015-02-20 08:11:34

标签: neo4j cypher spring-data-neo4j neo4j-spatial

我们在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得到正确的数据?

1 个答案:

答案 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);