值错误:输入形状与栅格不重叠。 使用Geopandas/Rasterio时,当进行遮罩处理时可能发生CRS错误。

3
我正在使用这个数据集: https://sedac.ciesin.columbia.edu/data/set/gpw-v4-population-density-rev11/data-download (全球格网人口密度)
同时使用以下地图: https://data.humdata.org/dataset/uganda-administrative-boundaries-as-of-17-08-2018 (乌干达行政边界矢量文件)
我已将乌干达地图裁剪到我所需的区域,如下所示:
shape_records = uganda.shapeRecords()
desired_shapes = []

for s in shape_records:
    for x in s.record:
        if 'FORT PORTAL' in str(x):
            desired_shapes.append(s)

将它们加载到一个单一的 geopandas 数据框中:

forgpd=[]
for x in desired_shapes:
    forgpd.append(x.__geo_interface__)

gdf = gpd.GeoDataFrame.from_features(forgpd, crs=4326)

接下来我使用rasterio库读取.tif格式的世界人口文件。

gpw = rio.open('UgandaData/gpw_v4_population_density_rev11_2020_30_sec.tif')
gpw_region = gpw.read(1, window=gpw.window(*box))

我想要进行裁剪,使用以下方法:

from rasterio import mask as msk

region_mask, region_mask_tf = msk.mask(dataset=gpw, shapes=gdf.geometry, all_touched=True, filled=True, crop=True) #error here
region_mask = np.where(region_mask < 0, 0, region_mask).squeeze()

我遇到了以下错误:

WindowError: windows do not intersect
ValueError: Input shapes do not overlap raster.

这是我的课程:

Gridded population of world: CRS.from_epsg(4326)

Uganda(Fort Portal) : 
<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich

是否可能是因为我没有为格网化的世界人口指定WGS 84?如果是这样,如何指定?

1个回答

2
问题是shapefile使用的是UTM投影坐标系,而栅格数据则采用了地理坐标系(经纬度)。即使您将epsg:4326 CRS分配给gdf,它的坐标仍然是UTM。您可以手动转换这些坐标,例如这样

否则,您可以使用QGIS将全球栅格数据重新投影为EPSG:21096(该投影方式是根据乌干达shapefile的UTM区域估算得出的),或者使用gdalwarp工具。
在修改栅格数据投影后,您的其余代码便可正常运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接