PlayMorphia地理空间查询

时间:2013-09-19 21:22:40

标签: java mongodb geospatial playframework-1.x morphia

我正在使用Play Framework v1.2.5和连接到MongoDB v2.4.5的MongoDB Morphia模块PlayMorphia v1.2.12。

我无法弄清楚如何使用Morphia进行地理空间查询。

例如,基本查询很好:

//save a test address
new Address(47.5, -122.3, "123 South Main Street", "Seattle", "WA", "98109").save();

//now find it
List<Address> address = Address.q().filter("city", "Seattle").filter("street", "123 South Main Street").asList();
assertEquals(address.get(0).street,"123 South Main Street");

但是,the documentation没有提及如何在$ nearSphere查询中使用MongoDB的$ geoWithin $ geoIntersects $。

我尝试使用类似的东西,正如文档中暗示的那样,但它没有用。

List<Address> e = Address.q().filter("latlon near","[47.5, -122.3]").asList();

2 个答案:

答案 0 :(得分:1)

我认为最终的问题是你的filter参数是String而不是double []。尝试类似:Address.q()。field(“latlon”)。near(47.5,-122.3)。如果你想要特定的$ geoWithin,你可以使用.field(“latlon”)。在(Shape.center(new Point(47.5,-122.3),someRadius)。你需要morphia 0.104用于那个版本的within()。

答案 1 :(得分:0)

我找到了实现这一目标的方法,但是,它非常难看,因为结果需要进行投放。

List<Address> addresses = (List<Address>)(List<?>) Address.q().field("latlon").near(47.5, -122.3).asList();