In this example, we’ll determine the bounding box of Kenya using the public domain Natural Earth dataset and the Cartopy library.
Rendering just the bounding box of Kenya (with the actual country being highlighted in green) looks like this:
How to get the bounding box
First we use Cartopy’s cartopy.io.shapereader.natural_earth()
function that will automatically download Natural Earth data (if it has already been downloaded, the cached data will be used):
shpfilename = shpreader.natural_earth(resolution='10m', category='cultural', name='admin_0_countries') reader = shpreader.Reader(shpfilename)
Now we can filter for Kenya just like we did in our previous post on How to highlight a specific country using Cartopy:
kenya = [country for country in reader.records() if country.attributes["NAME_LONG"] == "Kenya"][0]
and get the bounding box using kenya.bounds
:
lon_min, lat_min, lon_max, lat_max = kenya.bounds
Complete example code
This code will render the image shown above:
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) # Show only Africa #ax.set_extent([-23, 55, -35, 40]) ax.stock_img() ax.add_feature(cf.COASTLINE, lw=2) # Make figure larger plt.gcf().set_size_inches(20, 10) import cartopy.io.shapereader as shpreader # Read shape file shpfilename = shpreader.natural_earth(resolution='10m', category='cultural', name='admin_0_countries') reader = shpreader.Reader(shpfilename) # Filter for a specific country kenya = [country for country in reader.records() if country.attributes["NAME_LONG"] == "Kenya"][0] # Determine bounding box lon_min, lat_min, lon_max, lat_max = kenya.bounds ax.set_extent([lon_min, lon_max, lat_min, lat_max]) # Display Kenya's shape shape_feature = ShapelyFeature([kenya.geometry], ccrs.PlateCarree(), facecolor="lime", edgecolor='black', lw=1) ax.add_feature(shape_feature) # Save figure as SVG plt.savefig("Kenya-Bounding-Box-Tight.svg")