我很难用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

10-06 07:15