原文:http://blog.straywarrior.com/137.html
Basemap使用自带的shapefile.py处理ESRI的shapefile,但是Basemap自带的shapefile版本过低(1.1.x),其中存在一个bug导致使用Python 3.x版本时无法正确处理Windows-1252编码的二进制文件。典型错误:
File "D:\Python34\lib\site-packages\mpl_toolkits\basemap\shapefile.py", line 58, in u
return v.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 2: invalid continuation byte
使用pip安装pyshp ( pip install pyshp
),或者手动下载最新版本的pyshp,并且将shapefile.py
拷贝到Basemap的目录中(
)。
按照一的方式使用pip安装pyshp,并且修改Basemap的源代码,将init.py中shapefile模块的import语句略作修改,不再使用相对路径的导入方式并删除Basemap目录中的shapefile.py。修改之前为
from . import shapefile as shp
from .shapefile import Reader
import shapefile as shp
from shapefile import Reader # 这里原博主少打了个from
使用方法二的一个好处是,使用pip更新pyshp后不需要再更新Basemap中的shapefile.py