Я пытаюсь работать с базой данных Google Datastore в качестве моей бэкэнд-базы данных и запрашивать ее с помощью геопространственных запросов, как в уроке от this, но все запросы ничего не возвращают. Я сделал следующий демонстрационной отладки сервлетов в Java:Datastore GeoSpatial queries ничего не возвращает
private static final String tableName = "DEBUG";
private static final double radius = 100 * 1000; //100 km
private static final String NameKey = "Name";
private static final String LocationKey = "location";
//Parameters from the http servlet request
String name;
float lat, lng;
//Insert a new person to the DB
Entity person = new Entity(tableName);
person.setProperty(NameKey, name);
GeoPt location = new GeoPt(lat, lng);
person.setProperty(LocationKey, location);
datastore.put(person);
//returns the users in the radius
Query.Filter filter = new Query.StContainsFilter(LocationKey, new Query.GeoRegion.Circle(location, radius));
Query query = new Query(tableName).setFilter(filter);
PreparedQuery pq = datastore.prepare(query);
JsonArray users = new JsonArray();
for (Entity entity : pq.asIterable()){
users.add(new JsonObject()
.add(NameKey, (String)entity.getProperty(NameKey))
.add(LocationKey, ((GeoPt)entity.getProperty(LocationKey)).toString()));
}
result.add("Users", users);
Вставка в БД работает, вот скриншот из консоли Google:
Но запрос всегда терпит неудачу, и бросает :
javax.servlet.ServletContext log: DebugGeoPtServlet: Returns: {Error=no matching index found.
The suggested index for this query is:
<datastore-index kind="DEBUG" source="manual">
<property name="location" mode="geospatial"/>
</datastore-index>
}
Я не знаю, что не так в коде. Я скопировал это как это в учебнике, и точки, которые я вставил, очень близки (не, даже близко радиус 100 км)
Я, кажется, я не один, в моем проекте (Android Studio IDE): Backend Src основные ява ресурсы WebAPP WEB-INF AppEngine-web.xml logging.properties веб. xml index.html Должен ли я добавить его вручную? Спасибо :) –
Да, добавьте его. Я обновлю ответ на образец. –