GDAL工具箱详解之gdalwarp.exe

本文详细介绍了GDAL工具箱中的gdalwarp.exe,探讨了其在图像变换中的作用,包括在QGIS中的使用、源码分析,特别是GDALWarpOperation和GDALWarpKernel类的功能和相互关系。gdalwarp.exe用于执行地理信息数据的投影变换,确保图像信息不受损,同时调整行列数、像元大小和参考系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GDAL自带的工具包含了众多的功能,可以看做是利用该开源库进行的典型开发案例。本节主要介绍其中基本的一项工具——gdalwarp.exe。

  • 该工具箱位于GDAL文件夹下的apps文件夹中,属于命令行可执行程序。

目录

使用方法

GDAL帮助文件中栅格工具箱里关于gdalwarp.exe的描述如下:

gdalwarp [--help-general] [--formats]
    [-s_srs srs_def] [-t_srs srs_def] [-to "NAME=VALUE"]
    [-order n | -tps | -rpc | -geoloc] [-et err_threshold]
    [-refine_gcps tolerance [minimum_gcps]]
    [-te xmin ymin xmax ymax] [-te_srs srs_def]
    [-tr xres yres] [-tap] [-ts width height]
    [-ovr level|AUTO|AUTO-n|NONE] [-wo "NAME=VALUE"] [-ot Byte/Int16/...] [-wt Byte/Int16]
    [-srcnodata "value [value...]"] [-dstnodata "value [value...]"] -dstalpha
    [-r resampling_method] [-wm memory_in_mb] [-multi] [-q]
    [-cutline datasource] [-cl layer] [-cwhere expression]
    [-csql statement] [-cblend dist_in_pixels] [-crop_to_cutline]
    [-of format] [-co "NAME=VALUE"]* [-overwrite]
    [-nomd] [-cvmd meta_conflict_value] [-setci] [-oo NAME=VALUE]*
    [-doo NAME=VALUE]*
    srcfile* dstfile
参数 意义 样例
-s_srs 原坐标系统 +proj=longlat +datum=WGS84 +no_defs
-t_srs 目标坐标系统 +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs
-to 变换选项 暂时未知
-order n 变换多项式顺序 1-3
-tps 强制基于已知控制点使用样条函数进行变换 只需输入设定即可
-rpc 强制使用rpc模型 只需输入设定即可
-geoloc 强制使用元数据中的地理位置数组 详细格式请参照:https://trac.osgeo.org/gdal/wiki/rfc4_geolocate
-et err_threshold 变换允许的偏差值 像素为单位
-refine_gcps tolerance minimum_gcps 精化后控制点的最少数量
-te xmin ymin xmax ymax 输出文件地理范围 最大最小x、y值
-te_srs srs_def 特殊指定SRS输出文件的地理参照 GDAL/OGR forms, complete WKT, PROJ.4, EPSG:n or a file containing the WKT
-tr xres yres 输出图像的分辨率 xres yres
-tap 输出图像范围的坐标系校正到图像分辨率一致 只需输入设定即可
-ts width height 设置输出图像的宽和高 像素数
-ovr level AUTO AUTO-n
-wo “NAME=VALUE” 这里可以特别指定重投影选项 重投影选项都可以
-ot type 输出数据类型 type
-wt type 处理时使用的数据类型 type
-r resampling_method 设定重采样算法 resampling_method
-srcnodata value [value…] 源图像无数据处的值 value
-dstnodata value [value…] 输出图像无数据处的值 value
-dstalpha 创建输出数据集中的透明波段以辨识无数据值 只需输入设定即可
-wm memory_in_mb 设定该应用程序内存 memory_in_mb
-multi 是否使用多线程 只需输入设定即可
-q 是否在控制台输出运行步骤提示 只需输入设定即可
-of format 输出格式 format
-co “NAME=VALUE” 格式驱动所支持的选项
-cutline datasource 激活OGR支持的矢量作为数据分割线 datasource
-cl layername 指定特定名称的图层 layername
-cwhere expression 基于属性查询分割线 expression
-csql query 使用sql语句选择在-cl指定图层上的分割线要素
-cblend distance 设置混合距离 按像素
-crop_to_cutline 按照分割线裁剪数据集 只需输入设定即可
-overwrite 是否覆写目标数据集 只需输入设定即可
-nomd 不复制元数据 只需输入设定即可
-cvmd meta_conflict_value 冲突元数据信息值 “”
-setci 参照输入数据集的色彩索引表建立输出数据集波段的色彩索引表 只需输入设定即可
-oo NAME=VALUE 打开选项 驱动打开选项
-doo NAME=VALUE 输出选项 驱动输出选项
srcfile 输入文件 raw_spot.tif
dstfile 输出文件 utm11.tif

关于-oo及doo的叙述在上一节gdalinfo中有所涉及,这里就不赘述了。
借助于QGIS中集成的的GDAL可视化界面我们可以简易地生成命令,下图是该工具的GUI
QGIS-GDALWarp
在使用该界面设置完成一些参数以后可以在后面的文本框中得到命令行参数。

gdalwarp -ot Float32 -s_srs EPSG:4326 -t_srs EPSG:2382 -r bilinear -of GTiff -te 116.526854182 40.0601709856 116.532848182 40.0661649856 -te_srs EPSG:4326 -co COMPRESS=DEFLATE -co PREDICTOR=1 -co ZLEVEL=6 -wo OPTIMIZE_SIZE=TRUE E:\GDALhomework\000000.tif E:/优快云/warped.tif

启用一些高级设置,得到:

gdalwarp -ot UInt16 -s_srs EPSG:4326 -t_srs EPSG:2382 -r bilinear -of GTiff -te 116.526854182 40.0481829856 116.532848182 40.0541769856 -te_srs EPSG:4326 -co COMPRESS=DEFLATE -co PREDICTOR=1 -co ZLEVEL=6 -co TILED=YES -wo OPTIMIZE_SIZE=TRUE E:\GDALhomework\000002.tif E:/优快云/warped1.tif

在QGIS中打开变换后的图像,对比如图
warpdifference
下层真彩色的图像为原图像,上层发黄的是变换后的影像。可以看出两幅影像相同的地理位置处的影像是相同的,也就是变换不会损坏图像的信息,但从旁边的黑色部分可以看出这一地理位置的信息是没有的。
同时,查看两幅图像的信息,发现转换后的图像经过了

  • 经过了压缩
  • 行列数目发生了变化
  • 图像顶点及范围变化
  • 像元大小发生变化
  • 参考系在参考椭球和高斯平面坐标间发生了变化(最重要)

下面,在控制台中直接使用原生程序gdalwarp.exe:进入控制台,并键入

D:\gdal-2.1.0\apps>gdalwarp -ot UInt16 -s_srs EPSG:4326 -t_srs EPSG:2382 -r
bilinear -of GTiff -te 116.526854182 40.0481829856 116.532848182 40.0541769856 -
te_srs EPSG:4326 -co COMPRESS=DEFLATE -co PREDICTOR=1 -co ZLEVEL=6 -co TILED=YES
 -wo OPTIMIZE_SIZE=TRUE E:\GDALhomework\000002.tif E:\优快云\warpedcmd.tif
0...10...20...30...40...50...60...70...80...90...100 - done.

bit length overflow
code 6 bits 6->7

bit length overflow
code 14 bits 6->7
code 13 bits 6->7

这样转换的图像和在QGIS中操作的结果是一样的。这里只是提供一种间接学习使用GDAL工具箱的方法。
下面看程序源码。

源码分析

应用程序主函数体:

/************************************************************************/
/*                                主函数()                               
/************************************************************************/

int main( int argc, char ** argv )

{
    GDALDatasetH *pahSrcDS = NULL;
    int nSrcCount = 0;

    EarlySetConfigOptions(argc, argv);

/* -------------------------------------------------------------------- */
/*      注册所有驱动,并且处理gdla常规命令选项。                             
/* -------------------------------------------------------------------- */
    GDALAllRegister();
    argc = GDALGeneralCmdLineProcessor( argc, &argv, 0 );
    if( argc < 1 )
        GDALExit( -argc );

    for( int i = 0; argv != NULL && argv[i] != NULL; i++ )
    {
        if( EQUAL(argv[i], "--utility_version") )
        {
            printf("%s was compiled against GDAL %s and is running against GDAL %s\n",
                   argv[0], GDAL_RELEASE_NAME, GDALVersionInfo("RELEASE_NAME"));
            CSLDestroy( argv );
            return 
<think>好的,用户想知道在QGIS中如何进行栅格数据的重采样。首先,我需要回忆一下QGIS的相关工具和步骤。重采样通常用于改变栅格的分辨率或者对齐不同的栅格数据,这在处理地理空间数据时很常见。 首先,QGIS的栅格处理工具集中在处理工具箱里,可能涉及到GDAL的功能,因为QGIS底层使用了GDAL库。用户提到的重采样方法,可能需要使用到“Warp(重投影)”工具,因为GDALgdalwarp不仅可以处理投影变换,还可以进行重采样。此外,QGIS的菜单里有没有直接的重采样选项呢?我记得在栅格菜单下的投影和转换里可能有相关工具。 然后,用户需要具体的步骤,比如如何选择输入文件、设置输出分辨率、选择重采样算法(如最邻近、双线性、三次卷积等)。不同的算法适用于不同的数据类型,比如最邻近适合离散数据,双线性适合连续数据。这部分需要详细说明,避免用户混淆。 另外,用户可能还需要知道如何验证重采样后的数据是否正确,比如使用compareRaster函数检查范围、分辨率等是否对齐。引用中的信息提到compareRaster函数,可以建议用户使用R语言的raster包来验证,不过如果用户只想在QGIS中操作,可能需要其他方法,比如查看元数据或者使用插件。 还要注意引用相关的资料,比如引用[3]提到Java调用GDAL实现重采样,但用户可能更关注QGIS的图形界面操作,所以主要参考引用[1]和[2]中的QGIS教程。同时,栅格数据对齐的问题在引用[4]中有提到,可能需要提醒用户在重采样后检查对齐情况。 最后,生成相关问题时要考虑用户可能进一步的需求,比如性能优化、不同算法的区别、处理后的验证方法等。确保问题覆盖用户潜在的兴趣点,帮助他们深入学习。</think>### QGIS栅格数据重采样方法详解 在QGIS中进行栅格重采样主要通过**GDAL Warp**工具实现,以下是具体操作步骤: --- #### 一、基础重采样操作 1. **打开处理工具箱**:`处理 > 工具箱` 2. **搜索工具**:在搜索栏输入`Warp (Reproject)` 3. **参数设置**: - 输入图层:选择待处理栅格 - 目标坐标系:保持原坐标系时选择`输入坐标系` - 重采样方法:`-r`参数选择算法 - 输出分辨率:`-tr`设置X/Y分辨率(单位与坐标系一致) - 输出文件:指定保存路径 ![处理工具箱界面示意图](https://example.com/warp_tool.png)[^1] --- #### 二、核心重采样算法对比 | 算法类型 | 适用场景 | 计算复杂度 | 特点 | |----------------|---------------------------|------------|------------------------------| | 最邻近法 | 分类数据(土地利用类型) | 低 | 保留原始值,产生锯齿 | | 双线性插值 | 连续数据(DEM高程) | 中 | 平滑过渡,适合渐变表面 | | 三次卷积插值 | 遥感影像 | 高 | 细节保留好,可能产生负值 | | 平均值 | 降分辨率聚合 | 中 | 适合统计型数据 | --- #### 三、进阶操作示例 **批量重采样脚本**(Python控制台): ```python import processing input_path = "/path/to/input.tif" output_path = "/path/to/output.tif" processing.run("gdal:warpreproject", { 'INPUT': input_path, 'RESAMPLING': 2, # 2代表双线性插值 'TARGET_RESOLUTION': 10, # 10米分辨率 'OUTPUT': output_path }) ``` --- #### 四、质量验证方法 1. **元数据检查**:`右键图层 > 属性 > 信息`查看分辨率 2. **可视化对比**:使用`视窗联动`功能同步浏览原始与结果数据 3. **数值验证**:通过`栅格计算器`计算差值栅格: $$ \Delta = |R_{原始} - R_{重采样}| $$ 4. 使用R语言验证(需安装raster包): ```r library(raster) compareRaster(r1, r2, res=TRUE, orig=TRUE) ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值