普通视图

发现新文章,点击刷新页面。
昨天 — 2026年1月21日首页

GDAL 实现影像裁剪

作者 GIS之路
2026年1月21日 21:08

^ 关注我,带你一起学GIS ^

前言

GDAL作为地理空间数据处理的核心工具,提供了多种影像裁剪方式,可以方便的提取目标区域遥感影像数据,为数据处理和分析提供高效服务。

在地理空间数据处理中,影像裁剪是基础且高频的操作,其核心目标是从整幅遥感影像或栅格数据中提取指定地理范围的子集,以降低数据体量、聚焦研究区域,满足专题分析、地图制作、数据共享等多样化业务需求。

由于本文由一些前置知识,在正式开始之前,需要你掌握一定的Python开发基础和GDAL的基本概念。在之前的文章中讲解了如何使用GDAL或者ogr2ogr工具将txt以及csv文本数据转换为Shp格式,可以作为基础入门学习。

本篇教程在之前一系列文章的基础上讲解如何使用GDAL 实现影像裁剪

如果你还没有看过,建议从以上内容开始。

1. 开发环境

本文使用如下开发环境,以供参考。

时间:2026年

系统:Windows 11

Python:3.11.11

GDAL:3.11.1

2. 数据准备

俗话说巧妇难为无米之炊,数据就是软件的基石,没有数据,再美好的设想都是空中楼阁。因此,第一步需要下载遥感影像数据。

但是,影像数据在哪里下载呢?别着急,本文都给你整理好了。

数据下载可参考文章:GIS 影像数据源介绍

如下,这是我在【地理空间数据云】平台下载的landsat8遥感影像。

3. 导入依赖

GeoTIFF作为一种栅格数据格式,可以使用GDAL直接进行处理,以实现影像数据的裁剪操作。

在影像裁剪开始之前,需要检查数据路径是否正确,所以导入os模块。

from osgeo import gdal
import os

4. 影像裁剪

定义一个方法image_clip(output_file,input_file,clip_file)用于实现影像数据裁剪。

本研究采用矢量范围提取影像区域,实现栅格数据按掩膜裁剪功能。

"""
说明:GDAL 影像裁剪
参数:
    -output_file:输出裁剪后的影像
    -input_files:输入需要裁剪的的影像
    -clip_file:用于影像裁剪的矢量文件
"""
def image_clip(output_file,input_file,clip_file):

在数据裁剪之前,使用方法checkFilePath检查数据路径。

# 检查文件是否存在
checkFilePath(input_file)
"""
说明:检查文件路径是否正常
参数:
-filePath:文件数据路径
"""
def checkFilePath(filePath):
    if os.path.exists(filePath):
        print(f"{filePath} 文件数据路径存在")
    else:
        print(f"{filePath} 文件数据路径不存在,请检查!")

使用gdal.WarpOptions选项定义裁剪参数,其中参数cutlineDSName为用于提取范围的矢量数据源,cropToCutline为布尔类型,表示是否使用裁剪线作为输出边界,dstNodata为设置NoData值。

# 定义裁剪参数
options = gdal.WarpOptions(
    cutlineDSName=clip_file,
    cropToCutline=True,
    dstNodata=0
)

这个方法参数非常多,感兴趣的同学可以到官网查看。

https://gdal.org/en/stable/api/python/utilities.html#osgeo.gdal.WarpOptions

调用gdal对象方法Warp进行影像裁剪,该函数第一个参数destNameOrDestDS 为输出数据集名称或者数据源,第二个参数srcDSOrSrcDSTab为源数据,第三个参数options为可选项描述,用于定义影像裁剪信息。

gdal.Warp(output_file,input_file,options=options)

main函数中调用合并方法。

if __name__ == "__main__":

    input_file"E:\ArcGIS\band_432.tif"

    output_file"E:\ArcGIS\clip_result.tif"

    clip_file"E:\data\target.shp"

    image_clip(output_file,input_file,clip_file)

注:GDAL某些参数是真难记,难写啊,比如WarpOptions对象。

GIS之路

图片效果

OpenLayers示例数据下载,请在公众号后台回复:vector

全国信息化工程师-GIS 应用水平考试资料,请在公众号后台回复:GIS考试

GIS之路 公众号已经接入了智能 助手,可以在对话框进行提问,也可以直接搜索历史文章进行查看。

都看到这了,不要忘记点赞、收藏 + 关注

本号不定时更新有关 GIS开发 相关内容,欢迎关注 


    

GeoTools 开发合集(全)

OpenLayers 开发合集

GDAL 实现影像合并

小小声说一下GDAL的官方API接口

《云南省加快构建现代化产业体系推进产业强省建设行动计划》发布

ArcGIS Pro 添加底图的方式

为什么每次打开 ArcGIS Pro 页面加载都如此缓慢?

ArcGIS 波段合成操作

自然资源部党组关于苗泽等4名同志职务任免的通知

GDAL 创建矢量图层的两种方式

GDAL 实现矢量数据转换处理(全)

GDAL 实现投影转换

GDAL 实现矢量合并

国产版的Google Earth,吉林一号卫星App“共生地球”来了

2026年全国自然资源工作会议召开

GDAL 实现矢量裁剪

GDAL 实现空间分析

GDAL 实现影像合并

作者 GIS之路
2026年1月20日 23:42

^ 关注我,带你一起学GIS ^

前言

GDAL作为地理空间数据处理的核心工具,其影像合并功能为多源栅格数据的集成与分析提供了高效、灵活的解决方案。无论是遥感影像镶嵌、地图瓦片拼接,还是时间序列数据的融合,该功能能够帮助用户将分散的影像片段整合为具有统一地理参考和连贯信息表达的完整数据集,为后续的空间分析、可视化及应用构建可靠的数据基础。

由于本文由一些前置知识,在正式开始之前,需要你掌握一定的Python开发基础和GDAL的基本概念。在之前的文章中讲解了如何使用GDAL或者ogr2ogr工具将txt以及csv文本数据转换为Shp格式,可以作为基础入门学习。本篇教程在之前一系列文章的基础上讲解如何使用GDAL 实现影像合并

如果你还没有看过,建议从以上内容开始。

1. 开发环境

本文使用如下开发环境,以供参考。

时间:2025年

系统:Windows 11

Python:3.11.7

GDAL:3.11.1

2. 数据准备

俗话说巧妇难为无米之炊,数据就是软件的基石,没有数据,再美好的设想都是空中楼阁。因此,第一步需要下载遥感影像数据。

但是,影像数据在哪里下载呢?别着急,本文都给你整理好了。

数据下载可参考文章:GIS 影像数据源介绍

如下,这是我在【地理空间数据云】平台下载的landsat8遥感影像。

3. 导入依赖

GeoTIFF作为一种栅格数据格式,可以使用GDAL直接进行处理,以实现影像数据的合并操作。影像合并涉及到大量数学运算,所以还需要导入numpy模块进行处理。

from osgeo import gdal
import numpy as np

如果你没有安装numpy模块的话,可执行命令pip install numpy进行安装。

4. 影像合并

定义一个方法merge_raster(input_files, output_file, target_resolution=None)用于实现栅格数据的合并。

"""
说明:GDAL 影像合并
参数:
    -input_files:输入合并的影像文件列表
    -output_file:输出影像文件
    -target_resolution:影像合并分辨率
"""
def merge_raster(input_files, output_file, target_resolution=None):

在获取到影像数据后,需要对数据范围进行合并。

"""
需要合并图像尺寸后进行输出
"""

# 获取所有影像的边界和分辨率
min_x, max_x, min_y, max_y = float('inf'), -float('inf'), float('inf'), -float('inf')
res_x, res_y = None, None

for file in input_files:
    # 打开数据集
    ds = gdal.Open(file)
    # 获取地理变换信息
    gt = ds.GetGeoTransform()

    # 获取行、列数
    x_size = ds.RasterXSize
    y_size = ds.RasterYSize

    # 计算实际边界
    x_min = gt[0]
    y_max = gt[3]
    x_max = gt[0] + x_size * gt[1]
    y_min = gt[3] + y_size * gt[5]

    min_x = min(min_x, x_min)
    max_x = max(max_x, x_max)
    min_y = min(min_y, y_min)
    max_y = max(max_y, y_max)

    if res_x is None or abs(gt[1]) < abs(res_x):
        res_x = abs(gt[1])
        res_y = abs(gt[5])

    # 关闭数据源
    ds = None

计算影像合并分辨率。

# 使用目标分辨率或计算出的分辨率
if target_resolution:
    res_x = res_y = target_resolution

获取影像大小,输出合并影像的总行数和总列数。

# 计算输出尺寸
out_cols = int((max_x - min_x) / res_x + 0.5)
out_rows = int((max_y - min_y) / res_y + 0.5)

调用gdal对象方法Warp进行影像合并,该函数第一个参数destNameOrDestDS 为输出数据集名称或者数据源,第二个参数srcDSOrSrcDSTab为源数据,第三个参数options为可选项描述,用于定义合并影像信息。

# 设置Warp参数
warp_options = gdal.WarpOptions(
    format='GTiff',
    outputBounds=[min_x, min_y, max_x, max_y],
    xRes=res_x,
    yRes=res_y,
    resampleAlg='bilinear',  # 根据需要选择:near, bilinear, cubic, lanczos等
    dstNodata=0,
    targetAlignedPixels=True,  # 确保像素对齐
    multithread=True,
    creationOptions=['COMPRESS=LZW''TILED=YES''BIGTIFF=IF_SAFER']
)

# 执行合并
gdal.Warp(output_file, input_files, options=warp_options)

main函数中调用合并方法。

if __name__ == "__main__":

    # 输入影像文件
    input_files = [ 
        "E:\ArcGIS\bandmerge\lc8_band_432.tif",
        "E:\ArcGIS\bandmerge\lc8_band_432_d.tif"
    ]
    # 输出影像文件
    output_file"E:\ArcGIS\bandmerge\merge_result.tif"

    merge_raster(input_files, output_file, target_resolution=10)

图片效果

OpenLayers示例数据下载,请在公众号后台回复:vector

全国信息化工程师-GIS 应用水平考试资料,请在公众号后台回复:GIS考试

GIS之路 公众号已经接入了智能 助手,可以在对话框进行提问,也可以直接搜索历史文章进行查看。

都看到这了,不要忘记点赞、收藏 + 关注

本号不定时更新有关 GIS开发 相关内容,欢迎关注 


    

GeoTools 开发合集(全)

OpenLayers 开发合集

小小声说一下GDAL的官方API接口

《云南省加快构建现代化产业体系推进产业强省建设行动计划》发布

ArcGIS Pro 添加底图的方式

为什么每次打开 ArcGIS Pro 页面加载都如此缓慢?

ArcGIS Pro 实现影像波段合成

自然资源部党组关于苗泽等4名同志职务任免的通知

GDAL 创建矢量图层的两种方式

GDAL 实现矢量数据转换处理(全)

GDAL 实现投影转换

国产版的Google Earth,吉林一号卫星App“共生地球”来了

2026年全国自然资源工作会议召开

日本欲打造“本土版”星链系统

昨天以前首页

为什么每次打开 ArcGIS Pro 页面加载都如此缓慢?

作者 GIS之路
2026年1月17日 21:33

^ 关注我,带你一起学GIS ^

大家有没有这种经历,每次新建或者打开一个已有的ArcGIS Pro工程的话,在加载场景页面都要等待很长时间,这无疑对使用体验造成非常不好的影响。

首先需要检查一下电脑配置,如果你的电脑运行内存稍微低一点,显卡也不太给力,对软件运行会造成一定影响。

可访问ESRI网站查看配置需求。

访问如下地址,可检测本机运行环境。

https://www.systemrequirementslab.com/client-app?refid=1256&appkey=6D681CD0-BA6C-4B6B-9A82-639759CFD094&requirementsetid=23091

标识ArcGIS Pro版本为3.3到3.6,我本机的是3.5。

好吧,虽然··············,但是我的电脑没运行出结果,或者说检测出错了,估计是个bug有完整运行结果的同学可以截图看一下。

电脑配置这关过了的话,咱么可以进行软件设置了。

我的主要问题是每次新建工程或者打开原有工程,创建场景的时间都很漫长(底图没被封之前就加载缓慢),也有可能是网络的原因。

但我的需求其实不需要一开始就添加一个完整的底图,包括地形、影像或者矢量,大多数情况下我只需要一个空白工程就可以了,所以我的解决办法是在设置里面将默认加载底图去除。

首先,打开设置选项Options

然后找到Map and Scene,在右侧将Map项和Scene项修改为None,也就是默认不加载底图。

经过此步骤之后,我再打开ArcGIS Pro那就舒服多了。

OpenLayers示例数据下载,请在公众号后台回复:vector

全国信息化工程师-GIS 应用水平考试资料,请在公众号后台回复:GIS考试

GIS之路 公众号已经接入了智能 助手,可以在对话框进行提问,也可以直接搜索历史文章进行查看。

都看到这了,不要忘记点赞、收藏 + 关注

本号不定时更新有关 GIS开发 相关内容,欢迎关注 


    

GeoTools 开发合集(全)

OpenLayers 开发合集

ArcGIS Pro 实现影像波段合成

自然资源部党组关于苗泽等4名同志职务任免的通知

GDAL 创建矢量图层的两种方式

GDAL 数据类型大全

GDAL 实现矢量数据转换处理(全)

GDAL 实现投影转换

国产版的Google Earth,吉林一号卫星App“共生地球”来了

2026年全国自然资源工作会议召开

日本欲打造“本土版”星链系统

吉林一号国内首张高分辨率彩色夜光卫星影像发布

2025 年度信创领军企业名单出炉!

❌
❌