Gerade Linie zwischen zwei Koordinaten mit Cartopy zeichnen
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:
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
plt.axes(projection=ccrs.PlateCarree())erstellt wurde, muss die Linie mit transform=ccrs.PlateCarree() gezeichnet werden
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:
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!
Vollständiges Beispiel
Dieser Code reproduziert das oben gezeigte Bild:
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")