Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
nsi:modules:points_sur_une_carte_europe [GoupillWiki]

Outils pour utilisateurs

Outils du site


nsi:modules:points_sur_une_carte_europe

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Mettre des points sur une carte avec Matplotlib

Je fais une copie de cette page en l'adaptant au cas de l'Europe.

Ce que l'on veut faire

Nous souhaitons placer quelques villes :

data = [
  {"nom":"Paris", "lat":48.866667, "lng": 2.333333},
  {"nom":"Londres", "lat":51.507222, "lng":0.1275},
  {"nom":"Berlin", "lat":52.5166667, "lng":13.383}
]

Afficher la carte

Télécharger le fichier : europe.png

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread('europe.png')
plt.imshow(img)
plt.show()

Coordonnées sur la carte

La carte choisie a le format 857×712. Le coin supérieur gauche a les coordonnées (0;0) et le coint inférieur droit (856;711). Rien à voir avec latitude et longitude… Nous devons créer une fonction (lng;lat) → (x;y).

La carte n'est pas en projection plate, il faut faire quelques calculs. Je vous donne la fonction.

def latlng_to_xy(lat,lng):
    xA = 770
    xB = 179
    lngA = 8.226100
    lngB = -1.784251
    a = (xA - xB) / (lngA - lngB)
    b = xA - a*lngA
    return int(a*lng + b) # on approxime à l'entier

Latitude vers y

Le principe est exactement le même.

def lat_to_y(lat):
    yA = 190
    yB = 685
    latA = 48.968311
    latB = 43.372928
    a = (yA - yB) / (latA - latB)
    b = yA - a*latA
    return int(a*lat + b) # on approxime à l'entier

Placer les points

Il suffit de générer une liste pour les x et une autre pour les y :


data = [
  {"nom":"Paris", "lat":48.866667, "lng": 2.333333},
  {"nom":"Marseille", "lat":43.300000, "lng":5.400000},
  {"nom":"Berlin", "lat":52.520007, "lng":13.404954}
]

xs = [lng_to_x(item["lng"]) for item in data]
ys = [lat_to_y(item["lat"]) for item in data]

plt.scatter(xs,ys)

Fichier final

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

def lng_to_x(lng):
    xA = 770
    xB = 179
    lngA = 8.226100
    lngB = -1.784251
    a = (xA - xB) / (lngA - lngB)
    b = xA - a*lngA
    return int(a*lng + b) # on approxime à l'entier

def lat_to_y(lat):
    yA = 190
    yB = 685
    latA = 48.968311
    latB = 43.372928
    a = (yA - yB) / (latA - latB)
    b = yA - a*latA
    return int(a*lat + b) # on approxime à l'entier

data = [
  {"nom":"Paris", "lat":48.866667, "lng": 2.333333},
  {"nom":"Marseille", "lat":43.300000, "lng":5.400000},
  {"nom":"Berlin", "lat":52.520007, "lng":13.404954}
]

xs = [lng_to_x(item["lng"]) for item in data]
ys = [lat_to_y(item["lat"]) for item in data]
img = mpimg.imread('france_vide.png')
plt.scatter(xs,ys)
plt.imshow(img)
plt.show()

Notez que le point de Berlin n'apparaît pas et qu'il n'a pas occasionner de modification de l'échelle.

Le point de Marseille semble un peu dans la mer. Cela peut avoir deux causes :

  • notre réglage avec les points A et B n'est pas assez précis,
  • la carte utilisée est légèrement fausse. En effet, si vous regardez une carte plus détaillée, vous verrez que la côte au voisinage de Marseille est beaucoup plus compliquée que ce qui apparaît sur notre carte vide. Il est fréquent que des cartes comme celle-ci simplifient le tracé des côtes.
nsi/modules/points_sur_une_carte_europe.txt · Dernière modification : de goupillwiki