无法使用 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() 调用仍然会失败。

如果其他解决方案不起作用,我建议解决此问题的两个解决方案是:

  1. 在 GIS 编辑器(如 QGis)上打开您的 shapefile,然后再次保存它,确保您 select 将 Encoding 选项设置为 "UTF-8"。之后调用 gpd.read_file("data/zip3.shp").

  2. 应该没有问题
  3. 您还可以使用 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 的包。当我安装包时,代码 运行 正确