1 gdalwarp:变形工具。包括投影、拼接、及相关的变形功能。此工具功能强大,但效率不高,使用时注意

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] [-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]*
    srcfile* dstfile

参考:http://www.gdal.org/gdalwarp.html

1.1 提高效率和精确度方法

目标:提高warp的执行效率。

原理:

主要是调整一样变形参数,在-wo、-co中设置。

设置INIT_DEST :INIT_DEST=[value]or INIT_DEST=NO_DATA表示初始化目标文件,如果不设置,则读取源文件并覆盖。

设置多线程数:NUM_THREADS(>=1.10),NUM_THREADS=N表示使用的线程数,如果N=ALL_CPUS则使用全部CPU。

增加缓存大小:GDAL_CACHEMAX:用于IO的缓存大小,越大则读写越快;-wm:用于中间操作缓存,越大则单次处理的数据量越大,但是如果每次处理的数据都很小,还是会按此值进行单次读写,所以会导致效率变慢,此值应该视情况设定。

提高精确度:-co TILED=YES,在输出为GeoTiff时,如果设置TILED表示将整个图形由不同的块组成;如果不设置,则默认将整个图形由单一样条组成(strip)组成;块的精度比单一样条高。官方建议尽量使用此选项。

参考:http://en.wikipedia.org/wiki/Tagged_Image_File_Format

http://trac.osgeo.org/gdal/wiki/UserDocs/GdalWarp#GeoTIFFoutputUse-coTILEDYESwhenpossible

方法:

gdalwarp

-wo set a warp option.可以有多个-wo。

示例:

gdalwarp world_4326.tif out.tif -t_srs EPSG:3857-overwrite –wo NUM_THREADS=4-wm 512

参考:

http://www.gdal.org/structGDALWarpOptions.html#a0ed77f9917bb96c7a9aabd73d4d06e08

http://lists.osgeo.org/pipermail/gdal-dev/2013-January/035217.html

http://trac.osgeo.org/gdal/wiki/FAQRaster#Howtoimprovegdalwarpperformance

2 应用

2.1 坐标系统变换/投影变换

目的:根据源图像和源坐标系统,输出指定坐标系统的目标图像。

原理:根据源坐标系统和目的坐标系统之间的数学关系,对源图像进行逐点重新采样,生成目标图像。

方法:gdalwarp(直接投影效率很高)

-overwrite 如果目标图像已经存在,则重写(覆盖)。

-s_srs 源坐标系统

-t_srs 目标坐标系统。可以识别EPSG、PROJ4或者wkt的prj文件。

-r 重采样方法near:最邻近值(默认,最快,质量差),bilinear:双线性内插(用的较多),Cubic:三次方,Cubic Spline:三次样条,Lanczos,Average,mode:出现次数最多。

-wm warp caching memory,缓存大小(单位:MB)

-ts target size,目标图像大小,格式:宽高,单位(像素)。不能与-tr共存。

-multi 多线程

-dstnodata 目标图像无值时填充值

-q quiet 不显示进度等处理信息

-cutline 指定裁剪的mask矢量图层

-dstalpha 指定透明通道,对于无数据值的像素设置为透明。

-of output format,指定输出目标图像格式。默认为GeoTiff(GTiff)。

最后两个参数分别是源图像和目标图像。

注意:如果要设置-te,制定输出图像的范围,则使用的是输出图像的坐标系统。如果要使用输入图像的坐标系统,则应该在投影之前生成规定范围的输入图像。

注意:如果在输出图像中不希望看到黑边(因为图像变形,产生扇形图像,最是会出现无值部分),可以设置-dstalpha使无值部分透明。

注意:如果使用vrt对不同分辨率图像先进行合成,再投影,有可能出现多个黑线(在图像中间)。生成这种问题的原因可能是由于分块重采样进行投影,但是double精度不足,造成合成时出现无值黑线。解决的方法是先合成独立图像,再进行投影。

示例:

gdalwarp -overwrite -s_srs EPSG:4326 -t_srsEPSG:32650 -r bilinear -wm 20 -ts 3000 3000 -multi -dstnodata 0 -q -cutlineD:/qgis-ppt/grid/grid-polygon.shp -dstalpha -of GTiffD:/qgis-ppt/timeextent/Korea/Korea.png D:/qgis-ppt/timeextent/Korea/ttttt.tif

示例:proj4格式的坐标系统:

gdalwarp -overwrite -s_srs EPSG:4326 -t_srs"+proj=longlat +a=6378137.0000 +rf=298.2572221010000 +towgs840,0,0,0,0,0,0 +no_defs"

2.2 矢量裁剪

目的:根据指定的矢量图形,输出源图像的相应图像。

原理:根据指定的矢量范围(Rectangle),对源图像进行逐点重新采样,Rectangle中无矢量的部分为无数据,有矢量的部分为源图像数据,以此生成目标图像。

方法:gdalwarp

参见:投影

-crop_to_cutline 将目标图像的范围指定为cutline 矢量图像的范围。

示例:

gdalwarp -dstnodata 0 -q –cutline D:/qgis-ppt/vector-cut/cutpolygon.shp-crop_to_cutline -dstalpha -of GTiff D:/qgis-ppt/timeextent/Korea/test.tifD:/qgis-ppt/vector-cut/clipper-poly-alpha.tif

2.3 图像合并(Merge)/镶嵌(Mosaic)

目的:将多个图像合并输出到目标图像。

原理:通过复制原始图像(或者重采样之后再复制)到目标图像。

方法:gdalwarp

输入图像为多个,最后一个为输出图像。

注意:如果效率不够,可以尝试使用gdal_merge.py。使用vrt也可以提高效率。

注意:后加入的图像会覆盖先前的图像范围。

注意:如果输入文件分辨率不同,默认按照最高分辨率进行重采样。

注意:如果使用vrt文件,输入文件分辨率不同时,vrt默认使用平均分辨率。应该手动设置为最高分辨率。

示例:

gdalwarp -s_srs EPSG:4326 -t_srs EPSG:4326 -of GTiffD:/qgis-ppt/mosaic/J1.tif D:/qgis-ppt/mosaic/J2.tif D:/qgis-ppt/mosaic/J3.tifD:/qgis-ppt/mosaic/J4.tif D:/qgis-ppt/mosaic/merge4_by_warp.tif

示例:覆盖测试

gdalwarp 5-19-26.jpg 7-77-105.jpg 57.tif

gdalwarp 7-77-105.jpg 5-19-26.jpg 75.tif

2.4 地理范围裁剪

目的:根据指定地理范围,获取源图像相应图像。

原理:根据指定的地理范围,从源图像的中copy数据到目标图像。

注意:此方法与gdalbuildvrt结果相似,会更改地图范围(进行重采样)。

注意:使用vrt时,如果在输入文件分辨率不同时,结果可能出现多条黑线(因为分块进行合成,各块均进行偏移,导致部分范围无数据)。如果分辨率不同,只能先进行合成,再使用translate进行裁剪。

方法:gdalwarp

-texmin ymin xmax ymax。设置目标坐标系统的范围。

示例:

gdalwarp -s_srs EPSG:4326 -t_srs EPSG:4326 -te114.01 39.97 114.03 39.99 -of GTiff -of GTiff D:/qgis-ppt/mosaic/J1.tifD:/qgis-ppt/mosaic/J2.tif D:/qgis-ppt/mosaic/J3.tif D:/qgis-ppt/mosaic/J4.tifD:/qgis-ppt/mosaic/mcp.tif

2.5更改分辨率

目的:更改原始图像的分辨率。

原理:重新采样后,复制到目标图像。

方法:gdalwarp

-trxres yres。设置目标图像的分辨率。不可与-ts共存。

注意:使用vrt时,如果多个相同分辨率的输入图像,则合成时左上角不变,右下角会有一个像素(最终分辨率)的缩放。

注意:使用vrt时,(无论何种采样方法)右下角可能出现无值黑线。此时,可以使用-dstalpha将黑线部分透明(增加透明波段,文件体积增大25%)。

示例:

gdalwarp -s_srs EPSG:4326 -t_srs EPSG:4326 -te114.01 39.97 114.03 39.99 -tr 0.000021457672119 -0.000021457672119 -of GTiff D:/qgis-ppt/mosaic/J1.tifD:/qgis-ppt/mosaic/J2.tif D:/qgis-ppt/mosaic/J3.tif D:/qgis-ppt/mosaic/J4.tifD:/qgis-ppt/mosaic/mcp-tr.tif

2.6 重采样

目的:更改原始图像的分辨率,并以指定重采样方法生成目标图像。

原理:对原始图像逐像素重采样,生成目录图像。

方法:

gdalwarp -ts –r :不会有黑线产生,但有可能缺少一个像素。推荐使用。

或gdalwarp –tr–r –dstalpha :可能有黑线产生。不推荐使用。

-dstalpha使黑线透明。

示例:

gdalwarp  -rbilinear -dstalpha -tr 0.0006 0.0006 output/mix-res.vrt output/mix.tif

gdalwarp  -rbilinear -dstalpha –ts 300 300output/mix-res.vrt output/mix.tif

2.7 输出选项:worldfile+压缩格式+输出格式

压缩格式和worldfile等输出选项都与输出格式相关联,需要在输出格式中指定co(create operateion)选项。

注意:GeoTiff的JPEG压缩与-dstalpha无法共存。

2.7.1输出GeoTiff+TFW+JPEG压缩:

目的:输出带有worldfile(TFW)的,经过压缩的tiff文件。

方法:gdalwarp

–co TFW=YES 输出WORLDFILE文件

–co COMPRESS=JPEG 使用JPEG压缩,支持以下压缩格式:[JPEG/LZW/PACKBITS/DEFLATE/CCITTRLE/CCITTFAX3/CCITTFAX4/NONE],在使用JPEG时,可以设置压缩率(-co JPEG_QUALITY=[1-100]),默认是75%。

–co TILED=YES 使用分块混合,如果不设置则默认使用strip。

示例:

gdalwarp -co TFW=YES -co COMPRESS=JPEG -coTILED=YES output/12.vrt output/12.tif

2.7.2输出JPEG+Wld+75%压缩率:

目的:输出JPEG格式文件,并且要带有worldfile(.wld)文件。

原理:JPEG不能直接由Warp生成,需要先由warp生成geotiff,然后由translate转化为jpeg。

方法:gdalwarp –of VRT 生成vrt格式的中间文件,再由

gdal_translate –of JPEG生成JPEG格式的输出文件,-co WORLDFILE=YES输出worldfile文件,-quality=【10-100】可以设置压缩率(超过95%则无法提高品质,只会增加文件大小),默认是75%。

示例:

gdalwarp -of VRT output/12.vrt output/12-3.vrt

gdal_translate -of JPEG -co WORLDFILE=YESoutput/12-3.vrt output/12-3.jpg

2.8 内存溢出的解决方案:ERROR2: Out of memory allocating 365425784 byte destination buffer.

32系统存在2G内存上限,但可能产生很多内存碎片。这些碎片使程序无法申请到大块内存。这种情况下,应该减少缓存值,或者使用64位程序或者不使用--config GDAL_CACHEMAX xxx -wm xxx这两个选项。

参考:http://trac.osgeo.org/gdal/wiki/UserDocs/GdalWarp#Errorallocatingmemory

gdalwarp:变形工具的更多相关文章

  1. CSS3过渡、变形和动画

    1.CSS3过渡 所谓CSS3过渡,就是使用CSS3让元素从一种状态慢慢转换到另一种状态.如鼠标的悬停状态就是一种过渡.如下例子: #content a{     text-decoration: n ...

  2. CSS3 过渡、变形和动画

    一.我们来给按钮增加一个悬停效果:#content a:hover {border: 1px solid #000000;color: #000000;text-shadow: 0px 1px whi ...

  3. mac版AIcc2019旋转扭曲工具在哪?AI cc 2019 for Mac旋转扭曲工具如何使用?

    想要旋转图片?ai mac通过线性的或非线性的算法,能使图像旋转.扭曲变形.今天小编要给大家分享的是如何查找使用mac版AIcc2019旋转扭曲工具,有需要的朋友快来学习学习吧! https://ww ...

  4. PS只能各个工具使用的注意知识点

    1.图章工具  <仿制图章工具>使用方法:按住alt点击吸取干净的地方,然后松开alt键,按住鼠标左键拖动或左击  擦拭 图章区域放大缩小,是按住alt键+鼠标右键左右滑动 当图片中多个图 ...

  5. CSS3 Transitions, Transforms和Animation的使用

    一.前言 CSS3动画相关的几个属性是:transition, transform, animation:分别理解为过渡,变换,动画.虽意义相近,但具体的功能和在CSS3中承担的工作有一定的差异. t ...

  6. 用PS去除图片中文字的6个方法

    转自:http://www.u148.net/article/486.html 1.使用仿制图章工具去除文字. 这是比较常用的方法.具体的操作是,选取仿制图章工具,按住Alt键,在无文字区域点击相似的 ...

  7. Flash动画

    Flash (交互式矢量图和Web动画标准) Flash是由macromedia公司推出的交互式矢量图和 Web 动画的标准,由Adobe公 司收购.做Flash动画的人被称之为闪客.网页设计者使用 ...

  8. AI (Adobe Illustrator)详细用法(五)

    最后的调整和输出. 一.改变形状工具/宽度工具/包裹工具 1.改变形状工具[整形工具] 改变形状工具可以让我们更细致的控制形状的改变. 用钢笔工具画一条曲线,并设置宽度样式等. 如果想让这条曲线形状变 ...

  9. CSS3中动画属性transform、transition和animation

    Transform:变形 在网页设计中,CSS被习惯性的理解为擅长表现静态样式,动态的元素必须借助于javascript才可以实现,而CSS3的出现改变了这一思维方式.CSS3除了增加革命性的创新功能 ...

随机推荐

  1. scala中的view bound与context bound

    1.scala中的<%意识是“view bounds”(视界) ,它比<:的使用范围更广,还能进行隐式转换,是一种语法糖. 下面的两种写法是等效的,在编译之后完全一样. object Te ...

  2. SQL Server -ISNULL()函数

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  3. linux syslog详解

    linux syslog详解 分三部分 一.syslog协议介绍 二.syslog函数 三.linux syslog配置   一.syslog协议介绍 1.介绍 在Unix类操作系统上,syslog广 ...

  4. Oracle start with connect by prior 用法

    Oracle start with connect by prior 用法    语法: select * from 表名 where 条件1 start with 条件2 connect by pr ...

  5. <Win32_5>深入浅出Win32的计时器

    说起时间,对于我们搞IT的人来说,那是要多重要有多重要.我觉得有价值的时间是给有抱负和有才能的人准备的,因为他们会充分利用,不会让时间失望…… 呵呵,有点儿说远了,还是回归主题吧 Win32的计时器其 ...

  6. javascript中0级DOM和2级DOM事件模型浅析

    Javascript程序使用的是事件驱动的设计模式,为一个元素添加事件监听函数,当这个元素的相应事件被触发那么其添加的事件监听函数就被调用: <input type="button&q ...

  7. CSS样式总结

    CSS: Cascading Style Sheet,层叠样式表 Css由三部分组成:选择符.样式属性.值: 基本语法:选择符 {样式属性:值:样式属性:值.....} 一,选择器 常用的选择器有:标 ...

  8. Django QuerySets 里的**kwargs: 动态创建ORM查询

    Django的数据库API查询经常包含关键字参数.例如: bob_stories = Story.objects.filter(title_contains='bob', subtitle_conta ...

  9. C语言变量的存储类别

    我们知道,从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量. 从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式. 静态存储方式:是指在程序运行期 ...

  10. HDFS配置文件内容解释

    配置概述 hadoop-env.sh 一个可由hadoop脚本调用的bourne shell文件,它制定hadoop要用的JDK环境变量.守护进程JDK选项.pid文件和log文件夹 core-sit ...