GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。

        Python的GDAL库作为栅格数据的处理转换库,其支持几百种栅格数据格式,如常见的TIFF、ENVI、HFA、HDF4等。因为遥感影像大部分都是栅格数据,所以GDAL库非常适合处理遥感影像、如光谱指数计算、波段合成、批量下载等。

一、GDAL库的安装

  因为博主的GDAL库的安装有些时候了,所以pip install 的方法能不能安装需要自己尝试。这里推荐大家下载对应包,使用本地安装。

1.打开GDAL库的下载链接,选择自己电脑Python对应的版本,别下载错了哦!

2.然后按住Win+R,输入cmd进入命令行。在cmd终端中,使用cd跳转至下载GDAL包的目录。如 cd /d G:\try\,G:\try\是你狭窄GDAL包的文件夹目录。然后在命令行里输入pip GDAL-3.4.3-cp38-cp38-win_amd64.whl,这是你下载的GDAL包的名称,每个人不一样,别傻乎乎地用我的!

 3.可以在编译器里查看是否安装成功,博主使用的是PyCharm,在设置中可以看到是否安装成功。当然你也可以先编写程序,如果没安装成功,程序会报错=。=

 

二、编写程序

1.导入计算所需库

GDAL是我们安装的栅格数据处理库。os是系统操作库,用来遍历文件夹。time库用来计算程序执行时间,可以不要。

import time
import os
from osgeo import gdal

2.查看GDAL库中的裁剪函数

其中,out_raster是输出的栅格数据路径,in_raster是输入的栅格数据路径,cultineDSName是用于裁剪的矢量数据。

ds = gdal.Warp(out_raster, in_raster, format='GTiff',
cutlineDSName=shp_name,
cropToCutline=True,
cutlineWhere=None, dstNodata=0)

Warp函数主要参数说明,官网有说明文档。因为本人懒得翻译,所以这里参考了这篇文章:Python使用GDAL矢量裁剪栅格,设置背景值为空白(已解决)

gdal.Warp(options = [], format = 'GTiff', outputBounds = None,
outputBoundsSRS = one, xRes = None, yRes = None,
targetAlignedPixels = False, width = 0, height = 0, srcSRS = None,
dstSRS = None, srcAlpha = False, dstAlpha = False, warpOptions = None,
errorThreshold = None, warpMemoryLimit = None, creationOptions = None,
outputType = GDT_Unknown, workingType = GDT_Unknown, resampleAlg = None,
srcNodata = None, dstNodata = None, multithread = False, tps = False,
rpc = False, geoloc = False, polynomialOrder = None,
transformerOptions = None, cutlineDSName = None, cutlineLayer = None,
cutlineWhere = None, cutlineSQL = None, cutlineBlend = None,
ropToCutline = False, copyMetadata = True, metadataConflictValue = None,
setColorInterpretation = False, callback = None, callback_data = None):
其中:
options — 可以是一个字符串数组,一个字符串或者令其为空值,但是使用后面其他的参数来定义。
format — 输出的格式 (例如"GTiff"等)。
outputBounds — 在目标空间参考系统的输出数据集的范围,形式为 (minX,minY, maxX, maxY) 。
outputBoundsSRS — 如果在dstSRS中没有定义的话,使用这个关键字定义输出数据集的边界的空间参考系统。
xRes, yRes — 在目标参考系统中的像元大小。
targetAlignedPixels —是否强制输出边界为输出分辨率的倍数。
width — 输出栅格的像素列数。
height — 输出栅格的像素行数。
srcSRS —源空间参考系统。
dstSRS — 输出空间参考系统。
srcAlpha — 是否强制将输入数据集的最后一个波段作为alpha波段。
dstAlpha — 是否强制创建一个输出数据集的alpha波段。
outputType — 输出类型 (例如gdal.GDT_Byte等)
workingType — working type (gdal.GDT_Byte, etc…)
warpOptions —变形选项列表。
errorThreshold --近似转换的误差阈值(用像素表示) 。
warpMemoryLimit — 工作缓存大小,单位是bytes。
resampleAlg — 重采样模式。
creationOptions — 创建选项列表。
srcNodata — 源数据的nodata值。
dstNodata — 输出数据的nodata值。
multithread — 是否多线程计算和输入输出操作。
tps— 是否使用Thin Plate Spline GCP 转换器。
rpc— 是否使用RPC转换器。
geoloc — 是否使用GeoLocation数组转换器。
polynomialOrder — 多项式GCP插值的阶数。
transformerOptions — 转换参数
cutlineDSName — 剪切线数据集名称。这里的剪切线是指对影像进行剪切的时候所使用的矢量图层。
cutlineLayer — 剪切线图层名称。
cutlineWhere — 剪切线的WHERE语句。
cutlineSQL — 剪切线的SQL 语句。
cutlineBlend — 以像素为单位的剪切线混合距离。
cropToCutline — 是否使用剪切线的extent作为输出的界线。
copyMetadata — 是否拷贝源数据的元数据。
metadataConflictValue — 元数据冲突值。
setColorInterpretation — 是否强制将输入波段的颜色解释赋予输出波段。
callback — 回调函数。
callback_data — 回调函数数据

3.编写遍历代码,实现使用一个或多个shp批量裁剪多个栅格数据

shp_files = os.listdir(in_shape)
# 以列表展开所有目录下的文件名
for shp_file in shp_files:
# 从列表中遍历
if shp_file.endswith('.shp'):
# 判断是否为shp文件
shp_name = os.path.join(in_shape, shp_file)
# 定义shp文件的目录+名称
files = os.listdir(in_path)
# 打开需要裁剪的文件夹,将所有文件以列表的形式列出
for file in files:
if file[-4:] == '.tif':
# 判断文件是否为.tif结尾
filename = os.path.join(in_path, file)
# 确定找到的文件名
in_raster = gdal.Open(filename)
out_raster = os.path.join(out_path, file[-8:-4]+shp_file[:-4]+".tif")
ds = gdal.Warp(out_raster, in_raster, format='GTiff',
cutlineDSName=shp_name,
cropToCutline=True,
cutlineWhere=None, dstNodata=0)
ds = None
# 关闭处理空间,释放内存

三、完整代码

# -*- coding: utf-8 -*-
"""
@Time : 2023/5/19 9:05
@Auth : RS迷途小书童
@File :Clip Raster Data.py
@IDE :PyCharm
@Purpose :基于GDAL批量裁剪栅格数据
"""
import time
import os
from osgeo import gdal def clip_batch(in_path, out_path, in_shape):
"""
:param in_path: 需要裁剪的文件夹
:param out_path: 输出文件夹
:param in_shape: 存放shp的文件夹
:return:
"""
shp_files = os.listdir(in_shape)
# 以列表展开所有目录下的文件名
for shp_file in shp_files:
# 从列表中遍历
if shp_file.endswith('.shp'):
# 判断是否为shp文件
shp_name = os.path.join(in_shape, shp_file)
# 定义shp文件的目录+名称
files = os.listdir(in_path)
# 打开需要裁剪的文件夹,将所有文件以列表的形式列出
for file in files:
if file[-4:] == '.tif':
# 判断文件是否为.tif结尾
filename = os.path.join(in_path, file)
# 确定找到的文件名
in_raster = gdal.Open(filename)
out_raster = os.path.join(out_path, file[-8:-4]+shp_file[:-4]+".tif")
ds = gdal.Warp(out_raster, in_raster, format='GTiff',
cutlineDSName=shp_name,
cropToCutline=True,
cutlineWhere=None, dstNodata=0)
ds = None
# 关闭处理空间,释放内存 if __name__ == "__main__":
# 直接执行函数
start = time.perf_counter() # 开始时间
in_shape = r"G:\pology" # 矢量范围
in_path = r"G:\30mlandcoverdata" # 输入栅格路径
out_path = r"G:\landusedata\3" # 输出栅格路径
clip_batch(in_path, out_path, in_shape)
end = time.perf_counter() # 结束时间
print('finish')
print('Running time: %s Seconds' % (end - start))
# 展示程序运行时间

        如果大家在学习Python或者RS时有什么问题,可以随时留言交流!如果大家对批量处理有兴趣同样可以留言给博主,博主会分享相关代码以供学习!

【Python&RS】GDAL批量裁剪遥感影像/栅格数据的更多相关文章

  1. Python gdal读取MODIS遥感影像并结合质量控制QC波段掩膜数据

      本文介绍基于Python中GDAL模块,实现MODIS遥感影像数据的读取.计算,并基于质量控制QC波段进行图像掩膜的方法.   前期的文章Python GDAL读取栅格数据并基于质量评估波段QA对 ...

  2. Python核对遥感影像批量下载情况的方法

      本文介绍批量下载遥感影像时,利用Python实现已下载影像文件的核对,并自动生成未下载影像的下载链接列表的方法.   批量下载大量遥感影像数据对于GIS学生与从业人员可谓十分常见.然而,对于动辄成 ...

  3. Python ArcPy批量掩膜、重采样大量遥感影像

      本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作.   首先,我们来明确一下本文的具体需求.现有一个存储有大量.tif格式遥感影像的文件夹:且其中除了 ...

  4. Python中使用面状矢量裁剪栅格影像,并依据Value值更改矢量属性

    本文整体思路:在Python中使用Geopandas库,依次读取shp文件的每一个面状要素,获取其空间边界信息并裁剪对应的栅格影像,计算所裁剪影像Value值的众数,将其设置为对应面状要素的NewTY ...

  5. Python批量读取HDF多波段栅格数据并绘制像元直方图

      本文介绍基于Python语言gdal模块,实现多波段HDF栅格图像文件的读取.处理与像元值可视化(直方图绘制)等操作.   另外,基于gdal等模块读取.tif格式栅格图层文件的方法可以查看Pyt ...

  6. ArcGIS + Python 批量裁剪、添加X/Y坐标脚本

    前言 前一段时间,同事拿来的数据范围太大,用不了那么多(只需要一个乡镇的,结果拿来区县的),太多了加载也是问题.所以就让我给处理下. 由于文件较多,手动裁剪的话,我一个一个用ArcGIS工具箱中的工具 ...

  7. Python批量绘制遥感影像数据的直方图

      本文介绍基于Python中gdal模块,实现对大量栅格图像批量绘制直方图的方法.   首先,明确一下本文需要实现的需求:现需对多幅栅格数据文件进行依据其像元数值的直方图绘制,具体绘制内容即各栅格图 ...

  8. Python ArcPy批量计算多时相遥感影像的各项元平均值

      本文介绍基于Python中ArcPy模块,对大量长时间序列栅格遥感影像文件的每一个像元进行多时序平均值的求取.   在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取-- ...

  9. 1. GDAL与OpenCV2.X数据转换(适合多光谱和高光谱等多通道的遥感影像)

    一.前言 GDAL具有强大的图像读写功能,但是对常用图像处理算法的集成较少,OpenCV恰恰具有较强的图像处理能力,因此有效的结合两者对图像(遥感影像)的处理带来了极大的方便.那么如何实现GDAL与o ...

  10. GDAL与OpenCV2.X数据转换(适合多光谱和高光谱等多通道的遥感影像)

    一.前言 GDAL具有强大的图像读写功能,但是对常用图像处理算法的集成较少,OpenCV恰恰具有较强的图像处理能力,因此有效的结合两者对图像(遥感影像)的处理带来了极大的方便.那么如何实现GDAL与o ...

随机推荐

  1. 【装饰器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    简介 装饰器模式(Decorator Pattern)是一种结构型设计模式.将对象放入到一个特殊封装的对象中,为这个对象绑定新的行为,具备新的能力,同时又不改变其原有结构. 如果你希望在无需修改代码的 ...

  2. 【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(上)

    承接上文 承接之前的[精华推荐 |[算法数据结构专题]「延时队列算法」史上非常详细分析和介绍如何通过时间轮(TimingWheel)实现延时队列的原理指南],让我们基本上已经知道了「时间轮算法」原理和 ...

  3. [Linux/Bash/Shell]curl & wget

    1 参考文献 curl 的用法指南 - 阮一峰 curl网站开发指南 - 阮一峰 Curl Cookbook https://curl.haxx.se/ linux curl 命令详解,以及实例 2 ...

  4. shell脚本编程(一)

    c81ba641-5ed7-4ab9-a7c0-e319e0f3890b 初识shell脚本编程 最近项目需求,需要了解下shell脚本编程,所以自己就必须玩玩了= = 初识shell脚本编程,找了几 ...

  5. 获取网络连接状态(二) IsNetworkAlive

    IsNetworkAlive需要服务System Event Notification的支持(系统默认自动启动该服务),且需要安装最新的SDK(如.NET) 浏览:MSDN对IsNetworkAliv ...

  6. [Pytorch框架] 1.1、Pytorch简介

    文章目录 1.1 Pytorch 简介 1.1.1 PyTorch的由来 1.1.2 Torch是什么? 1.1.3 重新介绍 PyTorch 1.1.4 对比PyTorch和Tensorflow 1 ...

  7. Snort的安装——Fedora

    Snort Fedora Install 简介 Snort 是世界上知名的开源入侵防御系统 (IPS).Snort IPS 使用一系列规则来帮助定义恶意网络活动,并使用这些规则来查找与其匹配的数据包并 ...

  8. 音视频八股文(10)-- mp4结构

    介绍 mp4⽂件格式⼜被称为MPEG-4 Part 14,出⾃MPEG-4标准第14部分 .它是⼀种多媒体格式容器,⼴泛⽤于包装视频和⾳频数据流.海报.字幕和元数据等.(顺便⼀提,⽬前流⾏的视频编码格 ...

  9. ASP.NET Response.Filter

    寫 ASP.NET 有時候會想要在畫面輸出前一刻進行攔截,並換掉 html 中的特定字元.例如網站中有許多頁面都有 www.google.com.tw 的超連結,我希望在測試機上可以把連結換成 www ...

  10. 2022-12-24:给定一个字符串s,其中都是英文小写字母, 如果s中的子串含有的每种字符都是偶数个, 那么这样的子串就是达标子串,子串要求是连续串。 返回s中达标子串的最大长度。 1 <= s的长

    2022-12-24:给定一个字符串s,其中都是英文小写字母, 如果s中的子串含有的每种字符都是偶数个, 那么这样的子串就是达标子串,子串要求是连续串. 返回s中达标子串的最大长度. 1 <= ...