问题描述
运行脚本时出现此错误。 有办法纠正吗?
预先感谢
File "/usr/local/lib/python3.8/dist-packages/cartopy/mpl/geoaxes.py",line 718,in add_geometries
feature = cartopy.feature.ShapelyFeature(geoms,crs,**kwargs)
File "/usr/local/lib/python3.8/dist-packages/cartopy/feature/__init__.py",line 221,in __init__
self._geoms = tuple(geometries)
TypeError: 'polygon' object is not iterable
这里安装了一些python软件包
cartopy==0.18.0
Shapely==1.7.1
matplotlib==3.1.2
scipy==1.3.3
seaborn==0.9.0
def area(ax,iso,clr) :
shp = shpreader.natural_earth(resolution='10m',category='cultural',name='admin_0_countries')
reader = shpreader.Reader(shp)
for n in reader.records() :
if n.attributes['ADM0_A3'] == iso:
ax.add_geometries(n.geometry,ccrs.PlateCarree(),facecolor=clr,alpha = 1.00,linewidth =0.15,edgecolor = "black",label=n.attributes['ADM0_A3'])
return ax
iso3 = ['CMR']
解决方法
代替这些行:
if n.attributes['ADM0_A3'] == iso:
ax.add_geometries(n.geometry,ccrs.PlateCarree(),facecolor=clr,alpha = 1.00,linewidth =0.15,edgecolor = "black",label=n.attributes['ADM0_A3'])
放入这些行。在这里,我们添加了异常处理,然后尝试将'Polygon'对象转换为不会产生错误的'MultiPolygon'对象:
try:
ax.add_geometries(n.geometry,label=n.attributes['ADM0_A3'])
except Exception as e:
#print(e)
import shapely.wkt as wkt
from shapely.geometry import MultiPolygon
list_str_polygons = [str(n.geometry)]
c = MultiPolygon(map(wkt.loads,list_str_polygons))
ax.add_geometries(c,label=n.attributes['ADM0_A3'])
,
方法 add_geometries
将一组形状作为输入。来自documentation:
add_geometries(geoms,crs,**kwargs)[source]
将给定的匀称几何图形(在给定的 crs 中)添加到轴。 参数:
-
geoms
– 一组匀称的几何图形。 -
crs
– 定义了所提供几何的 cartopy CRS。
在绘制单个国家/地区时,您需要提供一个包含单个项目(您要绘制的国家/地区)的可迭代(列表)才能使其工作:
ax.add_geometries(
[n.geometry],alpha=1.00,linewidth=0.15,edgecolor="black",label=n.attributes['ADM0_A3'])