首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Rasterio和Fiona裁剪光栅

用Rasterio和Fiona裁剪光栅
EN

Stack Overflow用户
提问于 2018-03-09 08:45:32
回答 1查看 4.8K关注 0票数 4

我想用分水岭作为边界来剪辑光栅数据。我用Fiona和Rasterio试过了。

这里有我的代码:

代码语言:javascript
复制
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)

,这是我所犯的错误:

代码语言:javascript
复制
complete_var = '_%s_COMPLETE' % (prog_name.replace('-', '_')).upper()

这会引发此错误:

AttributeError:'rasterio._io.RasterReader‘对象没有属性’替换‘

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

EN

回答 1

Stack Overflow用户

发布于 2018-11-06 21:28:20

rio函数(如rasterio.rio.clip.clip函数)不能作为rasterio.rio.clip.clip函数调用,因为它们已经附加了一个命令行接口(所有这些装饰器),并且为从那里获取参数进行了优化。

您可以使用查看剪辑函数的代码来查看它是如何实现剪裁和模仿的。它基本上是从几何图形的边界创建一个窗口,并使用该窗口从源栅格读取(窗口读取)。

或者,您可以遵循使用文档中的示例rasterio.mask.mask(..., crop=True),不仅要剪辑到边界,还可以屏蔽几何之外的像素,这可能更接近您想要做的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49189749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档