2017-02-08 1 views
1

Ich versuche Grenze von Canadian Karte von here‚utf-8‘ Codec kann nicht dekodieren, wenn readshapefile auf Python basemap mit

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() 

zu lesen, bis hier alles funktioniert gut, aber wenn ich versuche hinzufügen Grenze,

m.readshapefile('mypaths/gcma000b11a_e/gcma000b11a_e', 'gcma000b11a_e') 

ich habe dieses utf-8 Fehler:

der Code ist aus dieser großen tutorial

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 11: invalid continuation byte 
+0

Ist die Shapefile eine utf-8 endcodierte Textdatei? Wenn es sich nicht um eine Textdatei handelt, müssen Sie die Datei im Binärmodus ('rb') öffnen, um zu vermeiden, dass Python versucht, Unicode zu dekodieren. Wenn es sich um eine Textdatei handelt, die nicht utf-8 codiert ist, müssen Sie sie mit dem richtigen Codec öffnen. – cco

+0

es ist überhaupt keine Textdatei, das Shapefile ist .shp – enden

Antwort

1

Die von Ihnen verknüpfte Formdatei besteht aus 4 Dateien (.dbf, .prj, .shp, .shx). Das Problem ist die DBF-Datei (gcma000b11a_e.dbf), die nicht in utf-8 ist. Es enthält französische Zeichen (wie é). Sie müssen diese Datei in utf-8 konvertieren, dann funktioniert Ihr Code. Eine einfache Möglichkeit, die .dbf-Datei zu konvertieren, besteht darin, sie mit libre office calc zu öffnen und im Importdialog "Unicode (UTF-8)" auszuwählen. Speichern Sie die Datei, und m.readshapefile wird funktionieren.

Verwandte Themen