Introduction
La projection Mercator est l'une des projections de carte les plus couramment utilisées pour représenter notre planète sur une surface plane. Elle a été développée par le cartographe flamand Gerardus Mercator en 1569 et est basée sur la sphère terrestre.
Les coordonnées mercator sont utilisées pour créer des cartes et des visualisations géographiques dans de nombreux logiciels tels que QGIS, ArcGIS et Google Maps. Il peut également être utile de convertir les coordonnées GPS en coordonnées mercator pour les utiliser dans des applications web ou mobiles.
Dans cet article, nous explorerons différentes méthodes de conversion de longitudes et latitudes en coordonnées Mercator en utilisant Python.
Conversion des longitudes et latitudes en projection Mercator à l'aide de geopandas
Geopandas est une bibliothèque Python open-source qui combine les capacités des puissantes bibliothèques géospatiales - Shapely et PyProj - en un seul package. Il permet aux utilisateurs de lire, écrire, manipuler et visualiser facilement des données géospatiales. Geopandas prend également en charge différentes projections cartographiques, en faisant l'outil idéal pour transformer les longitudes et latitudes en projections Mercator.
Explorons les longitudes et latitudes suivantes de différentes villes que nous souhaitons convertir en projection Mercator :
data = {'city_name':['Paris','London','Moscow', 'Istanbul'],
'longitude':[2.3522,-0.1276,37.6173,28.9784],
'latitude':[48.8566,51.5072,55.7558,41.0082]}
Création d'une dataframe geopandas
Maintenant, nous pouvons avancer et stocker nos données dans une dataframe pandas :
import pandas as pd
df = pd.DataFrame(data)
Enfin, nous pouvons convertir notre DataFrame en Geodataframe.
import geopandas
gdf = geopandas.GeoDataFrame(
df,
geometry=geopandas.points_from_xy(df.longitude, df.latitude),
crs="EPSG:4326"
)
Note : pour déterminer le système de coordonnées CRS associé à notre dataframe, nous pouvons exécuter la commande suivante :
print( gdf.crs )
Le code présenté ici ne correspond pas à Mercantor.
EPSG:4326
Conversion des longitudes et latitudes en projection Mercator à l'aide de geopandas to_crs()
Pour convertir notre geopandas dataframe en projection Mercator, nous pouvons faire :
gdf = gdf.to_crs("epsg:3857") # Mercator-projection
Enfin, notre ensemble de données s'est transformé en le format suivant :
city_name longitude latitude geometry
0 Paris 2.3522 48.8566 POINT (261845.706 6250564.350)
1 London -0.1276 51.5072 POINT (-14204.367 6711506.705)
2 Moscow 37.6173 55.7558 POINT (4187538.681 7509955.142)
3 Istanbul 28.9784 41.0082 POINT (3225860.732 5013551.237)
Extraction des coordonnées Mercator d'une geopandas dataframe
À l'étape finale, nous pouvons extraire les coordonnées de la projection Mercator qui correspondent aux longitudes et latitudes données.
gdf['longitude_x'] = gdf['geometry'].x
gdf['latitude_y'] = gdf['geometry'].y
Maintenant, le géodataframe a deux nouvelles colonnes qui seront utilisées pour tracer nos points :
city_name longitude latitude geometry \
0 Paris 2.3522 48.8566 POINT (261845.706 6250564.350)
1 London -0.1276 51.5072 POINT (-14204.367 6711506.705)
2 Moscow 37.6173 55.7558 POINT (4187538.681 7509955.142)
3 Istanbul 28.9784 41.0082 POINT (3225860.732 5013551.237)
longitude_x latitude_y
0 2.618457e+05 6.250564e+06
1 -1.420437e+04 6.711507e+06
2 4.187539e+06 7.509955e+06
3 3.225861e+06 5.013551e+06
Création d'une fonction Python personnalisée pour transformer les longitudes et latitudes en coordonnées Mercator
La méthode la plus couramment utilisée pour projeter des données géographiques sur une surface plane est la projection de Mercator sphérique. Cette projection est utilisée par de nombreux outils de cartographie en ligne, y compris Google Maps et OpenStreetMap. Pour convertir des coordonnées de latitude et de longitude en coordonnées de Mercator en utilisant cette méthode, les formules suivantes peuvent être appliquées :
Formula for X coordinate: x = R * (λ - λ0)
Formula for Y coordinate: y = R * ln(tan(π/4 + φ/2))
Dans ces formules, R représente le rayon de la Terre, λ est la longitude en radians, λ0 est une longitude de référence (généralement 0), et φ est la latitude en radians. Le résultat de ces formules sera en mètres.
Voici un exemple de création d'un script Python qui convertit les coordonnées de latitude et de longitude en projection Mercator :
import numpy as np
def convert_to_mercator(lats, lons):
R = 6378137.000
x = R * np.radians(lons)
scale = x/lons
y = 180.0/np.pi * np.log(np.tan(np.pi/4.0 + lats * (np.pi/180.0)/2.0)) * scale
return (x, y)
Pour organiser nos données, nous pouvons stocker les valeurs de longitude et de latitude dans des tableaux distincts :
data = {'city_name':['Paris','London','Moscow', 'Istanbul'],
'longitude':[2.3522,-0.1276,37.6173,28.9784],
'latitude':[48.8566,51.5072,55.7558,41.0082]}
lats = np.array( data['latitude'] )
lons = np.array( data['longitude'] )
Après l'application de notre fonction
xs, ys = convert_to_mercator(lats, lons)
print(xs)
print(ys)
, la sortie résultante est la suivante
[ 261845.70624394 -14204.36702522 4187538.68101781 3225860.7320038 ]
[6250564.34954313 6711506.70540052 7509955.1423381 5013551.2372226 ]
Veuillez noter que nous obtenons des résultats identiques en utilisant geopandas.
Références
Liens | Site |
---|---|
Mercator_projection | en.wikipedia.org |
epsg:3857 | epsg.io |
Calculating Mercator coordinates from lat/lon | gis.stackexchange.com |
GeoDataFrame.to_crs | geopandas.org |