使用 Objectify 查询 Geopt

Querying Geopt with Objectify

我在使用 Objectify 查询 GeoPt 字段时遇到了困难。

我确定有一个关于 GeoPt 字段的 @Index 注释。

但是,下面的语句似乎不起作用

ofy().load()
     .type(GeoStat.class)
     .filter("geoPt.latitude >=", neLat)
     .limit(10);

是否可以在 Objectify 中查询 GeoPt 字段?

数据存储不支持以这种方式查询 GeoPt。如果您希望查询纬度,请单独对其进行索引(可能写入 @OnSave 方法中的私有字段)。但是,如果您尝试执行地理空间查询(即包含在矩形中),请注意您不能执行两个不等式过滤器(范围内的纬度、范围内的经度)。

好消息是最近 google 添加了直接对数据存储执行地理空间查询的功能:

https://cloud.google.com/appengine/docs/java/datastore/geosearch

GeoPt center = new GeoPt(latitude, longitude);
double radius = valueInMeters;
Filter f = new StContainsFilter("geoPt", new Circle(center, radius));
ofy().load().type(GeoStat.class).filter(f);

请注意,数据存储的地理空间搜索目前是 Alpha 版本,已关闭邀请。因此,虽然您可以让地理空间搜索在本地运行,但它仍然不能用于生产。参见:Google App Engine › GeoSpatial Alpha Invite