- Catégories :
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 :
Syntaxe¶
ST_GEOHASH( <geography_expression> [, <precision> ] )
ST_GEOHASH( <geometry_expression> [, <precision> ] )
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
est20
, 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;
+----------------------+
| 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;
+------------------------+
| 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;
+----------------------+
| 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;
+----------------------+----------------------+
| 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 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;
+--------------------+
| GEOHASH_OF_POLYGON |
|--------------------|
| 9q9j8 |
+--------------------+