I downloaded a map from US Census in shapefile format. It has all the required information that I need, but for som reason there's a specific map that I need it's giving me this error:
Traceback (most recent call last):
File "C:/Users/Leb/Desktop/Python/Kaggle/mapp.py", line 17, in <module>
shp_info = m.readshapefile('gis/cb_2014_us_state_5m', 'states', drawbounds=True)
File "C:\Program Files\Python 3.5\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 2162, in readshapefile
raise ValueError('readshapefile can only handle 2D shape types')
ValueError: readshapefile can only handle 2D shape types
More specifically these set of files give me the error. As you can see, I downloaded the 5m
resolution shapefile.
This is the code that I'm using to execute the command:
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap as Basemap
m = Basemap(llcrnrlon=-119, llcrnrlat=22, urcrnrlon=-64, urcrnrlat=49,
projection='lcc', lat_1=33, lat_2=45, lon_0=-95)
shp_info = m.readshapefile('gis/cb_2014_us_state_5m', 'states', drawbounds=True)
Questions:
- Do I need to convert this through
Fiona
? orArcGIS
? in order to change it to the proper format. - Is there a better alternative to
basemap
?
The problem is that these cb_ files are lists of shapely 3D PolygonZ objects, and readshapefile needs them to be 2D Polygon objects, even if the Z dimension is all 0's, as is the case with these
cb_*
files. You can convert them by stripping the Z dimension.I started to use geopandas as a wrapper around basemap and other utilities and this is how I converted them:
Install GeoPandas with
pip install geopandas
. I think that should be it!