在Spring Data ArangoDB中使用地理空间查询时出现内存不足异常

时间:2018-04-06 11:40:23

标签: spring gis geospatial arangodb

我正在使用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吗?

1 个答案:

答案 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来解决这个问题。