使用Python, 用shp文件边界裁剪tif文件

在Python中, 用shp文件边界裁剪tif文件

from osgeo import gdal
import os

gdal.PushErrorHandler("CPLQuietErrorHandler")

def subset_by_shp(shape_fn, raster_fn, raster_out):
    """
    根据 shapefile 对栅格文件进行裁剪并输出结果

    :param shape_fn: shapefile 文件路径
    :param raster_fn: 栅格数据文件路径
    :param raster_out: 输出结果文件路径
    """
    if not os.path.exists(shape_fn):
        print(f"Shapefile 文件不存在: {shape_fn}")
        return
    if not os.path.exists(raster_fn):
        print(f"栅格文件不存在: {raster_fn}")
        return

    try:
        result = gdal.Warp(
            raster_out,
            raster_fn,
            format='GTiff',
            cutlineDSName=shape_fn,
            cropToCutline=True
        )
        if result is None:
            raise RuntimeError(gdal.GetLastErrorMsg())
        else:
            print(f'裁剪完成: {raster_out}')
    except Exception as e:
        print(f"裁剪失败: {e}")
    finally:
        result = None

if __name__ == "__main__":
    # 待裁剪的栅格文件路径
    raster = r'C:\Users\xxx\Desktop\todo-tif\k.tif'
    # shapefile 文件路径
    shp = r'C:\Users\xxx\Desktop\shp\1000.shp'
    # 输出裁剪后的栅格文件路径
    raster_out = r'C:\Users\xxx\Desktop\ok-tif\k.tif'
    
    subset_by_shp(shp, raster, raster_out)

### 使用 Shapefile 裁剪 GeoTIFF 文件的方法 在 ArcGIS使用 Shapefile (shp) 对 GeoTIFF 图像进行裁剪是一项常见的地理空间数据分析任务。以下是具体实现方法: #### 方法一:通过 ArcToolbox 工具完成裁剪 ArcGIS 提供了一个名为“Extract by Mask”的工具,该工具允许用户基于矢量图层(如 shp 文件)作为掩膜来提取栅格数据的一部分[^1]。 - 打开 ArcMap 或 ArcCatalog 并加载待裁剪的 GeoTIFF 和用于定义裁剪范围的 Shapefile。 - 寻找并启动 Spatial Analyst Tools -> Extraction 下面的 Extract by Mask 工具。 - 设置输入栅格为需要被裁剪TIFF 文件,并指定 mask 层即为之前准备好的 SHP 文件。 - 运行此工具后即可得到按照 shapefile 边界裁切后的新的 geotiff 输出成果。 #### 方法二:借助 Python GDAL 库执行裁剪操作 对于熟悉编程环境或者偏好自动化流程的情况而言,也可以采用 Python 结合 GDAL/OGR 来达成相同目的。下面给出了一段简单的 python 代码片段用来演示这一过程[^3]: ```python from osgeo import gdal result = gdal.Warp('masked.tif', 'input.tif', cutlineDSName='input.shp') result.FlushCache() del result ``` 这段脚本会读取 `input.tif` 栅格文件以及 `input.shp` 形状文件作为切割线数据源,最终生成一个新的经过裁剪处理过的 `masked.tif` 文件保存至磁盘上。 #### 方法三:利用 ModelBuilder 实现批量处理 如果面对多个 nc 文件或者其他类型的大量栅格数据集时,则建议尝试运用 ArcGIS 的模型构建器(ModelBuilder),它可以创建图形化的工作流来进行重复性的 GIS 数据预处理任务,比如转换和裁剪等动作。这不仅提高了工作效率还减少了人为错误的发生概率[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yfs1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值