Catégories :

Fonctions géospatiales

ST_GEOHASH

Renvoie le geohash pour un objet géospatial. Un geohash est une courte chaîne base32 qui identifie un rectangle géodésique contenant un emplacement dans le monde.

Le nombre de caractères dans un geohash détermine la précision. La suppression de caractères de la fin d’un geohash entraîne un geohash moins précis et qui identifie une zone rectangulaire plus grande.

ST_GEOHASH renvoie un geohash de 20 caractères. L’argument précision facultatif spécifie la précision du geohash renvoyé. Par exemple, la transmission de 5 pour la précision renvoie un geohash plus court (5 caractères de long) moins précis.

Note

Pour un objet géospatial qui n’est pas un point, la fonction peut renvoyer un geohash de moindre précision, quelle que soit la valeur par défaut ou spécifiée pour la précision.

Dans ces cas, la précision est déterminée par la zone entourante de l’objet géospatial. ST_GEOHASH détermine d’abord les geohashs des coins inférieurs gauche et supérieurs droit de la zone entourante, puis renvoie le préfixe commun à ces deux geohashs.

Voir aussi :

ST_GEOGFROMGEOHASH

Syntaxe

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

Arguments

Obligatoire :

expression_géographie

L’argument doit être une expression de type GEOGRAPHY.

Facultatif :

précision

Le nombre de caractères à utiliser dans le geohash.

Par défaut, la précision est 20, ce qui produit un geohash de 20 caractères.

Renvoie

Renvoie le geohash (une valeur de type STRING) pour l’objet spécifié.

Exemples

L’exemple suivant renvoie le geohash pour un point :

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

L’exemple suivant renvoie un geohash pour le même point avec moins de précision :

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

L’exemple suivant montre deux géohashs qui partagent le même préfixe, ce qui indique que les deux points sont proches l’un de l’autre.

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                  |
+------------------------+------------------------+

L’exemple suivant renvoie le geohash pour un polygone. Les coins inférieurs gauche et supérieurs droit de la zone entourante de ce polygone sont les deux mêmes points utilisés dans les exemples précédents. Comme le montre cet exemple, ST_GEOHASH renvoie le préfixe commun aux géohashs des coins inférieurs gauche et supérieurs droit de la zone entourante.

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              |
+--------------------+