Geodätische Auflösung / Genauigkeit / Glätte in Cartopy erhöhen

English Deutsch

In unserem vorherigen Beitrag haben wir ausführlich gezeigt, wie man eine Geodäte in Cartopy zeichnet. Wie jedoch auf der resultierenden Karte zu sehen ist, ist die geodätische Linie in mehrere deutlich sichtbare Segmente unterteilt:

Cartopy-geodätische Linie mit sichtbaren Segmenten bei Standardauflösung

Um dies zu beheben, müssen wir die ursprüngliche Projektion des Plots ableiten (subclass). In diesem Beispiel leiten wir ccrs.Mollweide() ab:

cartopy_highres_mollweide.py
import cartopy.crs as ccrs

class HighResMollweide(ccrs.Mollweide):
    @property
    def threshold(self): return 100.0

Beachten, dass der Standard-Schwellenwert für die Mollweide-Projektion 100000.0 beträgt – dies kann mit print(ccrs.Mollweide().threshold) überprüft werden

Nun kann diese Projektion in plt.axes() verwendet werden:

cartopy_axes_highres.py
ax = plt.axes(projection=HighResMollweide())

Cartopy-geodätische Linie mit erhöhter Auflösung und glatterer Kurve

Vollständiger Beispielcode

Dieser Code reproduziert das oben gezeigte hochauflösende geodätische Bild:

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

class HighResMollweide(ccrs.Mollweide):
    @property
    def threshold(self): return 100.0

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

# Abbildung als SVG speichern
plt.savefig("Cartopy-Geodetic-HiRes.svg")

Dank an @ajdawson auf StackOverflow für den ursprünglichen Hinweis zur Lösung dieses Problems!


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