Опрос 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 Пригласить

Другие вопросы по тегам