Python: Grundlegende Verwendung von Cartopy


Vorwort

Das Zeichnen der Basiskarte häufig verwendeter Karten wird im Allgemeinen vom Grundkarten- oder Kartuschenmodul vervollständigt. Da die Grundkartenbibliothek ein auf Python2 basierendes Modul ist, wird sie derzeit nicht entwickelt und verwaltet. Daher werden einige grundlegende Funktionen des Kartuschenmoduls kurz vorgestellt.

1. Grundlegende Einführung

Importieren Sie zunächst die entsprechenden Module.

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter

Führen Sie zuerst die Parameterprojektion ein. Dieser Befehl kann mit ccrs zusammenarbeiten, um den Projektionstyp festzulegen. Hier nehmen wir den quadratischen Projektionsbefehl als Beispiel. Der Parameter central_longitude ist die Mittelposition der Projektion. Die zentrale Einstellung entspricht den Grundkarteneinstellungsregeln. Einzelheiten finden Sie im vorherigen Artikel.

ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=0))

Zeichnen Sie nach dem Festlegen des Zeichnungstyps jede Feature-Menge der Karte. Der Code lautet wie folgt:

#ax.add_feature(cfeature.LAKES.with_scale(scale))
ax.add_feature(cfeature.OCEAN.with_scale(scale))
#ax.add_feature(cfeature.RIVERS.with_scale(scale))
#ax.add_feature(cfeature.LAND.with_scale(scale),lw=0.5)
ax.add_feature(cfeature.COASTLINE.with_scale(scale),lw=2)

Die Parameterskala ist die Kartenauflösung, unterstützt derzeit 10 m, 50 m, 110 m und der Parameter lw ist die Liniendicke. Die Küste und der Ozean werden hier gezeichnet und die Renderings lauten wie folgt:
Fügen Sie hier eine Bildbeschreibung ein
Nach dem Zeichnen wird es als Karte verwendet. Breiten- und Längengrade sind natürlich unverzichtbar. Stellen Sie in diesem Modul gleichzeitig die Achsenbeschriftung ein, um die Beschriftungsskala zu ändern. Die spezifische Form lautet wie folgt:

ax.set_xticks(np.arange(0,361,40), crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(-90,90+30,30), crs=ccrs.PlateCarree())
#zero_direction_label用来设置经度的0度加不加E和W
lon_formatter = LongitudeFormatter(zero_direction_label=False)
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)

Sie können das Effektdiagramm wie folgt sehen:
Fügen Sie hier eine Bildbeschreibung ein
Wenn Sie die Dicke der Koordinatenachse ändern möchten, können Sie natürlich einen Befehl einführen.

ax.outline_patch.set_visible(False)
ax.spines['bottom'].set_visible(True)
ax.spines['left'].set_visible(True)
ax.spines['right'].set_visible(True)
ax.spines['top'].set_visible(True)
ax.spines['bottom'].set_linewidth(2.5);###设置底部坐标轴的粗细
ax.spines['left'].set_linewidth(2.5);####设置左边坐标轴的粗细
ax.spines['right'].set_linewidth(2.5);###设置右边坐标轴的粗细
ax.spines['top'].set_linewidth(2.5);####设置上部坐标轴的粗细
   

Unter diesem Modul sollte sich der Befehl zur Steuerung der Koordinatenachse von dem herkömmlichen unterscheiden. Schalten Sie also zuerst die Steuerung aus und dann die allgemeinen Achseneinstellungen ein.

2. Zeichnen von regionalen Karten

Wenn wir in einem kleinen Gebiet lernen, müssen wir eine Gebietskarte zeichnen. An dieser Stelle können wir den Befehl einführen:

ax.set_extent(box,crs=ccrs.PlateCarree())

Das Feld ist der Zeichenbereich und crs ist der Projektionstyp. Andere Befehle bleiben grundsätzlich unverändert. Stellen Sie die Box auf [40,180,0,90], um das Effektbild wie folgt zu erhalten:
Fügen Sie hier eine Bildbeschreibung ein

um zusammenzufassen

Für die Bequemlichkeit der Leser habe ich eine Funktion zum Zeichnen einer Karte geschrieben, die Sie direkt aufrufen können, wenn Sie sie verwenden. Das Beispiel hier ist eine quadratische Projektion, wenn Sie andere Projektionen zeichnen möchten. Es müssen nur einige Parameter der Funktion geändert werden. Code wie folgt anzeigen:

def map_make(scale,box,xstep,ystep):
    ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=180))
    a = (box[1]-box[0])//xstep
    x_start = box[1] - a*xstep
    a = (box[3]-box[2])//ystep
    y_start = box[3] - a*ystep
    ax.set_extent(box,crs=ccrs.PlateCarree())
    #ax.add_feature(cfeature.LAKES.with_scale(scale))
    #ax.add_feature(cfeature.OCEAN.with_scale(scale))
    #ax.add_feature(cfeature.RIVERS.with_scale(scale))
    #ax.add_feature(cfeature.LAND.with_scale(scale),lw=0.5)
    ax.add_feature(cfeature.COASTLINE.with_scale(scale),lw=2)
    
    ax.set_xticks(np.arange(x_start,box[1]+xstep,xstep), crs=ccrs.PlateCarree())
    ax.set_yticks(np.arange(y_start,box[3]+ystep,ystep), crs=ccrs.PlateCarree())
    #zero_direction_label用来设置经度的0度加不加E和W
    lon_formatter = LongitudeFormatter(zero_direction_label=False)
    lat_formatter = LatitudeFormatter()
    ax.xaxis.set_major_formatter(lon_formatter)
    ax.yaxis.set_major_formatter(lat_formatter)
    #添加网格线
    ax.grid()
    
    ax.outline_patch.set_visible(False)
    ax.spines['bottom'].set_visible(True)
    ax.spines['left'].set_visible(True)
    ax.spines['right'].set_visible(True)
    ax.spines['top'].set_visible(True)
    ax.spines['bottom'].set_linewidth(2.5);###设置底部坐标轴的粗细
    ax.spines['left'].set_linewidth(2.5);####设置左边坐标轴的粗细
    ax.spines['right'].set_linewidth(2.5);###设置右边坐标轴的粗细
    ax.spines['top'].set_linewidth(2.5);####设置上部坐标轴的粗细
    
    return ax

Ich denke du magst

Origin blog.csdn.net/weixin_49284189/article/details/109376547
Empfohlen
Rangfolge