使用Rasterio和Fiona裁剪栅格图像

4
我希望能够使用流域作为边界来剪切栅格数据。我已经尝试使用Fiona和Rasterio进行了实验。
以下是我的代码:
import fiona
import rasterio
from rasterio.rio.clip import clip
with fiona.open("oreto_bacino2.shp", "r") as shapefile:
    geoms = [feature["geometry"] for feature in shapefile]

with rasterio.open("cn.asc") as src:
    out_image, out_transform = clip (geoms, src, crop=True)
    out_meta = src.meta.copy()

out_meta.update({
    "driver": "GTiff",
    "height": out_image.shape[1],
    "width": out_image.shape[2],
    "transform": out_transform
})

with rasterio.open("cn_masked.tif", "w", **out_meta) as dest:
    dest.write(out_image)

这是我得到的错误:

complete_var = '_%s_COMPLETE' % (prog_name.replace('-', '_')).upper()

出现了以下错误:

AttributeError: 'rasterio._io.RasterReader'对象没有'replace'属性

有人知道正确的操作方式吗?

1个回答

1
rio 函数(例如 rasterio.rio.clip.clip)不能作为 Python 函数调用,因为它们已经附加了命令行接口(所有这些装饰器),并且针对从那里获取参数进行了优化。
您可以 查看剪辑函数的代码,以了解它如何实现剪辑并模仿它。它基本上从几何图形的边界创建一个窗口,并使用该窗口从源栅格读取(窗口读取)。
或者您可以遵循 文档中的示例,使用 rasterio.mask.mask(..., crop=True) 不仅将剪辑到边界,还掩蔽了几何图形外部的像素,这可能更接近您想要做的事情。

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