一、?GDAL?Python工具
本文主要介紹的是GDAL工具集中的Python腳本命令,需要的環境必須是有Python環境和GDAL的Python版本。這是必須的,否則這些工具都不能用。對于已經安裝ArcGIS的同學來說,Python都已經安裝好了,可以直接下載GDAL的Python版本,然后就可以使用下面這些工具。
1.?rgb2pct.py?轉換24位RGB圖為8位圖
用法:
rgb2pct.py?[-n?colors?|?-pct?palette_file]?[-of?format]?source_file?dest_file
參數說明:
該工具會自動根據指定的RGB圖像計算最合適的假彩色顏色表。然后對結果影像使用該顏色表。簡而言之,就是將RGB彩色圖像轉換為一個單波段的圖像,使用顏色表來表示顏色。
命令行打開進程,-n?colors:
指定生成顏色表的顏色數目,默認是256,其值必須是2到256之間的整數值。
-pct?palette_file:
從調色板文件中提取顏色表而不從圖像中計算。調色板文件必須是GDAL支持的調色板格式。
-of?format:
輸出文件格式,默認為GeoTiff格式,而且輸出格式必須支持顏色表。
gdb where命令,source_file:
輸入的RGB圖像。
dest_file:
輸出的圖像路徑。如果圖像不存在會創建一個。
舉例:
如果希望指定調色板信息,比如簡單的文本格式,如GDAL?VRT格式,在下面的例子中將指定一個使用文本編輯器創建的VRT格式的調色板文件,一共有四個顏色,RGBA值分別是:238/238/238/255,237/237/237/255,36/236/236/255和229/229/229/255。
命令行窗口?%?rgb2pct.py?-pct?palette.vrt?rgb.tif?pseudo-colored.tif
%?more?<?palette.vrt
<VRTDataset?rasterXSize="226"?rasterYSize="271">
??<VRTRasterBand?dataType="Byte"?band="1">
????<ColorInterp>Palette</ColorInterp>
????<ColorTable>
gdal源碼剖析與開發指南pdf。??????<Entry?c1="238"?c2="238"?c3="238"?c4="255"/>
??????<Entry?c1="237"?c2="237"?c3="237"?c4="255"/>
??????<Entry?c1="236"?c2="236"?c3="236"?c4="255"/>
??????<Entry?c1="229"?c2="229"?c3="229"?c4="255"/>
????</ColorTable>
??</VRTRasterBand>
gdb源碼?</VRTDataset>?
2.?pct2rgb.py?轉換8位圖為24位RGB圖
用法:
pct2rgb.py?[-of?format]?[-b?band]?[-rgba]?source_file?dest_file
參數說明:
該工具是將一個帶有顏色表的圖像轉為RGB圖像。
-of?format:
python gdal庫、輸出文件格式,默認為GeoTiff格式。
-b?band:
指定要轉換的波段序號,默認是第一個波段。
-rgba:
生成RGBA文件(默認是生成RGB文件)。
source_file:
netty源碼剖析。輸入文件。
dest_file:
輸出文件。
3.?gdal_merge.py?鑲嵌圖像
用法:
gdal_merge.py?[-o?out_filename]?[-of?out_format]?[-co?NAME=VALUE]*
??????????????[-ps?pixelsize_x?pixelsize_y]?[-tap]?[-separate]?[-v]?[-pct]
命令行輸入、??????????????[-ul_lr?ulx?uly?lrx?lry]?[-n?nodata_value]?[-init?"value?[value...]"]
??????????????[-ot?datatype]?[-createonly]?input_files
參數說明:
該工具會自動鑲嵌指定的圖像。所有的圖像必須具有相同的坐標系統和相同的波段數目;輸入圖像可能是有重疊區或者不同的分辨率。在重疊區部分最后的圖像將會覆蓋之前的圖像值。
-o?out_filename:
輸出文件,如果不存在將會創建一個新圖像。如果該值不指定,將會創建一個叫out.tif的圖像。
命令行,-of?format:
輸出文件格式,默認為GeoTiff格式。
-co?NAME=VALUE:
創建圖像選項,具體參考具體圖像格式說明。
-ot?datatype:
指定輸出數據類型,使用類型名稱,如Byte,Int16等。
gdb退出命令、-ps?pixelsize_x?pixelsize_y:
輸出圖像的象元大小,如果不指定,將以第一個圖像的分辨率為基準。
-tap:
(GDAL?>=?1.8.0)?(target?aligned?pixels)?align?the?coordinates?of?the?extent?of?the?output?file?to?the?values?of?the?-tr,?such?that?the?aligned?extent?includes?the?minimum?extent.
-ul_lr?ulx?uly?lrx?lry:
輸出文件范圍,如果不指定,將會以所有的輸入圖像的范圍并集為輸出文件范圍。
python安裝gdal包、-v:
生成詳細的鑲嵌操作信息,當執行結束的時候。
-separate:
Place?each?input?file?into?a?separate?stacked?band.
-pct:
提取顏色表從第一個輸入圖像,并在結果圖像中使用,按照這種方式鑲嵌圖像的話,后面的圖像的顏色表都會被忽略,以第一個為準。
stl源碼剖析最新版、-n?nodata_value:
指定nodata值,在鑲嵌操作的時候會忽略該值。
-init?"value(s)":
指定輸出文件的初始值,不會在輸出文件中指定nodata值,如果只指定了一個值,那么所有的波段都會使用該值來作為初始值。
-createonly:
輸出文件已經創建好了。但是輸入文件數據沒有寫入。
linux怎么退出命令行。舉例:
創建一個圖像,將所有的波段都指定為255。
%?gdal_merge.py?-init?255?-o?out.tif?in1.tif?in2.tif
創建一個RGB圖像,并將前兩個波段初始化為0,第三個波段為255。
%?gdal_merge.py?-init?"0?0?255"?-o?out.tif?in1.tif?in2.tif
4.?gdal2tiles.py?生成TMS切片
用法:
python3源碼剖析新版?gdal2tiles.py?[-title?"Title"]?[-publishurl?http://yourserver/dir/]
??????????????[-nogooglemaps]?[-noopenlayers]?[-nokml]
??????????????[-googlemapskey?KEY]?[-forcekml]?[-v]
??????????????input_file?[output_dir]
參數說明:
該工具按照OSGeo的切片地圖服務說明書來生成小的切片數據和元數據。基于Google地圖和OpenLayers簡單的網頁地圖瀏覽。
gdb常用命令?GDAL2Tiles?工具創建Google?Earth?(KML?SuperOverlay)必需的元數據文件,按照EPSG:4326投影。同時會創建世界文件(World?file),但是頁可以創建其他的投影的文件。
-title?"Title":
生成元數據,網頁視圖和KML文件。
-publishurl?http://yourserver/dir/:
添加發布的網頁地址,會將結果上傳到該地址。
-nogooglemaps:
python程序?不要生成基于Google地圖的html頁面。
-noopenlayers:
不要生成基于OpenLayers的html頁面。
-nokml:
不要生成Google?Earth的kml文件。
Do?not?generate?KML?files?for?Google?Earth.
-googlemapskey?KEY:
指定生成區域的范圍,使用Google?Maps的API。參考(http://www.google.com/apis/maps/signup.html).
-forcekml
生成kml文件,輸入圖像必需是EPSG:4326的投影!
-v
處理結束后輸出詳細信息。
5.?gdal_retile.py
用法:
gdal_retile.py?[-v]?[-co?NAME=VALUE]*?[-of?out_format]?[-ps?pixelWidth?pixelHeight]
???????????????[-ot??{Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/
??????????????????????CInt16/CInt32/CFloat32/CFloat64}]'
???????????????[?-tileIndex?tileIndexName?[-tileIndexField?tileIndexFieldName]]
???????????????[?-csv?fileName?[-csvDelim?delimiter]]
???????????????[-s_srs?srs_def]??[-pyramidOnly]
???????????????[-r?{near/bilinear/cubic/cubicspline/lanczos}]
???????????????-levels?numberoflevels
???????????????[-useDirForEachRow]???
???????????????-targetDir?TileDirectory?input_files
參數說明:
該工具對輸入圖像創建分塊。所有的輸入圖像必需具有相同的投影和相同的波段數。可以選擇生成金字塔。會生成輸出瓦片的矢量文件。
-targetDir?directory:
輸出瓦片存放的目錄。金字塔文件會存放在子文件夾中,子文件夾的命名從1開始,數字代表金字塔級別。創建的輸出名稱由源文件名稱和一個序號組成。
-of?format:
輸出文件格式,默認為GeoTiff格式。
-co?NAME=VALUE:
創建選項,具體參考具體的格式說明。
-ot?datatype:
指定輸出圖像的數據類型,使用類型名稱,如Byte,Int16,UInt16等。
-ps?pixelsize_x?pixelsize_y:
輸出文件大小,如果不指定,默認是256*256。
-levels?numberOfLevels:
創建的金字塔級數。
-v:
輸出相信的信息。
-pyramidOnly:
不建立瓦片文件,只建立金字塔。
-r?algorithm:
重采樣方式,默認為最鄰近采樣。
-s_srs?srs_def:
源文件的空間參考。坐標系統可以是任何OGRSpatialReference.SetFro函數支持的坐標系統,包括EPSG?PCS和GCSes,PROJ.4聲明或者其他的包含WKT字符串的prf文件。如果不知道,將會從指定輸入圖像中讀取。同時該空間參考用來創建生成的瓦片的矢量文件。
-tileIndex?tileIndexName:
包含結果瓦片索引的shp名稱。
-tileIndexField?tileIndexFieldName:
包含瓦片名稱的屬性表字段名稱。
-csv?csvFileName:
指定包含瓦片地理信息的csv文件名稱。該文件包含五列,分別是:(瓦片名稱,最小x,最大x,最小y,最大y)tilename,minx,maxx,miny,maxy。
-csvDelim?column?delimiter:
CSV文件的列之間分隔符,默認使用分號風格。
-useDirForEachRow:
通常情況下,輸出的瓦片文件存放在-targetDir指定的文件夾中。對于大圖像,在有些文件系統中對于文件夾中的文件數過多可能會有一些問題,從而導致gdal_retile程序不能正常執行完畢。使用該參數可以創建不同的目錄結構。原始的瓦片文件存放在名字為0的子文件夾中,金字塔依次存放在子文件1,2,3...中,數字代表金字塔的級別。
6.?gdal_proximity.py
用法:
gdal_proximity.py?srcfile?dstfile?[-srcband?n]?[-dstband?n]?
??????????????????[-of?format]?[-co?name=value]*
??????????????????[-ot?Byte/Int16/Int32/Float32/etc]
??????????????????[-values?n,n,n]?[-distunits?PIXEL/GEO]
??????????????????[-maxdist?n]?[-nodata?n]?[-fixed-buf-val?n]
參數說明:
gdal_proximity.py腳本用來生成柵格圖像的距離圖,即計算中心點的象元與臨近的象元之間的距離作為結果象元值。
srcfile
輸入的柵格圖像。=
dstfile
輸出影像,可以是一個已經存在的文件,大小和原始圖像一致,如果不存在,將會創建一個新圖像。
-srcband?n
指定用來計算的波段序號,默認為第一個波段。
-dstband?n
指定輸出的波段序號,默認為第一個波段。
-of?format:
輸出圖像格式,默認為GeoTiff格式,使用短格式名稱。
-co?"NAME=VALUE":
創建圖像選項,具體參考對應格式的說明。
-ot?datatype:
輸出文件的數據類型,使用短名稱,如Byte,Int16。
-values?n,n,n:
A?list?of?target?pixel?values?in?the?source?image?to?be?considered?target?pixels.?If?not?specified,?all?non-zero?pixels?will?be?considered?target?pixels.?指定結果象元值在原始影像如果沒有指定,所有的非0象元將被用來計算結果圖。
-distunits?PIXEL/GEO:
指定距離的單位,默認為像素單位,可以為像素單位或者地理坐標單位。
-maxdist?n:
最大距離值,所有超過該值的象元具體將被設置為nodata值或者65535。距離使用像素單位時,如果使用GEO參數的話,不會執行該操作。
-nodata?n:
指定nodata值。
-fixed-buf-val?n:
Specify?a?value?to?be?applied?to?all?pixels?that?are?within?the?-maxdist?of?target?pixels?(including?the?target?pixels)?instead?of?a?distance?value.
7.?gdal_polygonize.py?柵格矢量化工具
用法:
gdalinfo?[--help-general]?[-mm]?[-stats]?[-hist]?[-nogcp]?[-nomd]
?????????[-noct]?[-nofl]?[-checksum]?[-proj4]?[-mdd?domain]*
?[-sd?subdataset]?datasetname
參數說明:
gdalinfo程序輸出gdal支持的柵格格式的一系列信息。
-mm
強制計算柵格每個波段的最大最小值。
-stats
讀取和現實圖像統計信息,如果指定該參數,將強制計算圖像的統計信息,如各個波段的最大值、最小值、均值、標準差等。
舉例:
Generate?polygons?from?raster.
8.?gdal_sieve.py?小斑去除濾波工具
用法:
gdalinfo?[--help-general]?[-mm]?[-stats]?[-hist]?[-nogcp]?[-nomd]
?????????[-noct]?[-nofl]?[-checksum]?[-proj4]?[-mdd?domain]*
?[-sd?subdataset]?datasetname
參數說明:
gdalinfo程序輸出gdal支持的柵格格式的一系列信息。
-mm
強制計算柵格每個波段的最大最小值。
-stats
讀取和現實圖像統計信息,如果指定該參數,將強制計算圖像的統計信息,如各個波段的最大值、最小值、均值、標準差等。
舉例:
Raster?Sieve?filter.
9.?gdal_fillnodata.py?填充NoData區域
用法:
gdalinfo?[--help-general]?[-mm]?[-stats]?[-hist]?[-nogcp]?[-nomd]
?????????[-noct]?[-nofl]?[-checksum]?[-proj4]?[-mdd?domain]*
?[-sd?subdataset]?datasetname
參數說明:
gdalinfo程序輸出gdal支持的柵格格式的一系列信息。
-mm
強制計算柵格每個波段的最大最小值。
-stats
讀取和現實圖像統計信息,如果指定該參數,將強制計算圖像的統計信息,如各個波段的最大值、最小值、均值、標準差等。
二、?其他說明
關于GDAL的Python編譯、安裝和使用方法,網上有很多的博文。由于Python是不用編譯的腳本語言,所以不用編譯就可以運行,語法簡單,受到很多人的喜愛,我也是Python的愛好者。尤其是對于一些簡單的功能,完全沒有必要寫一個C或者C++以及其他的語言程序,還需要編譯后才能使用,總覺得不是那么的方便。如果用Python,寫完后直接可以運行。
關于Python版本的編譯和安裝,參考此系列的博文三:http://blog.csdn.net/liminlu0314/article/details/6945452;此外,對于Python版本GDAL的使用,主要參考李林(lilin)寫的《GDAL庫學習筆記》系列文章(想當年我就是看這七篇文章來學習GDAL的)。鏈接地址為:http://wiki.woodpecker.org.cn/moin/lilin。