在python底图

时间:2017-02-08 02:06:38

标签: python-3.x matplotlib-basemap

我正试图从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

2 个答案:

答案 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'函数的编码。