Wie bekomme ich den Geohash eines Begrenzungsrahmens?

8

Ich speichere eine große Sammlung von 5 x 5 m großen Geohash-Werten. Ich möchte in der Lage sein, diese Sammlung abzufragen und alle Geohash-Werte zu finden, die in einen bestimmten Georekt fallen - der durch zwei Breitengradpunkte definiert ist - einen NW-Punkt und einen SW-Punkt.

Was ich nicht verstehe, ist Folgendes: Nehmen wir an, ich habe alle meine Standorte im Datenspeicher (zusammen mit einem Breiten-, Längen- und einem Geohash (mit hoher Präzision) für jeden Standort.)

Ich weiß, dass ich das Präfix des Geohashs verwenden sollte (um Positionen innerhalb des Geohashs abzugleichen), aber wie berechne ich einen Geohash eines Begrenzungsrahmens? Angesichts der Tatsache, dass der Begrenzungsrahmen aus zwei Punkten besteht, Nordost und Südwest, verstehe ich nicht, wie ich das machen soll.

Damit ich abfragen kann, welche Orte für den aktuell sichtbaren Begrenzungsrahmen zurückgegeben werden sollen, benötige ich den Geohash des sichtbaren / sichtbaren Begrenzungsrahmens. Jetzt weiß ich, dass ich den zentralen Ort auf der sichtbaren Karte geohash kann, aber ich weiß nicht wie Viele Buchstaben müssen abgeschnitten werden (um die Genauigkeit zu verringern), um eine Anpassung an den tatsächlichen Begrenzungsrahmen zu erreichen. (Oder vielleicht ist das nicht der richtige Weg ...?)

Was machen Sie, wenn der Begrenzungsrahmenbehälter zu Geohashes führt? (Wie in der Mitte des sichtbaren Bereichs wird zwischen 'dqcjr0' und 'dqcjqb' aufgeteilt.)

Nehmen wir außerdem an, ich habe einen Geohash mit 5 Buchstaben. Wie kann ich diesen wieder in einen sichtbaren Begrenzungsrahmen umwandeln? oder mit anderen Worten, woher weiß ich, was im Hash enthalten ist und was in benachbarten Hashes?

jcm
quelle

Antworten:

2

Das Folgende ist eine der Lösungen, die ich finden konnte.

Es gibt 12 Ebenen eines Geohash. Die Größe variiert zwischen
5.009,4 km x 4.992,6 km auf Stufe 1 und
3,7 cm x 1,9 cm auf Stufe 12 .

Als erstes müssen Sie auf einer Ebene beheben.

Holen Sie sich den Mittelpunkt des Begrenzungsrahmens. Wenn Sie den maximalen Abstand von der Mitte und die Geohash-Größe erreicht haben, suchen Sie die Rasterpunkte im Feld in der Entfernung (die Geohash-Größe).

Konvertieren Sie Gitterpunkte in Geohash.

Wird den Link meines Open-Source-Projekts teilen, das etwas Ähnliches tut. (Muss verbessert werden, bevor ich den Code drücke :-))

Wenn Sie bei Ihrer zweiten Frage einen Geohash wieder in ein Paar umwandeln, erhalten Sie den Mittelpunkt des Geohash-Bereichs * (einen rechteckigen Bereich) *.

Angesichts der Größe des Geohash auf dieser Ebene können Sie sich einen Begrenzungsrahmen besorgen.

Hoffe das hilft.

Ashwin Nair
quelle