En février 2008, Gustavo Niemeyer a présenté le geohash et lancé geohash.org : un système de géocodage du domaine public qui encode un emplacement géographique en une courte chaîne de lettres et de chiffres. L'idée était de faire des coordonnées quelque chose que l'on pouvait écrire dans un courriel, une URL ou une clé de base de données.

L'astuce réside dans la hiérarchie du préfixe. Un geohash entrelace les bits de latitude et de longitude et les encode en base32 ; chaque caractère supplémentaire ajoute cinq bits de précision et identifie l'une des 32 sous-cellules de la précédente. Les emplacements proches partagent généralement des préfixes, et tronquer des caractères à la fin réduit la zone tout en gardant le code valide.

C'est cette propriété qui en a fait un standard. Elasticsearch documente qu'un point géographique peut être exprimé sous forme de geohash — des chaînes en base32 de bits de latitude et de longitude entrelacés — et les utilise pour l'indexation et les agrégations par grille, de sorte qu'une recherche de proximité devient une recherche par préfixe de chaîne sur un index qui existe déjà.

Une seule chaîne dont le préfixe signifie la proximité

La longueur du préfixe fait office à la fois de précision et de proximité, si bien qu'un seul champ remplit les deux fonctions.

Une courte chaîne est plus facile à partager qu'une paire de coordonnées.

Les index de chaînes existants n'ont besoin d'aucun nouveau mécanisme pour effectuer un travail géospatial.

La publication dans le domaine public a écarté toute raison de licence de le refuser.

Compressez un problème en 2-D en une clé en 1-D et tout index de chaînes existant devient un index spatial — la longueur du préfixe encode à la fois la précision et la proximité, si bien qu'aucun nouveau mécanisme n'est nécessaire.

Le geohash est devenu une manière standard d'exprimer et d'indexer des emplacements : Elasticsearch documente les points géographiques geohash et les agrégations par grille geohash, et la forme sous forme de chaîne le rendait naturel pour les caches, les URL et les clés de base de données. Il est aujourd'hui l'un des encodages par défaut derrière les index géospatiaux.

VÉRIFIEZ LES SOURCES

Les sources

  1. Geohash (lat/lon encoding) Movable Type Scripts · movable-type.co.uk
  2. Geo-point field type Elastic · elastic.co
  3. Geohash Wikipedia · en.wikipedia.org