画shp用到这俩,我就说一下我发现的一点点区别
cartopy.io.shapereader需要from cartopy.io.shapereader import Reader
读取的时候可以直接Reader('XXX.shp'),画图用ax.add_geometries
这个需要配合
fig = plt.figure(figsize=(12, 8)) # 画布
proj = ccrs.PlateCarree()
ax =plt.subplot(111,projection = proj) # 绘图区
leftlon, rightlon, lowerlat, upperlat = (113.5, 120.0, 38, 43)
ax.set_extent([leftlon, rightlon, lowerlat, upperlat],crs=ccrs.PlateCarree())
ax.add_geometries(Reader(r'XXX.shp').geometries(),ccrs.PlateCarree(),facecolor='none', edgecolor='black',linewidth=1.2,zorder=1)
需要有画布。并且我用的时候一定规定了投影和位置,否则总是报错,并且必须用的ax =plt.subplot,我用ax=fig.add_subplot画图的时候就会报错,我没找原因。
我自己发现的逻辑(可能中间有很多问题):ax.add_geometries必须有ccrs.PlateCarree(),ccrs.PlateCarree()必须前面有projection = proj,projection = proj必须用ax =plt.subplot。我中间只要改了尤其是ax=fig.add_subplot就会报错。
shapefile.Reade需要import shapefile
读取的时候可以shp1=shapefile.Reader('XXX.shp')
shp1=shapefile.Reader('XXX.shp')
border1=shp1.shapes()
for n1 in range(len(shp1.records())):
print (n1)
border_points1 = border1[n1].points
x1,y1 = zip(*border_points1)
ax.plot(x1,y1, color='black',linewidth=0.8)#, crs=ccrs.PlateCarree()
但是shapefile.Reader他有一个问题,就是你画的shp文件他很有可能首尾突然多出一条连线。我没有找到解决方法。所以只能用了ax.add_geometries。