gdalwarp:變形工具


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM