当前位置:   article > 正文

学习笔记4_强大的gdal转换工具库warp_gdal.warp

gdal.warp

参数介绍

  1. gdal.WarpOptions(options = [], format = 'GTiff', outputBounds = None,
  2. outputBoundsSRS = one, xRes = None, yRes = None,
  3. targetAlignedPixels = False, width = 0, height = 0, srcSRS = None,
  4. dstSRS = None, srcAlpha = False, dstAlpha = False, warpOptions = None,
  5. errorThreshold = None, warpMemoryLimit = None, creationOptions = None,
  6. outputType = GDT_Unknown, workingType = GDT_Unknown, resampleAlg = None,
  7. srcNodata = None, dstNodata = None, multithread = False, tps = False,
  8. rpc = False, geoloc = False, polynomialOrder = None,
  9. transformerOptions = None, cutlineDSName = None, cutlineLayer = None,
  10. cutlineWhere = None, cutlineSQL = None, cutlineBlend = None,
  11. ropToCutline = False, copyMetadata = True, metadataConflictValue = None,
  12. 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 学习笔记(二) | 码农家园目录一、自定义空间坐标系使用EPSG或EPSGA编号进行初始化使用WKT字符串进行初始化使用PROJ字符串进行初始化附录二、遥感影像几何校正利用卫星自带的地理定位...https://www.codenong.com/cs105927745/

Python 利用GDAL对图像进行几何校正 - 行走的蓑衣客 - 博客园https://www.cnblogs.com/suoyike1001/p/15230883.html

 三、影像裁剪

1、矢量裁剪栅格

①使用gdal.Warp进行裁剪

  1. from osgeo import gdal
  2. input_shape = r"C:\Users\Administrator\Desktop\English\sample1.shp"
  3. input_raster = r'C:\Users\Administrator\Desktop\English\BOA Reflectance-10m_MTD_MSIL2A.tif'
  4. # tif输入路径,打开文件
  5. output_raster = r"C:\Users\Administrator\Desktop\English\Landsat8.tif"
  6. # 矢量文件路径,打开矢量文件
  7. input_raster = gdal.Open(input_raster)
  8. # 开始裁剪,一行代码,爽的飞起
  9. ds = gdal.Warp(output_raster,#输出栅格路径
  10. input_raster,#输入栅格路径
  11. format='GTiff',#影像保存格式
  12. cutlineDSName=input_shape,#输入矢量路径
  13. cropToCutline=False, # (为True时,结果会与输入矢量大小一致。为False时,结果会与待裁剪的输入栅格大小一致。看情况使用)
  14. # cutlineWhere="FIELD = 'whatever'",
  15. dstSRS='EPSG:4326', # 参考系:WGS84
  16. outputType=gdal.GDT_Int16,#数据类型
  17. dstNodata=0)# 目标图像无值时填充值
  18. # 关闭文件
  19. ds = None

②使用mask掩膜裁剪

  1. import fiona
  2. import rasterio as rio
  3. import rasterio.mask
  4. def clipRasterByShapefile(src, shpdatafile, dst, nodata=0):
  5. #src:待裁剪栅格路径
  6. #shpdatafile:裁剪矢量路径
  7. #dst:裁剪结果路径
  8. # 读取shp
  9. with fiona.open(shpdatafile, "r") as shapefile:
  10. features = [feature["geometry"] for feature in shapefile]
  11. # 读取原始影像
  12. src = rio.open(src)
  13. # 调用函数执行裁剪
  14. out_image, out_transform = rio.mask.mask(src, features,
  15. all_touched=True,
  16. crop=False,
  17. nodata=nodata)
  18. # 元数据信息复制
  19. out_meta = src.meta.copy()
  20. out_meta.update({"driver": "GTiff",
  21. "height": out_image.shape[1],
  22. "width": out_image.shape[2],
  23. "transform": out_transform})
  24. # 输出文件
  25. output_file = rasterio.open(dst, "w", compress="LZW", **out_meta)
  26. output_file.write(out_image)
  27. output_file.close()

2、矢量裁剪矢量 

  1. import os
  2. import gdal
  3. from osgeo import ogr
  4. def ShapeClip(baseFilePath,maskFilePath,saveFolderPath):
  5. """
  6. 矢量裁剪
  7. :param baseFilePath: 要裁剪的矢量文件路径
  8. :param maskFilePath: 掩膜矢量文件路径
  9. :param saveFolderPath: 裁剪后的矢量文件保存目录
  10. :return:
  11. """
  12. ogr.RegisterAll()
  13. gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
  14. # 载入要裁剪的矢量文件
  15. baseData = ogr.Open(baseFilePath)
  16. baseLayer = baseData.GetLayer()
  17. spatial = baseLayer.GetSpatialRef()
  18. geomType = baseLayer.GetGeomType()
  19. baseLayerName = baseLayer.GetName()
  20. # 载入掩膜矢量文件
  21. maskData = ogr.Open(maskFilePath)
  22. maskLayer = maskData.GetLayer()
  23. maskLayerName = maskLayer.GetName()
  24. # 生成裁剪后的矢量文件
  25. outLayerName = maskLayerName + "_Clip_" + baseLayerName
  26. outDataName = os.path.join(saveFolderPath, outLayerName)
  27. if not os.path.exists(outDataName):
  28. os.makedirs(outDataName)
  29. outFileName = outLayerName + ".shp"
  30. outFilePath = os.path.join(outDataName, outFileName)
  31. gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
  32. driver = ogr.GetDriverByName("ESRI Shapefile")
  33. outData = driver.CreateDataSource(outFilePath)#创建输出文件
  34. outLayer = outData.CreateLayer(outLayerName, spatial, geomType)#创建带有与输入矢量相同地理信息的图层
  35. baseLayer.Clip(maskLayer, outLayer)#进行裁剪
  36. outData.Release()
  37. baseData.Release()
  38. maskData.Release()
  39. return outFilePath

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/208268
推荐阅读
相关标签
  

闽ICP备14008679号