GDAL工具箱详解之gdalwarp.exe

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:/CSDN/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:/CSDN/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:\CSDN\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 
  • 14
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值