Gerade Linie zwischen zwei Koordinaten mit Cartopy zeichnen

English Deutsch

In unseren vorherigen Beiträgen Minimalbeispiel für geodätische Linie mit Cartopy und Geodätische Auflösung / Genauigkeit / Glätte in Cartopy erhöhen haben wir gezeigt, wie man eine geodätische Linie auf einer Karte erstellt. Während eine Geodäte als die kürzeste Linie auf der Erdoberfläche definiert ist, ist sie keine gerade Linie in einer Kartenprojektion.

Um eine geodätische Linie zu zeichnen, verwenden wir:

plot_line_cartopy.py
plt.plot([lon1, lon2], [lat1, lat2], transform=ccrs.Geodetic())

Um eine gerade Linie zu zeichnen, muss dieselbe Projektion verwendet werden wie bei der Kartenerstellung anstelle von transform=ccrs.Geodetic().

Wenn die Karte beispielsweise mit

create_axes.py
plt.axes(projection=ccrs.PlateCarree())

erstellt wurde, muss die Linie mit transform=ccrs.PlateCarree() gezeichnet werden

plot_line_platecarree.py
plt.plot([lon1, lon2], [lat1, lat2], transform=ccrs.PlateCarree())

Um Fehler zu vermeiden, wird dringend empfohlen, nur eine Instanz der Projektion zu verwenden und einer gemeinsamen Variable zuzuweisen, zum Beispiel:

cartopy_example.py
proj = ccrs.PlateCarree()
ax = plt.axes(projection=proj)
plt.plot([-75, 77.23], [43, 28.61], transform=proj)

Beachten, dass dies aus derzeit unbekannten Gründen nur bei einigen Projektionen funktioniert. ccrs.PlateCarree() und ccrs.Miller() funktionieren, aber ccrs.Mollweide() funktioniert nicht! Cartopy-Karte mit gerader Linie zwischen zwei Koordinaten in PlateCarree-Projektion

Vollständiges Beispiel

Dieser Code reproduziert das oben gezeigte Bild:

cartopy_full_example.py
import cartopy.crs as ccrs
import cartopy.feature as cf
from matplotlib import pyplot as plt

proj = ccrs.PlateCarree()
ax = plt.axes(projection=proj)
ax.stock_img()
ax.add_feature(cf.BORDERS)
# Gerade Linie zwischen zwei Punkten hinzufügen
# Format: plot([lon1, lon2], [lat1, lat2])
plt.plot([-75, 77.23], [43, 28.61], linestyle='--',
         color='blue', linewidth=8,
         transform=proj)
# Abbildung vergrößern
plt.gcf().set_size_inches(20, 10)

# Abbildung als SVG speichern
plt.savefig("Cartopy-Straight-Line-PlateCarree.svg")

Check out similar posts by category: Cartopy, Geography, Python