Comment convertir des longitudes et latitudes en coordonnées mercator en utilisant Python ?

Published: 11 février 2024

Tags: Python;

DMCA.com Protection Status

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