2016-05-16 17 views
0

Ich würde gerne eine Geo-Bounding-Box-Abfrage in elasticsearch machen, mit einigen Spielraum für Fehler (meistens sind am selben Ort max und min). Im Idealfall würde dies dem Rechteck eine schöne abgerundete Ecke geben, mit einem Viertelkreis an jeder Ecke, aber das Hinzufügen von x Meilen nach oben rechts und das Subtrahieren von links unten wäre ausreichend.(Elasticsearch) Gibt es eine Möglichkeit, den Kanten einer Geo-Bounding-Box-Abfrage einen ± Bereich hinzuzufügen?

Ich könnte dies tun, indem Sie die Entfernung zu einem Unterschied in Lat lang konvertieren, aber das ist ziemlich kompliziert, da sich die Zuordnung abhängig von der tatsächlichen Breite ändert, also würde ich es lieber nicht so machen.

Vielen Dank im Voraus für Anregungen.

Antwort

0

Während Sie kein perfekt abgerundetes Rechteck definieren können, können Sie es mit einer Geo Polygon Query anstelle einer Bounding Box annähern, Sie müssen nur einige Punkte auf den abgerundeten Ecken programmatisch berechnen; zum Beispiel unter der Annahme, Ihre linke obere Ecke hat die Koordinaten x0, y0:

enter image description here

Und so weiter für die anderen Ecken, mit so vielen Zwischenpunkten, wie Sie wollen.

Es scheint jedoch ein bisschen ein Overkill, Sie möchten vielleicht nur Ihre Bounding Box vergrößern.

UPDATE: eine andere Art und Weise die Implementierung einer benutzerdefinierten Funktion durch Scripting sein kann, da eine GeoPoint Breite und Länge des accessed through scripting sein kann.

+0

Danke für Ihre Antwort. Einfach die Bounding Box zu erweitern, wird gut funktionieren, aber es ist nicht besonders einfach herauszufinden, wie viel Grad lat & long die Ecke basierend auf einer gegebenen Anzahl von Meilen verschiebt. Es ist machbar, aber ich hatte gehofft, dass jemand eine elegantere Lösung kennt, da elasticsearch sowas hinter den Kulissen sowieso (und effizient) für Geo-Distanz-Abfragen machen muss. – kiml42

+0

Sie können scripting verwenden, um Ihre eigene Abstandsfunktion zu implementieren, sehen Sie meine aktualisierte Antwort – dipanda

+0

Wieder würde das funktionieren, aber mein Problem ist nicht, dass ich es nicht tun kann, es ist, dass ich es nicht ordentlich machen kann und wahrscheinlich kann Mach es nicht so effizient, als ob es eine einfache Möglichkeit gäbe, Elasticsearch das für mich tun zu lassen. – kiml42