Cartopy 无法读取美国人口普查文件

Cartopy cannot read US census files

我正在尝试将美国各县的形状输入 Python。

我的方法是从 US census 手动下载形状文件,然后使用

导入它们
from cartopy.io import shapereader
shapereader.Reader('shapefiles/cb_2014_us_county_20m.shp')

但是对于不同的分辨率,我总是收到相同的错误:

ValueError: Unsupported shape type: 15

谷歌搜索此错误一无所获 - 这是什么意思,我该如何解决?

这似乎是 Cartopy 中的一个限制。如果查看完整回溯中引用的源文件,可以看到在 Reader class 中有以下代码:

    shapeType = reader.shapeType
    self._geometry_factory = GEOMETRY_FACTORIES.get(shapeType)
    if self._geometry_factory is None:
        raise ValueError('Unsupported shape type: %s' % shapeType)

如果我们查看 GEOMETRY_FACTORIES 的值,我们会看到:

GEOMETRY_FACTORIES = {
    shapefile.POINT: _create_point,
    shapefile.POLYLINE: _create_polyline,
    shapefile.POLYGON: _create_polygon,
}

因此,Cartopy 仅适用于 POINT(类型 1)、POLYLINE(类型 3)和 POLYGON(类型 5)形状。

要使用 Cartopy 读取这些文件,您需要将 POLYGONZ 形状(类型 15)转换为 POLYGON 形状。我相信您可以使用 gdal 包中的 ogr2ogr 工具来做到这一点:

ogr2ogr -nlt POLYGON cb_2014_us_county_20m-POLYGON.shp cb_2014_us_county_20m.shp