如何使用cartopy添加自定义shapefile以进行映射

时间:2014-01-08 08:28:16

标签: cartopy

使用底图我用来添加我的自定义边界shapefile:

map = Basemap(..)
map.readshapefile(file.shp, 'attribute', drawbounds=True)

我如何使用cartopy做同样的事?

我试过了:

ax.add_feature(cfeature.shapereader.Polygon('file.shp'))

但那不起作用..

1 个答案:

答案 0 :(得分:9)

目前还没有ShapefileFeature类(虽然这很容易创建,并且可能很有意义)所以如果你真的想要使用这个功能界面,那么就有一个环节可以跳过:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.io.shapereader import Reader
from cartopy.feature import ShapelyFeature

fname = '50m_glaciated_areas.shp'

ax = plt.axes(projection=ccrs.Robinson())
shape_feature = ShapelyFeature(Reader(fname).geometries(),
                                ccrs.PlateCarree(), facecolor='none')
ax.add_feature(shape_feature)
plt.show()

或者,您可以使用add_geometries方法,该方法没有使用功能接口(因此,将来不会优化从磁盘读取实际绘制的几何图形,因为使用ShapefileFeature类的情况):

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.io.shapereader import Reader

fname = '50m_glaciated_areas.shp'

ax = plt.axes(projection=ccrs.Robinson())
ax.add_geometries(Reader(fname).geometries(),
                  ccrs.PlateCarree(),
                  facecolor='white', hatch='xxxx')
plt.show()

hatched glaciated areas

HTH