2016-08-19 4 views
2

Ich versuche, mit Google Datastore-Datenbank als meine Back-End-Datenbank arbeiten und Abfrage mit Geodaten Abfragen wie in this Tutorial von Google, aber alle Abfragen geben nichts zurück. Ich habe die nächste Demo-Debugging-Servlet in Java:Datenspeicher GeoSpatial-Abfragen gibt nichts zurück

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); 

Das Einsetzen in die DB arbeitet, Hier ist ein Screenshot von der Google-Konsole:

screenshot

Aber die Abfrage immer fehlschlägt, und wirft :

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> 

} 

Ich weiß nicht, was im Code falsch ist. Ich kopierte es wie im Tutorial, und die Punkte, die ich eingefügt habe, sind sehr nah (Nicht einmal den 100 km Radius schließen)

Antwort

1

Sie müssen diese Indexdefinition zu Ihrer datastore-indexes.xml Datei hinzufügen (in /WEB_INF Ordner). Es sieht so aus:

Wenn Sie verschiedene Abfragen in Ihrem Entwicklungsserver versuchen, erstellt es normalerweise die erforderlichen Indexdefinitionen automatisch. Manchmal müssen Sie sie jedoch möglicherweise manuell hinzufügen.

+0

I scheint, dass ich noch kein Konto haben, In meinem Projekt (Android Studio IDE): Backend src Haupt java Ressourcen Webapp WEB-INF appengine-web.xml logging.properties web. xml index.html Sollte ich es manuell hinzufügen? Danke :) –

+0

Ja, fügen Sie es hinzu. Ich werde die Antwort mit einem Beispiel aktualisieren. –