Kategorien:

Geodatenfunktionen

ST_GEOHASH

Gibt den Geohash für ein Geodatenobjekt zurück. Ein Geohash ist eine kurze Base32-Zeichenfolge, die ein geodätisches Rechteck identifiziert, das einen Standort auf der Erde repräsentiert.

Die Anzahl der Zeichen in einem Geohash bestimmt die Genauigkeit. Das Entfernen von Zeichen vom Ende eines Geohash führt zu einem Geohash, der weniger genau ist und einen größeren rechteckigen Bereich identifiziert.

ST_GEOHASH gibt einen Geohash zurück, der 20 Zeichen lang ist. Das optionale Argument Genauigkeit gibt die Genauigkeit des zurückgegebenen Geohash an. Wenn Sie beispielsweise 5 für Genauigkeit übergeben, wird ein kürzerer Geohash (5 Zeichen lang) zurückgegeben, der weniger genau ist.

Bemerkung

Für ein Geodatenobjekt, das kein Punkt ist, gibt die Funktion möglicherweise einen Geohash mit geringerer Genauigkeit zurück, unabhängig vom Standardwert oder dem mit Genauigkeit angegebenen Wert.

In diesen Fällen wird die Genauigkeit durch den Begrenzungsrahmen des Geodatenobjekts bestimmt. ST_GEOHASH bestimmt zuerst die Geohashes der linken unteren und der rechten oberen Ecke des Begrenzungsrahmens und gibt dann das Präfix zurück, das diesen beiden Geohashes gemeinsam ist.

Siehe auch:

ST_GEOGFROMGEOHASH

Syntax

ST_GEOHASH( <geography_expression> [, <precision> ] )

Argumente

Erforderlich:

Geografischer_Ausdruck

Das Argument muss ein Ausdruck vom Typ GEOGRAPHY sein.

Optional:

Genauigkeit

Die Anzahl der Zeichen, die im Geohash verwendet werden sollen.

Standardmäßig hat Genauigkeit den Wert 20, wodurch ein Geohash mit einer Länge von 20 Zeichen erstellt wird.

Rückgabewerte

Gibt den Geohash (einen Wert vom Typ STRING) für das angegebene Objekt zurück.

Beispiele

Das folgende Beispiel gibt den Geohash für einen Punkt zurück:

SELECT ST_GEOHASH(
    TO_GEOGRAPHY('POINT(-122.306100 37.554162)'))
    AS geohash_of_point_a;
+----------------------+
| GEOHASH_OF_POINT_A   |
|----------------------|
| 9q9j8ue2v71y5zzy0s4q |
+----------------------+

Im folgenden Beispiel wird ein Geohash für denselben Punkt mit geringerer Genauigkeit zurückgegeben:

SELECT ST_GEOHASH(
    TO_GEOGRAPHY('POINT(-122.306100 37.554162)'),
    5) AS less_precise_geohash_a;
+------------------------+
| LESS_PRECISE_GEOHASH_A |
|------------------------|
| 9q9j8                  |
+------------------------+

Das folgende Beispiel zeigt zwei Geohashes mit demselben Präfix an, was darauf hinweist, dass die beiden Punkte nahe beieinander liegen.

SELECT
    ST_GEOHASH(
        TO_GEOGRAPHY('POINT(-122.306100 37.554162)'))
        AS geohash_of_point_a,
    ST_GEOHASH(
        TO_GEOGRAPHY('POINT(-122.323111 37.562333)'))
        AS geohash_of_point_b;
+----------------------+----------------------+
| GEOHASH_OF_POINT_A   | GEOHASH_OF_POINT_B   |
|----------------------+----------------------|
| 9q9j8ue2v71y5zzy0s4q | 9q9j8qp02yms1tpjesmc |
+----------------------+----------------------+
SELECT
    ST_GEOHASH(
        TO_GEOGRAPHY('POINT(-122.306100 37.554162)'),
        5) AS less_precise_geohash_a,
    ST_GEOHASH(
        TO_GEOGRAPHY('POINT(-122.323111 37.562333)'),
        5) AS less_precise_geohash_b;
+------------------------+------------------------+
| LESS_PRECISE_GEOHASH_A | LESS_PRECISE_GEOHASH_B |
|------------------------+------------------------|
| 9q9j8                  | 9q9j8                  |
+------------------------+------------------------+

Das folgende Beispiel gibt den Geohash für ein Polygon zurück. Die linke untere und die rechte obere Ecke des Begrenzungsrahmens dieses Polygons sind dieselben zwei Punkte, die in den vorherigen Beispielen verwendet wurden. Wie in diesem Beispiel gezeigt, gibt ST_GEOHASH das Präfix zurück, das den Geohashes der linken unteren und der rechten oberen Ecke des Begrenzungsrahmens gemeinsam ist.

SELECT
    ST_GEOHASH(
        TO_GEOGRAPHY(
            'POLYGON((-122.306100 37.554162, -122.306100 37.562333, -122.323111 37.562333, -122.323111 37.554162, -122.306100 37.554162))'
        )
    ) AS geohash_of_polygon;
+--------------------+
| GEOHASH_OF_POLYGON |
|--------------------|
| 9q9j8              |
+--------------------+