Kategorien:

Geodatenfunktionen

ST_GEOHASH

Returns the geohash for a GEOGRAPHY object. A geohash is a short base32 string that identifies a geodesic rectangle containing a location in the world.

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 precision gibt die Genauigkeit des zurückgegebenen Geohash an. Wenn Sie beispielsweise 5 für precision ü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 precision 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, ST_GEOGPOINTFROMGEOHASH

Syntax

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

Argumente

Erforderlich:

geography_expression

Das Argument muss ein Ausdruck vom Typ GEOGRAPHY sein.

Optional:

precision

Die Anzahl der Zeichen, die im Geohash verwendet werden sollen. Sie können einen Wert von 1 bis 20 angeben.

Standardmäßig hat precision 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.

Wenn es sich bei dem Objekt um ein Polygon handelt und die beiden Punkte des Begrenzungsrahmens nicht das gleiche Geohash-Präfix haben, kann die Funktion einen leeren String zurückgeben.

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              |
+--------------------+
Zurück zum Anfang