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.htmlhtml

1.1 提升效率和精確度方法

目標:提升warp的執行效率。sql

原理:express

主要是調整同樣變形參數,在-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)組成;塊的精度比單同樣條高。官方建議儘可能使用此選項。ui

參考:http://en.wikipedia.org/wiki/Tagged_Image_File_Formatspa

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

相關文章
相關標籤/搜索