3 votes

Basemap dessine une ligne entre la latitude et la longitude

Je trace les lieux de départ et d'arrivée des tornades. Le fichier csv contient les données suivantes :

TouchDownLat TouchDownLong LiftoffLat LiftoffLong
31.53         -97.15       31.74      -96.88
46.45         -100.67      46.67      -100.47
43.1          -83.85       43.17      -83.42

etc...

Ce que j'ai fait, c'est que j'ai pris chaque latitude et chaque longitude et je les ai séparées dans un tableau numpy :

import matplotlib.pyplot as plt
import csv
import numpy as np
from mpl_toolkits.basemap import Basemap
with open(fname, 'rb') as f:
    w = csv.reader(f, delimiter = ',')
    for i, line in enumerate (w):
      if i == 0 or line[2][0:4] not in str(range(2007,2018)):
          pass
      else:
          lat_td.append(line[27])
          long_td.append(line[28])
          lat_lift.append(line[29])
          long_lift.append(line[30])

touchdown = np.array([[lat_td], [long_td]])
lift = np.array([[lat_lift], [long_lift]])

Pour la carte de base, je trouve le max/min pour toutes les lat/longues afin de créer une carte pour découper les états qui n'ont pas eu de tornade (exemple : Je ne veux pas voir la Californie lorsque je regarde les emplacements des tornades EF-5).

m = Basemap(projection = 'merc', llcrnrlat=float(min(lat_td)) - 2,\
    urcrnrlat=float(max(lat_lift)) + 2, llcrnrlon=float(max(long_td)) - 2,\
    urcrnrlon=float(min(long_lift)) + 2,lat_ts=40,resolution='l')
m.drawcoastlines()
m.fillcontinents(color='white')
m.drawmapboundary(fill_color='white')
m.drawstates(color='black')
m.drawcountries(color='black')
plt.title("#wedgez")

La question se pose donc maintenant : Je cherche à tracer la trajectoire de la tornade en utilisant les coordonnées lat/long dans le tableau numpy. Comment dois-je m'y prendre ?

7voto

kimalser Points 103

Si je comprends bien, vous cherchez un moyen de tracer un chemin, étant donné les coordonnées des points du chemin. Vous pouvez alors tracer la trajectoire comme suit :

m = Basemap(projection = 'merc', llcrnrlat=float(min(lat_td)) - 2,\
    urcrnrlat=float(max(lat_lift)) + 2, llcrnrlon=float(max(long_td)) - 2,\
    urcrnrlon=float(min(long_lift)) + 2,lat_ts=40,resolution='l')

lat = [the list of lat coordinates here] 
lon = [the list of lon coordinates here] 

x, y = m(lon, lat)
m.plot(x, y, 'o-', markersize=5, linewidth=1) 

m.drawcoastlines()
m.fillcontinents(color='white')
m.drawmapboundary(fill_color='white')
m.drawstates(color='black')
m.drawcountries(color='black')
plt.title("#wedgez")
plt.show()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X