ValueError: Input shapes do not overlap raster. Geopandas/Rasterio, possible CRS error when masking
ValueError: Input shapes do not overlap raster. Geopandas/Rasterio, possible CRS error when masking
我正在使用这个数据集:
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
(乌干达行政边界 shapefile)
我已经将乌干达地图裁剪到我需要的区域,像这样:
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)
然后我正在阅读 .tif
世界人口文件 rasterio
。
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.
这是我的crs:
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?如果是这样,这是如何指定的?
我正在使用这个数据集: 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 (乌干达行政边界 shapefile)
我已经将乌干达地图裁剪到我需要的区域,像这样:
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)
然后我正在阅读 .tif
世界人口文件 rasterio
。
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.
这是我的crs:
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?如果是这样,这是如何指定的?