我正在使用 rasterio 将点的 geopandas 数据帧转换为 geotif 栅格。 为此,我正在使用这个 python 代码:
with rasterio.open("somepath/rasterized.tif", 'w+', **meta) as out:
out.nodata = 0
out_arr = out.read(1)
# this is where we create a generator of geom, value pairs to use in rasterizing
shapes = ((geom, value * 2) for geom, value in zip(gdf.geometry, gdf["PositionConfidence"]))
burned = features.rasterize(shapes=shapes, fill=0, out=out_arr, transform=out.transform)
out.write_band(1, burned)
out.write_band(2, burned)
out.write_band(3, burned)
out_arr1 = out.read(1)
代码不仅向栅格写入固定值,而且还向栅格写入基于要转换的点的值。
问题在于每个光栅像素有很多点。使用上述方法,仅将单个点值刻录到像素。 我正在寻找的是将每个像素的所有点值的平均值刻录到给定像素。
感谢您的帮助
我找到了一些想法:
首先我们将所有点按像素排序放入字典中。然后我们计算该像素中所有点所需的值,在本例中是某个值的平均值。现在我们将此值分配给具有像素坐标的新点,并使用它代替旧点。
令人惊讶的是,“MEAN”合并算法在 GDAL 或 rasterio 中尚不可用,但如果没有向这些项目之一提交 PR,另一种方法如下:
count
使用 rasterio.features.rasterize
ADD
创建 MergeAlg
栅格。sum
的实际几何值创建另一个栅格,该值也使用 ADD
MergeAlg
。sum
/ count
即可得到每像素的平均值。