Introduction
Le système d’indexation géospatiale H3, développé par Uber, attribue une chaîne hexadécimale unique (appelée index H3) à chaque cellule hexagonale de la planète. Il est souvent nécessaire de convertir ces indices en latitude et longitude, que ce soit pour la visualisation ou l’analyse spatiale.
Installer la bibliothèque H3 en Python
Installez la dernière version officielle de la bibliothèque h3
:
Vérifier la version
Il existe deux versions principales de la bibliothèque H3 en Python. Pour savoir laquelle vous utilisez :
- Si
Version >= 4.0.0
: utilisez cell_to_latlng()
et cell_to_boundary()
- Si
Version < 4.0.0
: utilisez h3_to_geo()
et h3_to_geo_boundary()
Convertir un index H3 en latitude/longitude
Avec la nouvelle API (h3 >= 4.0.0
)
| import h3
# Exemple d'index H3
h3_index = '8928308280fffff'
# Conversion en (latitude, longitude)
lat, lon = h3.cell_to_latlng(h3_index)
print(f"Latitude : {lat}, Longitude : {lon}")
|
Sortie :
| Latitude: 37.776702349435695, Longitude: -122.41845932318309
|
Avec l’ancienne API (avant la version 4.0.0)
| import h3
h3_index = '8928308280fffff'
lat, lon = h3.h3_to_geo(h3_index)
print(f"Latitude : {lat}, Longitude : {lon}")
|
Obtenir les sommets de la cellule H3 (polygone hexagonal)
Si vous souhaitez récupérer les coordonnées du contour de la cellule H3 (par exemple, pour les tracer) :
Nouvelle API :
| import h3
boundary = h3.cell_to_boundary(h3_index)
for lat, lon in boundary:
print(f"Lat : {lat}, Lon : {lon}")
|
Sortie :
| Lat: 37.775197782893386, Lon: -122.41719971841658
Lat: 37.77688044840227, Lon: -122.41612835779266
Lat: 37.778385004930925, Lon: -122.41738797617619
Lat: 37.77820687262237, Lon: -122.41971895414808
Lat: 37.776524206993216, Lon: -122.42079024541879
Lat: 37.775019673792606, Lon: -122.41953062807342
|
Ancienne API :
| import h3
boundary = h3.h3_to_geo_boundary(h3_index, geo_json=True)
for lat, lon in boundary:
print(f"Lat : {lat}, Lon : {lon}")
|
Conversion en masse d’indices H3 en lat/lon dans une liste ou un DataFrame
Avec une liste :
| h3_indices = ['8928308280fffff', '8928308280bffff', '89283082807ffff']
latlon_list = [h3.cell_to_latlng(h) for h in h3_indices]
|
Sortie :
| [(37.776702349435695, -122.41845932318309),
(37.7753758485188, -122.41486876560982),
(37.77484152121918, -122.42186149457379)]
|
Avec un DataFrame pandas
:
| import pandas as pd
import h3
df = pd.DataFrame({'h3_index': ['8928308280fffff', '8928308280bffff']})
# Ajout des colonnes latitude et longitude
df[['lat', 'lon']] = df['h3_index'].apply(lambda h: pd.Series(h3.cell_to_latlng(h)))
|
Sortie :
h3_index |
lat |
lon |
8928308280fffff |
37.776702 |
-122.418459 |
8928308280bffff |
37.775376 |
-122.414869 |
Résumé
Tâche |
Nouvelle API (>= 4.0.0 ) |
Ancienne API (legacy) |
Obtenir lat/lon central |
cell_to_latlng() |
h3_to_geo() |
Obtenir le contour hexagon |
cell_to_boundary() |
h3_to_geo_boundary() |