我正试图从here
中读取加拿大地图的边界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
错误:
代码来自这个伟大的tutorial
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 11: invalid continuation byte
答案 0 :(得分:3)
您链接的形状文件实际上包含4个文件(.dbf,.prj,.shp,.shx)。问题是dbf文件(gcma000b11a_e.dbf),它不在utf-8中。它包含法语字符(如é)。您必须将此文件转换为utf-8,然后您的代码才能运行。 转换.dbf文件的简单方法是使用libre office calc打开它,并在导入对话框中选择“Unicode(UTF-8)”。保存文件,m.readshape文件将起作用。
答案 1 :(得分:0)
m.readshapefile('mypaths/gcma000b11a_e/gcma000b11a_e', 'gcma000b11a_e', default_encoding='iso-8859-15')
'default_encoding'变量更改'readshapefile'函数的编码。