无法使用 GeoPandas 打开形状文件
can't open shape file with GeoPandas
我似乎无法打开从 (http://www.vdstech.com/usa-data.aspx)
下载的 zip3.zip 形状文件
这是我的代码:
import geopandas as gpd
data = gpd.read_file("data/zip3.shp")
这给了我错误:
CPLE_AppDefinedError: b'Recode from CP437 to UTF-8 failed with the error: "Invalid argument".'
看起来 shapefile
没有关联的 cpg 指定 .dbf
文件的编码,然后退回到尝试使用您的默认系统编码也不起作用.您应该可以通过以下方式打开它:
data = gpd.read_file("data/zip3.shp", encoding="utf-8")
geopandas
依赖 fiona
读取 shapefile,您可能需要升级 fiona
版本才能正常工作;查看一些讨论 here
根据我的 on 问题,您的数据集似乎包含非 UTF 字符。如果您遇到类似的问题,使用 encoding-"utf-8"
可能无济于事,因为 Fiona 的 open()
调用仍然会失败。
如果其他解决方案不起作用,我建议解决此问题的两个解决方案是:
在 GIS 编辑器(如 QGis)上打开您的 shapefile,然后再次保存它,确保您 select 将 Encoding
选项设置为 "UTF-8"。之后调用 gpd.read_file("data/zip3.shp")
.
应该没有问题
您还可以使用 GDAL 在 Python 中实现这种格式更改,方法是读取您的 shapefile 并再次保存。这将有效地将编码更改为 UTF-8,因为这是 CreateDataSource()
方法的 docs 中指示的默认编码。为此,请尝试以下代码片段:
from osgeo import ogr
driver = ogr.GetDriverByName("ESRI Shapefile")
ds = driver.Open("nbac_2016_r2_20170707_1114.shp", 0) #open your shapefile
#get its layer
layer = ds.GetLayer()
#create new shapefile to convert
ds2 = driver.CreateDataSource('convertedShape.shp')
#create a Polygon layer, as the one your Shapefile has
layer2 = ds2.CreateLayer('', None, ogr.wkbPolygon)
#iterate over all features of your original shapefile
for feature in layer:
#and create a new feature on your converted shapefile with those features
layer2.CreateFeature(feature)
#proper closing
ds = layer = ds2 = layer2 = None
由于您可能安装了 GDAL,我建议使用 CLI 将文件转换为 UTF-8:
ogr2ogr output.shp input.shp -lco ENCODING=UTF-8
对我来说就像一个魅力。它比 QGIS 快得多,并且可以在集群环境中使用。我也发布了这个答案 。在 geopandas
中指定编码对我不起作用。
可能该文件依赖于其他文件。
我遇到了同样的问题,当我复制此 shapefile
依赖的其他文件时,代码 运行 正确但要求安装另一个名为 descartes
的包。当我安装包时,代码 运行 正确
我似乎无法打开从 (http://www.vdstech.com/usa-data.aspx)
下载的 zip3.zip 形状文件这是我的代码:
import geopandas as gpd
data = gpd.read_file("data/zip3.shp")
这给了我错误:
CPLE_AppDefinedError: b'Recode from CP437 to UTF-8 failed with the error: "Invalid argument".'
看起来 shapefile
没有关联的 cpg 指定 .dbf
文件的编码,然后退回到尝试使用您的默认系统编码也不起作用.您应该可以通过以下方式打开它:
data = gpd.read_file("data/zip3.shp", encoding="utf-8")
geopandas
依赖 fiona
读取 shapefile,您可能需要升级 fiona
版本才能正常工作;查看一些讨论 here
根据我的 encoding-"utf-8"
可能无济于事,因为 Fiona 的 open()
调用仍然会失败。
如果其他解决方案不起作用,我建议解决此问题的两个解决方案是:
在 GIS 编辑器(如 QGis)上打开您的 shapefile,然后再次保存它,确保您 select 将
Encoding
选项设置为 "UTF-8"。之后调用gpd.read_file("data/zip3.shp")
. 应该没有问题
您还可以使用 GDAL 在 Python 中实现这种格式更改,方法是读取您的 shapefile 并再次保存。这将有效地将编码更改为 UTF-8,因为这是
CreateDataSource()
方法的 docs 中指示的默认编码。为此,请尝试以下代码片段:from osgeo import ogr driver = ogr.GetDriverByName("ESRI Shapefile") ds = driver.Open("nbac_2016_r2_20170707_1114.shp", 0) #open your shapefile #get its layer layer = ds.GetLayer() #create new shapefile to convert ds2 = driver.CreateDataSource('convertedShape.shp') #create a Polygon layer, as the one your Shapefile has layer2 = ds2.CreateLayer('', None, ogr.wkbPolygon) #iterate over all features of your original shapefile for feature in layer: #and create a new feature on your converted shapefile with those features layer2.CreateFeature(feature) #proper closing ds = layer = ds2 = layer2 = None
由于您可能安装了 GDAL,我建议使用 CLI 将文件转换为 UTF-8:
ogr2ogr output.shp input.shp -lco ENCODING=UTF-8
对我来说就像一个魅力。它比 QGIS 快得多,并且可以在集群环境中使用。我也发布了这个答案 geopandas
中指定编码对我不起作用。
可能该文件依赖于其他文件。
我遇到了同样的问题,当我复制此 shapefile
依赖的其他文件时,代码 运行 正确但要求安装另一个名为 descartes
的包。当我安装包时,代码 运行 正确