Catégories :

Fonctions géospatiales

ST_GEOHASH

Renvoie le geohash d’un objet GEOGRAPHY ou d’un objet GEOMETRY. 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 precision facultatif spécifie la précision du geohash renvoyé. Par exemple, la transmission de 5 pour la precision 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 precision.

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, ST_GEOGPOINTFROMGEOHASH

Syntaxe

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

ST_GEOHASH( <geometry_expression> [, <precision> ] )
Copy

Arguments

Obligatoire :

geography_expression

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

geometry_expression

L’argument doit être une expression de type GEOMETRY avec le SRID 4326.

Facultatif :

precision

Le nombre de caractères à utiliser dans le geohash. Vous pouvez spécifier une valeur de 1 à 20.

Par défaut, la precision 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é.

Si l’objet est un polygone et que les deux points de la boîte englobante ne partagent pas le même préfixe geohash, la fonction peut renvoyer une chaîne vide.

Exemples

L’exemple suivant renvoie le geohash pour un point GEOGRAPHY :

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

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

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

L’exemple suivant renvoie le geohash pour un point GEOMETRY :

SELECT ST_GEOHASH(
  TO_GEOMETRY('POINT(-122.306100 37.554162)', 4326))
  AS geohash_of_point_a;
Copy
+----------------------+
| GEOHASH_OF_POINT_A   |
|----------------------|
| 9q9j8ue2v71y5zzy0s4q |
+----------------------+

L’exemple suivant montre deux geohashs qui partagent le même préfixe, ce qui indique que les deux points GEOGRAPHY 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;
Copy
+----------------------+----------------------+
| 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;
Copy
+------------------------+------------------------+
| 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 GEOGRAPHY 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;
Copy
+--------------------+
| GEOHASH_OF_POLYGON |
|--------------------|
| 9q9j8              |
+--------------------+