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