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.bounds

Vollstä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")

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