Frage 1:Datastore-Abfrage für Standorte innerhalb einer Region
Ich verwende Google-Datenspeicher (Java Client-Bibliotheken) mit App Engine Flex und ich bin Speichern von Ortsdaten. Ich möchte nach einer Liste von Orten innerhalb einer rechteckigen Region fragen.
Mein Standort Einheit sieht wie folgt aus:
Location
- lat (eg. -56.1)
- long (eg. 45.6)
Google-Datenspeicher hat Einschränkungen für mit mehreren Ungleichheiten auf unterschiedliche Eigenschaften abfragen, so kann ich nicht mit GQL wie diese Abfrage:
SELECT * FROM Location WHERE lat <= @maxLat AND lat >= @minLat AND long <= @maxLong AND long >= @minLong
Wo maxLat
, minLat
, maxLong
und minLong
stellen das Begrenzungsrechteck für die Suche nach Speicherorten dar.
Ich Abfrage Derzeit nur ein Filter mit:
SELECT * FROM Location WHERE lat <= @maxLat AND lat >= @minLat
Und von den zurückgegebenen Ergebnissen, ich auch die, die innerhalb der Grenzen Länge herauszufiltern. Gibt es dafür einen besseren Weg, ohne auf diese Strategie zurückzugreifen?
Frage 2:
Wenn ich die Breite/Länge Kombination als Geopunkt in Google-Datenspeicher gespeichert werden, wie kann ich die geografische Breite und Länge überprüfen?
Location
- location (Geopoint)
ich im Geopunkt der Java-Client-Bibliotheken unter Verwendung von auf dem lat/long nicht filtern:
Zum Beispiel, wenn der Standort wird wie folgt gespeichert.
SELECT * FROM Location WHERE location.long <= @maxLong
Gibt es eine Problemumgehung für die Datastore Geopoint-Eigenschaft?
Ich verstehe nicht ganz, was Sie mit dieser Strategie meinen. Ich verwende 1-Grad-Zellen mit Zelle 0, die lat darstellt: -90,0 bis -89,0 und lang: -180,0 bis -179,0. Die Zellenzahl erhöht sich jedes Mal, wenn der Breitengrad zunimmt, und sobald Breitengrad 89,0 bis 90,0 erreicht, geht es zurück zu -90,0 bis -89,0 und erhöht den Längenwert um 1 Grad. Dann wird der Ort (0, 0) dargestellt, indem er sich innerhalb der Zelle 32, 399 befindet (Der Ort ist eine Ecke von vier verschiedenen Zellen. In welcher Zelle ist 'in'?). Ist das was du vorschlägst? Wenn die Bounding Box eine sehr kleine Box ist, müssten die Zellen sehr spezifisch sein? (0,0001 Grad Blöcke) – Kookz
Ich habe lange darüber nachgedacht, aber ich verstehe Ihre Lösung immer noch nicht. Könnten Sie ein bisschen mehr erweitern und vielleicht eine Beispiellösung zeigen? Vielen Dank ! – Kookz