>我正在尝试从这里读取加拿大地图的边界
import matplotlib.pyplot as plt
import matplotlib.cm
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.colors import Normalize
m = Basemap(resolution='c', # c, l, i, h, f or None
projection='merc',
lat_0=56.1304, lon_0=106.3468,
llcrnrlon=-141.0, llcrnrlat= 41.2, urcrnrlon=-52.3, urcrnrlat=69.8)
m.drawmapboundary(fill_color='#46bcec')
m.fillcontinents(color='#f2f2f2',lake_color='#46bcec')
m.drawcoastlines()
直到这里一切正常,但是当我尝试添加边界时,
m.readshapefile('mypaths/gcma000b11a_e/gcma000b11a_e', 'gcma000b11a_e')
我有这个utf-8
错误:
代码来自这个很棒的教程
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 11: invalid continuation byte
您链接的形状文件实际上由 4 个文件组成(.dbf、.prj、.shp、.shx(。问题是 dbf 文件 (gcma000b11a_e.dbf(,它不是 utf-8。它包含法语字符(如é(。您必须将此文件转换为 utf-8,然后您的代码就可以工作了。转换.dbf文件的一种简单方法是使用 libre office calc 打开它,然后在导入对话框中选择"Unicode (UTF-8("。保存文件,m.readshapefile将起作用。
m.readshapefile('mypaths/gcma000b11a_e/gcma000b11a_e',
'gcma000b11a_e',
default_encoding='iso-8859-15')
default_encoding
变量更改readshapefile
函数的编码。