我想使用分水岭作为边界来裁剪栅格数据。我已经通过使用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”


有人知道我进行手术的正确方法吗?

最佳答案

rio这样的rasterio.rio.clip.clip函数不能称为Python函数,因为它们已经附加了命令行界面(所有这些装饰器),并且已针对从那里获取其参数进行了优化。

您可以改为look into the code of the clip function来查看它如何实现剪切并模仿它。基本上,它从几何图形的边界创建一个窗口,并使用该窗口从源栅格进行读取(窗口读取)。

或者,您可以遵循使用rasterio.mask.mask(..., crop=True)example from the docs,不仅可以裁剪边界,而且可以遮蔽几何图形外部的像素,这甚至可能更接近于您要执行的操作。

关于python - 使用Rasterio和Fiona剪切栅格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49189749/

10-12 21:22