L’INE (l’INSEE bolivien) est en train d’élaborer un code pour référencer de manière unique les quartiers (urbains) et les communautés (rurales).
Pour éviter toute interprétation politique dans un pays où les limites territoriales ne sont pas définies partout, il a été décidé que le code n’aurait pas de référence administrative (dans tel département, dans telle ville) mais au contraire seulement une référence géographique.
Dans un premier temps, il a été décidé que, pour chaque quartier ou communauté (auquel correspond un polygone de limite territoriale), la référence sera le centroïde du polygone (en gros, le centre de gravité, toujours inclus dans le polygone). Et une des possibilités est d’utiliser le geohash de ce point central comme code de référence du quartier ou de la communauté.
GeoHash est un algorithme qui transforme (latitude,longitude) en un code, par exemple : (57.64911,10.40744)
devient u4pruydqqvj
. Chaque caractère additionnel augmente la précision.
►https://en.wikipedia.org/wiki/Geohash
Le GeoHash est réversible, ce qui signifie que la connaissance du code permet de retrouver latitude et longitude avec une certaine précision, qui dépend du nombre de caractères du geohash. Par exemple, avec 8 caractères, la précision est d’à peu près 50m.
Par contre, ayant réduit le polygone à un simple point, il n’est pas possible de revenir au polygone à partir du geohash, même pas à une approximation grossière.
Dans la deuxière étape, on aimerait donc pouvoir coder les polygones, et non pas simplement leurs centroïdes.
Le souci, évidemment, est la taille du code résultant. Imaginons la méthode suivante : simplifier le polygone en le remplaçant par sa « bounding box », c’est à dire le « rectangle » qui contient le polygone (latitudes et longitudes min et max). Pour coder le polygone à partir de ces 4 points en concaténant leurs geohash, il faut 4 fois plus de caractères, disons 8x4=32 caractères. On peut imaginer comprimer pour arriver à 16 caractères, puisque les 4 geohash auront une grande partie en commun.
Pour coder très grossièrement le polygone, on multiplie déjà par deux la longueur du code. Et on aimerait pouvoir définir de façon beaucoup plus précise les polygones, avec 10 points par exemple. Plusieurs possibilités :
– geohash de chaque point du polygone, concaténation de tous les geohashs, puis compression de cette concaténation - un seul code, mais très long et pas directement utilisable pour indexer
– méthode RecursivePrefixTree : on liste tous les geohash contenus dans le polygone - autant de codes que de polygones inclus dans la géométrie, très facile à utiliser pour indexer - plus adapté aux machines qu’aux humain.e.s
►http://www.opensourceconnections.com/2014/04/11/indexing-polygons-in-lucene-with-accuracy
Avez-vous déjà vu et essayé des méthodes pour coder la géométrie d’un polygone avec une seule chaîne de caractères, et qui soit utilisable par un humain (recopier, entrer la valeur dans une application) ?