参数介绍
gdal.WarpOptions(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 — 回调函数数据
使用范例:
一、重采样
对于栅格数据的重投影可以使用Warp来实现
Warp(destNameOrDestDS, srcDSOrSrcDSTab,**kwargs)
- destNameOrDestDS是数据集变量或者新保存的目标文件地址。
- srcDSOrSrcDSTab可以是源数据集或文件名,即被重投影的数据集,也可以是包含了若干数据集或文件名的一个array。
- kwargs关键字参数是可以是一个WarpOptions对象,也可以是一个字符串数组,包含了WarpOptions的若干条件,具体内容与WarpOptions的参数一致。如果已经使用了一个WarpOptions对象,则所使用的其他关键字参数都会被忽略掉。
二、校正
参考以下文章
Python 利用GDAL对图像进行几何校正 - 行走的蓑衣客 - 博客园https://www.cnblogs.com/suoyike1001/p/15230883.html
三、影像裁剪
1、矢量裁剪栅格
①使用gdal.Warp进行裁剪
from osgeo import gdal
input_shape = r"C:\Users\Administrator\Desktop\English\sample1.shp"
input_raster = r'C:\Users\Administrator\Desktop\English\BOA Reflectance-10m_MTD_MSIL2A.tif'
# tif输入路径,打开文件
output_raster = r"C:\Users\Administrator\Desktop\English\Landsat8.tif"
# 矢量文件路径,打开矢量文件
input_raster = gdal.Open(input_raster)
# 开始裁剪,一行代码,爽的飞起
ds = gdal.Warp(output_raster,#输出栅格路径
input_raster,#输入栅格路径
format='GTiff',#影像保存格式
cutlineDSName=input_shape,#输入矢量路径
cropToCutline=False, # (为True时,结果会与输入矢量大小一致。为False时,结果会与待裁剪的输入栅格大小一致。看情况使用)
# cutlineWhere="FIELD = 'whatever'",
dstSRS='EPSG:4326', # 参考系:WGS84
outputType=gdal.GDT_Int16,#数据类型
dstNodata=0)# 目标图像无值时填充值
# 关闭文件
ds = None
②使用mask掩膜裁剪
import fiona
import rasterio as rio
import rasterio.mask
def clipRasterByShapefile(src, shpdatafile, dst, nodata=0):
#src:待裁剪栅格路径
#shpdatafile:裁剪矢量路径
#dst:裁剪结果路径
# 读取shp
with fiona.open(shpdatafile, "r") as shapefile:
features = [feature["geometry"] for feature in shapefile]
# 读取原始影像
src = rio.open(src)
# 调用函数执行裁剪
out_image, out_transform = rio.mask.mask(src, features,
all_touched=True,
crop=False,
nodata=nodata)
# 元数据信息复制
out_meta = src.meta.copy()
out_meta.update({"driver": "GTiff",
"height": out_image.shape[1],
"width": out_image.shape[2],
"transform": out_transform})
# 输出文件
output_file = rasterio.open(dst, "w", compress="LZW", **out_meta)
output_file.write(out_image)
output_file.close()
2、矢量裁剪矢量
import os
import gdal
from osgeo import ogr
def ShapeClip(baseFilePath,maskFilePath,saveFolderPath):
"""
矢量裁剪
:param baseFilePath: 要裁剪的矢量文件路径
:param maskFilePath: 掩膜矢量文件路径
:param saveFolderPath: 裁剪后的矢量文件保存目录
:return:
"""
ogr.RegisterAll()
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
# 载入要裁剪的矢量文件
baseData = ogr.Open(baseFilePath)
baseLayer = baseData.GetLayer()
spatial = baseLayer.GetSpatialRef()
geomType = baseLayer.GetGeomType()
baseLayerName = baseLayer.GetName()
# 载入掩膜矢量文件
maskData = ogr.Open(maskFilePath)
maskLayer = maskData.GetLayer()
maskLayerName = maskLayer.GetName()
# 生成裁剪后的矢量文件
outLayerName = maskLayerName + "_Clip_" + baseLayerName
outDataName = os.path.join(saveFolderPath, outLayerName)
if not os.path.exists(outDataName):
os.makedirs(outDataName)
outFileName = outLayerName + ".shp"
outFilePath = os.path.join(outDataName, outFileName)
gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
driver = ogr.GetDriverByName("ESRI Shapefile")
outData = driver.CreateDataSource(outFilePath)#创建输出文件
outLayer = outData.CreateLayer(outLayerName, spatial, geomType)#创建带有与输入矢量相同地理信息的图层
baseLayer.Clip(maskLayer, outLayer)#进行裁剪
outData.Release()
baseData.Release()
maskData.Release()
return outFilePath