一、 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格式,而且输出格式必须支持颜色表。
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
2. pct2rgb.py 转换8位图为24位RGB图
用法:
pct2rgb.py [-of format] [-b band] [-rgba] source_file dest_file
参数说明:
该工具是将一个带有颜色表的图像转为RGB图像。
-of format:
输出文件格式,默认为GeoTiff格式。
-b band:
指定要转换的波段序号,默认是第一个波段。
-rgba:
生成RGBA文件(默认是生成RGB文件)。
source_file:
输入文件。
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等。
-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:
输出文件范围,如果不指定,将会以所有的输入图像的范围并集为输出文件范围。
-v:
生成详细的镶嵌操作信息,当执行结束的时候。
-separate:
Place each input file into a separate stacked band.
-pct:
提取颜色表从第一个输入图像,并在结果图像中使用,按照这种方式镶嵌图像的话,后面的图像的颜色表都会被忽略,以第一个为准。
-n nodata_value:
指定nodata值,在镶嵌操作的时候会忽略该值。
-init "value(s)":
指定输出文件的初始值,不会在输出文件中指定nodata值,如果只指定了一个值,那么所有的波段都会使用该值来作为初始值。
-createonly:
输出文件已经创建好了。但是输入文件数据没有写入。
举例:
创建一个图像,将所有的波段都指定为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切片
用法:
gdal2tiles.py [-title "Title"] [-publishurl http://yourserver/dir/]
[-nogooglemaps] [-noopenlayers] [-nokml]
[-googlemapskey KEY] [-forcekml] [-v]
input_file [output_dir]
参数说明:
该工具按照OSGeo的切片地图服务说明书来生成小的切片数据和元数据。基于Google地图和OpenLayers简单的网页地图浏览。
GDAL2Tiles 工具创建Google Earth (KML SuperOverlay)必需的元数据文件,按照EPSG:4326投影。同时会创建世界文件(World file),但是页可以创建其他的投影的文件。
-title "Title":
生成元数据,网页视图和KML文件。
-publishurl http://yourserver/dir/:
添加发布的网页地址,会将结果上传到该地址。
-nogooglemaps:
不要生成基于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。
也可以直接下载编译好的Python版本GDAL,具体地址为:http://pypi.python.org/pypi/GDAL/