Опрос Geopt с Objectify
У меня самое сложное, когда я запрашиваю поле GeoPt с помощью Objectify.
Я удостоверился, что есть аннотация @Index о поле GeoPt.
Однако приведенное ниже утверждение не работает
ofy().load()
.type(GeoStat.class)
.filter("geoPt.latitude >=", neLat)
.limit(10);
Возможен ли запрос поля GeoPt в Objectify?
1 ответ
Хранилище данных не поддерживает запросы 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);
Обратите внимание, что геопространственный поиск хранилища данных в настоящее время является альфа-версией, которая закрыта для приглашений. Таким образом, хотя вы можете заставить геопространственный поиск работать локально, он все равно не может быть использован в производстве. См. Google App Engine › GeoSpatial Alpha Пригласить