Bounding-Box eines Landes mit Natural-Earth-Daten und Cartopy ermitteln
English
Deutsch
In diesem Beispiel ermitteln wir die Bounding-Box von Kenia mit dem gemeinfreien Natural-Earth-Datensatz und der Cartopy-Bibliothek.
Die Darstellung nur der Bounding-Box von Kenia (mit dem eigentlichen Land in Grün hervorgehoben) sieht so aus:
So ermittelt man die Bounding-Box
Zuerst verwenden wir Cartopys Funktion cartopy.io.shapereader.natural_earth(), die Natural-Earth-Daten automatisch herunterlädt (falls bereits heruntergeladen, werden die zwischengespeicherten Daten verwendet):
kenya_bbox_reader.py
shpfilename = shpreader.natural_earth(resolution='10m',
category='cultural',
name='admin_0_countries')
reader = shpreader.Reader(shpfilename)Nun kann nach Kenia gefiltert werden, wie in unserem vorherigen Beitrag Ein bestimmtes Land mit Cartopy hervorheben gezeigt:
kenya_bbox_select.py
kenya = [country for country in reader.records() if country.attributes["NAME_LONG"] == "Kenya"][0]und die Bounding-Box mit kenya.bounds abrufen:
kenya_bbox_bounds.py
lon_min, lat_min, lon_max, lat_max = kenya.boundsVollständiger Beispielcode
Dieser Code erzeugt das oben gezeigte Bild:
kenya_bbox_complete.py
import cartopy.crs as ccrs
import cartopy.feature as cf
from cartopy.feature import ShapelyFeature
from matplotlib import pyplot as plt
proj = ccrs.PlateCarree()
ax = plt.axes(projection=proj)
# Nur Afrika anzeigen
#ax.set_extent([-23, 55, -35, 40])
ax.stock_img()
ax.add_feature(cf.COASTLINE, lw=2)
# Abbildung vergrößern
plt.gcf().set_size_inches(20, 10)
import cartopy.io.shapereader as shpreader
# Shape-Datei lesen
shpfilename = shpreader.natural_earth(resolution='10m',
category='cultural',
name='admin_0_countries')
reader = shpreader.Reader(shpfilename)
# Nach bestimmtem Land filtern
kenya = [country for country in reader.records() if country.attributes["NAME_LONG"] == "Kenya"][0]
# Bounding-Box ermitteln
lon_min, lat_min, lon_max, lat_max = kenya.bounds
ax.set_extent([lon_min, lon_max, lat_min, lat_max])
# Kenias Form anzeigen
shape_feature = ShapelyFeature([kenya.geometry], ccrs.PlateCarree(), facecolor="lime", edgecolor='black', lw=1)
ax.add_feature(shape_feature)
# Abbildung als SVG speichern
plt.savefig("Kenya-Bounding-Box-Tight.svg")If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow