我正在做一个需要分割地理空间数据的项目。该数据集包括从 1980 年代到 2018 年的全球火灾天气指数 (FWI)——一种火灾危险分类系统。我们希望根据 NUTS(或 GADM)对数据进行分段,以便能够预测并随着时间的推移调查可能的模式。
我们必须处理:
- FWI 数据集(分辨率:0.7 度 ~ 80x80 Km)
- NUTS(和 GADM)形状文件
我们的方法如下:
- 使用 geopandas 导入形状文件
- 使用 xarray 导入 FWI 数据集
- 栅格化 shapefile(改编代码)
- 获取按 NUTS/GADM 分段的 FWI 数据
发现了几个问题:
- 并非感兴趣区域中的所有区域都被正确分割
- 可用的 NUTS/GADM 和 FWI 点之间似乎存在偏移
使用的函数如下:
def transform_from_latlon(lat, lon):
lat = np.asarray(lat)
lon = np.asarray(lon)
trans = Affine.translation(lon[0], lat[0])
scale = Affine.scale(lon[1] - lon[0], lat[1] - lat[0])
return trans * scale
def rasterize(shapes, coords, latitude='lat', longitude='lon',
fill=np.nan, **kwargs):
"""Rasterize a list of (geometry, fill_value) tuples onto the given
xray coordinates. This only works for 1d latitude and longitude
arrays.
"""
transform = transform_from_latlon(coords[latitude], coords[longitude])
out_shape = (len(coords[latitude]), len(coords[longitude]))
#requires the features library from rasterio
raster = features.rasterize(shapes, out_shape=out_shape,
fill=fill, transform=transform, all_touched=True, dtype=float, **kwargs)
spatial_coords = {latitude: coords[latitude], longitude: coords[longitude]}
return xr.DataArray(raster, coords=spatial_coords, dims=(latitude, longitude))
所描述的分割过程导致下图。
可以看出,分段数据和实际地图区域之间似乎存在偏移。此外,还有一些岛屿甚至没有被分割捕获。