Dies ist eine alte Version des Dokuments!
import numpy as np import cartopy.crs as ccrs # Kartenprogramm import cartopy.feature as cfeature import cartopy.io.shapereader as shpreader import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.patches as mpatches import pandas as pd # Kartenstil type = ccrs.RotatedPole(pole_longitude=-177.5, pole_latitude=37.5) world = plt.figure(figsize=(15,15)) # Größe map = world.add_subplot(projection=type) map = plt.axes(projection=type) map.coastlines() map.gridlines() # Aussehen Karte map.add_feature(cfeature.LAND, zorder=0, color='honeydew') map.add_feature(cfeature.OCEAN, color='pink') map.add_feature(cfeature.LAKES, color='pink') map.add_feature(cfeature.BORDERS, color='dimgrey') # map.stock_img() map.set_extent([-100, 20, 30, 60], crs=ccrs.PlateCarree()) # Ausschnitt Karte # Koordinaten Frankfurt und New York (mit Punkt und Textzug) ny_lon, ny_lat = -75, 43 ; fra_lon, fra_lat = 8, 50 map.scatter(ny_lon, ny_lat, color='black', marker='D', transform=ccrs.PlateCarree()) map.scatter(fra_lon, fra_lat, color='black', marker='D', transform=ccrs.PlateCarree()) plt.text(ny_lon + 1, ny_lat - 2, 'New York', horizontalalignment='right', transform=ccrs.PlateCarree()) plt.text(fra_lon, fra_lat + 1, 'Frankfurt', horizontalalignment='left', transform=ccrs.PlateCarree()) lon, lat = [fra_lat], [fra_lon] # erster Listeneintrag Frankfurt speed, height = [0], [80] # Startflughafen 80m über NN flugdauer = 400 # Testgröße, später ersetzen # Funktion zur Punkteerstellung def longitude(time): """Längengrad nach Zeit""" return -(7/flugdauer)*time+50 def latitude(time): """Breitengrad nach Zeit""" return -(83/flugdauer)*time+8 speed1, height1 = 100, 100 # Testgrößen, später entfernen feinheit = 50 t = 1 while t<flugdauer: # Punkte in Liste setzen x = float(longitude(t)) lon.append(x) y = float(latitude(t)) lat.append(y) # Testlisten, später ersetzen! speed.append(int(speed1)) height.append(int(height1)) speed1=speed1+50 height1=height1+200 t = t+feinheit # NICHT ENTFERNEN mit Testlisten lat.append(float(ny_lon)) lon.append(float(ny_lat)) speed.append(int(1)) # Test height.append(int(12)) pos = [lon, lat, speed, height] # Positionsdaten (als Liste und DataFrame) df = pd.DataFrame({ 'Längengrad': lon, 'Breitengrad': lat, 'Geschwindigkeit': speed, 'Höhe': height }) # Daten als str mit Maseinheiten an DF angefügt df['Legende1'] = df['Geschwindigkeit'].astype(str) + ' km/h' df['Legende2'] = df['Höhe'].astype(str) + ' m' print(df) # (10) Farben den Höhen zugeordnet colors = ['rosybrown', 'lightcoral', 'indianred', 'brown', 'firebrick', 'maroon', 'darkred', 'peru', 'saddlebrown', 'black'] color_code = [500, 1000, 2000, 4000, 6000, 8000, 10000, 12000, 14000, 16000] df_col = pd.DataFrame({'Farbe': colors, 'Höhe': color_code}) print(df_col) i=0 # Legende (Höhe) patches1 = [] while i<len(colors): patch = mpatches.Patch(color=colors[i], label=color_code[i]) patches1.append(patch) plt.legend(handles=patches1, loc=(0,0), title='Höhe (in m)') i=i+1 # Loop zur Punkteerstellung (später werden hier die Flugdaten eingesetzt) n = 1 while n<len(lon) and pos[2][n]>0 and pos[3][n]>0: c = 0 # Farbe nach Listeneintrag while pos[3][n]>color_code[c]: c=c+1 # Punkte plotten x, y = pos[1][n], pos[0][n] scatter = map.scatter (x, y, color = colors[c], s=(pos[2][n]/10), marker='.', transform=ccrs.PlateCarree()) if feinheit > 5: # Verbindungslinie für grobe Feineiten plt.plot([pos[1][n], pos[1][n-1]], [pos[0][n],pos[0][n-1]], color='gray', linestyle='--', transform=ccrs.PlateCarree()) else: pass plt.pause(0.000001) n = n+1 # Absturzpunkt (funktioniert nicht) if n<len(lon) and (pos[2][n]<=0 or pos[3][n]<=0): x, y = pos[1][n], pos[0][n] scatter = map.scatter (x, y, color = 'red', s=100, marker='x', transform=ccrs.PlateCarree()) plt.text(x, y, 'Absturz', color='black', transform=ccrs.PlateCarree()) else: pass map.set_title('Flugroute NY-FRA') plt.show()