Нарисовать карту конкретной страны с помощью cartopy?

Я пробовал этот пример, который отлично работает. Но как я могу сосредоточиться на другой стране, то есть показать только Германию?

исходный код для этого примера

http://scitools.org.uk/cartopy/docs/latest/examples/hurricane_katrina.html пример карты США http://scitools.org.uk/cartopy/docs/latest/_images/hurricane_katrina_01_00.png

Я пробовал некоторые координаты в методе extend (), но мне не удалось выглядеть так карта США. Или мне нужно изменить файл формы?

2 ответов


использование набора данных глобальных административных областей в http://www.gadm.org/country, просто загрузите набор данных Germany и используйте shapereader cartopy (так же, как это сделано в связанном примере).

короткий автономный пример:

import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import matplotlib.pyplot as plt

# Downloaded from http://biogeo.ucdavis.edu/data/gadm2/shp/DEU_adm.zip
fname = '/downloads/DEU/DEU_adm1.shp'

adm1_shapes = list(shpreader.Reader(fname).geometries())

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

plt.title('Deutschland')
ax.coastlines(resolution='10m')

ax.add_geometries(adm1_shapes, ccrs.PlateCarree(),
                  edgecolor='black', facecolor='gray', alpha=0.5)

ax.set_extent([4, 16, 47, 56], ccrs.PlateCarree())

plt.show()

Output from code

HTH


позвольте мне просто привести пример, используя данные из naturalearthdata. Таким образом, это можно распространить на любую страну.

from cartopy.io import shapereader
import numpy as np
import geopandas
import matplotlib.pyplot as plt

import cartopy.crs as ccrs

# get natural earth data (http://www.naturalearthdata.com/)

# get country borders
resolution = '10m'
category = 'cultural'
name = 'admin_0_countries'

shpfilename = shapereader.natural_earth(resolution, category, name)

# read the shapefile using geopandas
df = geopandas.read_file(shpfilename)

# read the german borders
poly = df.loc[df['ADMIN'] == 'Germany']['geometry'].values[0]

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

ax.add_geometries(poly, crs=ccrs.PlateCarree(), facecolor='none', 
                  edgecolor='0.5')

ax.set_extent([5, 16, 46.5, 56], crs=ccrs.PlateCarree())

Это дает следующий рисунок:

Figure Germany