我正在使用spring-boot 2.0.0和arangodb-spring-data 2.0.3,我正在使用我自己的数据结构跟踪here中的地理空间查询教程。
@Data
@NoArgsConstructor
@Document(value = "hospital")
public class Hospital {
@Id
private String id;
private String name;
private String phone;
private String address;
@GeoIndexed
private double[] location;
public Hospital(String name, String phone, String address, double[] location) {
super();
this.name = name;
this.phone = phone;
this.address = address;
this.location = location;
}
}
@Repository
public interface HospitalRepository extends ArangoRepository<Hospital> {
GeoResults<Hospital> findByLocationWithin(Point location, Distance distance);
}
@Test
public void geoSpatialTest() throws IOException {
populateDb();
Point point = new Point(-7.2895286, 112.7731704);
Distance distance = new Distance(2, Metrics.KILOMETERS);
GeoResults<Hospital> results = repository.findByLocationWithin(point, distance);
results.getContent().forEach(System.out::println);
}
如果我调用findByLocationWithin()方法,它会抛出内存异常 。
com.arangodb.ArangoDBException: Response: 500, Error: 3 - AQL: out of memory (exception location: /var/lib/otherjenkins/workspace/RELEASE__BuildPackages/arangod/MMFiles/MMFilesGeoIndex.cpp:151) (while executing) (exception location: /var/lib/otherjenkins/workspace/RELEASE__BuildPackages/arangod/RestHandler/RestCursorHandler.cpp:135)
我想做的是到附近的医院,距离小于X公里。我可以通过在ArangoDB中使用此查询来实现此目的。
FOR hospital IN WITHIN(hospital, -7.2895286, 112.7731704, 2000)
RETURN hospital
arangodb-spring-data莫名其妙地被打破了?我需要为此制作自定义@Query吗?
答案 0 :(得分:1)
您必须切换Point
的值,以便在Java应用程序中执行与AQL查询相同的操作。
Point point = new Point(112.7731704, -7.2895286);
ArangoDB Spring数据假设Point
的第一个参数是经度和第二个纬度。
出现错误AQL: out of memory
是因为ArangoDB地理索引中的检查检查经度介于-180和180之间,纬度介于-90和90之间。错误消息非常误导,但已经存在一个PR on github来解决这个问题。