Table des matières

Plus Code - Open Location Code

Open Location Code est un système de géocodage permettant d'identifier une zone n'importe où sur Terre à l'aide d'un code alphanumérique de la forme :

AA BB CC DD + EE F G H ...2

Chaque doublet du début fonctionne comme une grille de bataille navale et désigne une zone particulière de coordonnées géographiques. Chaque ajout d'un doublet améliore la précision en dessinant une nouvelle grille 20 fois plus petite à l'intérieur de la case précédente. Si une précision plus grande est désirée, on peut alors ajouter des caractères un à un, des simplets, selon un autre découpage.

La grille la plus large désigne des blocs de 20° de côté en deux caractères. Tandis qu'un code de 10 caractères seulement désigne une zone d'environ 13 mètres de côté (permettant de localiser une maison). L'ajout de simplets éventuels permet de désigner un objet précis, par exemple une porte d'accès.

Codage des symboles

L'open location code utilise une notation en base 20 mais pour éviter toute erreur de lecture (confondre 1 et L, O et 0…) n'utilise pas les symboles habituels. On convient de l'encodage suivant :

Valeur 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Symbole 2 3 4 5 6 7 8 9 C  F G H J M P Q R V W X

Pour passer de l'un a l'autre, on peut utiliser une chaîne de caractère.

>>> code = "23456789CFGHJMPQRVWX"
>>> code[2] # valeur -> symbole
"4"
>>> code.index("4") # symbole -> valeur
2

Premier doublet

Le premier doublet du code permet de sélectionner une zone correspondant à un angle de 20° sur la surface de la terre. Par exemple, Paris se situe dans la zone identifiée par 8F.

Par exemple, Paris a la position latitude = 48.8589384 ; longitude : 2.2646353, exprimés en degrés.

latitude : Comme la latitude peut aller de -90° à +90°, on prend comme référence -90°. On coupe en tranches de 20°. Dans quelle tranche est 48.8589384 ?

>>> (48.8589384 + 90)/20
6.94294692

Donc Paris est dans la tranche de valeur 6 (arrondi à l'inférieur) dont le symbole est "8".

longitude : La longitude peut aller de -180° à +180°. Même principe.

>>> (2.2646353+180)/20
9.113231765

Donc Paris est dans la tranche de valeur 9 dont le symbole est "F".

On en conclut que le premier doublet pour Paris est "8F"

Deuxième doublet

Le premier doublet permettait de trouver le point dans une zone de 20°x20°.

Le deuxième doublet permet d'affiner et de préciser une zone de 1°x1°, donc une zone 20×20 plus petite.

latitude : On avait trouvé la valeur 6.933333500000001. La partie entière, 6, a déjà été prise en compte. Nous ne prenons donc que la partie décimale 0.933333500000001 et nous la multiplions par 20.

>>> 0.94294692*20
18.8589384

Pour le 2e doublet, en latitude, on aura donc 18 soit le symbole "W".

longitude : On avait trouvé la valeur 9.11666665. La partie entière, 9, a déjà été prise en compte. Nous ne prenons donc que la partie décimale 0.11666665 et nous la multiplions par 20.

>>> 0.113231765*20
2.2646353

Pour le 2e doublet, en longitude, on aura donc 2 soit le symbole "4".

Pour Paris, le 2e doublet est donc "W4".

Le Plus-code commence donc par "8F W4".

Troisième doublet

On continue de la même façon en multipliant par 20 la partie décimale du résultat précédent.

>>> 0.8589384*20
17.178767999999998
>>> 0.2646353*20
5.292706000000001

Ainsi les valeurs à prendre sont 17 et 5 soit les symboles "V7".

Quatrième doublet

Même chose.

>>> 0.178767999999998*20
3.5753599999999603
>>> 0.292706000000001*20
5.85412000000002

Valeurs 3 et 5 donc symboles "57"

Cinquième doublet

Même chose.

>>> 0.5753599999999603*20
11.507199999999207
>>> 0.85412000000002*20
17.082400000000398

Valeurs 11 et 17 donc symboles "HV"

Il faut mettre un "+" entre le 4e et le 5e doublet. Nous en sommes donc à :

"8F W4 V7 57 + HV" que l'on pourrait écrire sans les espaces : "8FW4V757+HV"

Simplets supplémentaires

La précision atteinte par les cinq doublets est suffisante pour la plupart des cas. On peut aller plus loin mais le codage change. On n'ira pas plus loin dans le cadre de cet exercice.

Cas de Google

Google propose une adaptation, appelée Plus-Code que l'on trouve dans Google Maps qui consiste à réduire le code et à préciser la ville.

Par exemple 8FW4V75V+HJ indique une petite zone près de la Tour Eiffel. Google propose d'indiquer V75V+HJ Paris. La mention Paris permet à Google d'identifier le début manquant.

Cette méthode n'est toutefois pas terrible car il y a plusieurs Paris dans le monde…

Toutefois, Google Maps est compatible avec les Open Location Code ordinaire : https://www.google.fr/maps/place/8FW4V75V%2BHJ – dans cette adresse, %2B code le +.

À faire

  1. Écrire une fonction qui, à partir d'une position gps donnée, détermine l'open location code à 5 doublets correspondant.
  2. Écrire une fonction qui, à partir d'un open location code a 5 doublets, donne le gps du centre de la zone correspondante.