Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss2021:project5:flugzeugsimulation:visualisierung

Dies ist eine alte Version des Dokuments!


Visualisierung

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()
ss2021/project5/flugzeugsimulation/visualisierung.1641463450.txt.gz · Zuletzt geändert: 2022/01/06 11:04 von emilyeberhardt