【本文转载于:http://wiki.woodpecker.org.cn/moin/lilin/gdal-utils,版权属于原创作者】
http://blog.163.com/lionyue@126/blog/static/10793071200710120467784/
gdal是一个库,所以它附带的程序本身是很容易被忽略的。可是这些程序又是极其有用的。真的,不骗你!
gdalinfo - 统计文件的信息。
gdal_translate - 拷贝一个可以控制控制输出格式的栅格文件。
gdaladdo - 为文件添加略缩图。
gdalwarp - 把一个图像转换到一个新的坐标系统。
gdalindex - 为MapServer建立一个栅格索引。
gdal_contour - 给DEM创建等高线。
rgb2pct.py - 把一个24位的图像转化成8位调色板图像。
pct2rgb.py - 把一个8位调色板图像转化成24位位图。
gdal_merge.py - 把一系列的图像创建一个快速的地图集。
gdal_rasterize - 把一个矢量图层栅格化。
nearblack - 转换临近的黑/白边框为精准数值。
gdal-config - 获取建立使用gdal的软件需要的参数。
存取一个已存在的文件来读取是一件很容易的事情,只要在命令行中指定文件或者数据集的名字。但是,创建一个文件是一件非常复杂的事情。你可能需要指定创建格式,各种创建参数,以及指定一个坐标系统。在不同的GDAL工具中有许多参数都是差不多的,这里列举出来。
-of format
-co NAME=VALUE
可以使用的创建参数根据格式驱动不同而不同。而一些简单的格式根本就没有创建参数。虽然某个格式可以用"--format
-a_srs SRS
NAD27/NAD83/WGS84/WGS72:这些常见的地理坐标系统可以通过名字来直接使用。
EPSG:n坐标系统(投影或者地理坐标)可以通过EPSG码来选择。例如EPSG 27700是英国国家网格。一系列的EPSG坐标系统可以在GDAL数据文件gcs.csv和pcs.csv中找到。
PROJ.4定义: 一个PROJ4定义字符串可以用作坐标系统定义。例如“+proj=utm +zone=11 +datum=WGS84”。注意在命令行中要保持Proj4字符串在一起作为一个单独的参数(一般用双引号引起来)。
OpenGIS 知名文本: OpenGIS标准定义了一个文本格式来描述坐标系统作为简单要素规范的一个部分。这个格式是gdal中使用的坐标系统的内部工作格式。包含wkt坐标系统描述的文件的文件名可以被用来作为坐标系统参数,或者坐标系统元素本身也可以被用来作为命令行参数(虽然wkt中释放所有引号是很有争议的)。
ESRI知名文本:ESRI在他们的ArcGIS产品(ArcGIS .prj文件)中使用了一种经过精简OGC WKT的格式,而且这个格式被用在一个和wkt相似的风格的文件中。但是文件名要被加以ESRI::前缀。比如"ESRI::NAD 1927 StatePlane Wyoming West FIPS 4904.prj"。
所有的GDAL命令行工具程序都支持下面的“总的”命令行参数。
--version
--formats
列出所有gdal支持的栅格格式(只读和读写的)并退出。格式支持描述如下:"ro"是只读驱动,'rw'是读写驱动(比如支持CreateCopy);"rw+"是读写和更新驱动(比如支持Create)。
--format format
--optfile file
--config key value
--debug value
--help-general
列出栅格数据集的信息
用法:
gdalinfo [--help-general] [-mm] [-stats] [-nogcp] [-nomd] [-mdd domain] * datasetname
gdalinfo程序列出gdal支持的栅格格式的一系列信息。
-mm
-stats
-nogcp
-nomd
-mdd domain
gdalinfo会给出如下的信息(如果有的话):
例子:
gdalinfo ~/openev/utm.tif Driver: GTiff/GeoTIFF Size is 512, 512 Coordinate System is: PROJCS["NAD27 / UTM zone 11N", GEOGCS["NAD27", DATUM["North_American_Datum_1927", SPHEROID["Clarke 1866",6378206.4,294.978698213901]], PRIMEM["Greenwich",0], UNIT["degree",0.0174532925199433]], PROJECTION["Transverse_Mercator"], PARAMETER["latitude_of_origin",0], PARAMETER["central_meridian",-117], PARAMETER["scale_factor",0.9996], PARAMETER["false_easting",500000], PARAMETER["false_northing",0], UNIT["metre",1]] Origin = (440720.000000,3751320.000000) Pixel Size = (60.000000,-60.000000) Corner Coordinates: Upper Left ( 440720.000, 3751320.000) (117d38'28.21"W, 33d54'8.47"N) Lower Left ( 440720.000, 3720600.000) (117d38'20.79"W, 33d37'31.04"N) Upper Right ( 471440.000, 3751320.000) (117d18'32.07"W, 33d54'13.08"N) Lower Right ( 471440.000, 3720600.000) (117d18'28.50"W, 33d37'35.61"N) Center ( 456080.000, 3735960.000) (117d28'27.39"W, 33d45'52.46"N) Band 1 Block=512x16 Type=Byte, ColorInterp=Gray
不同格式间的栅格数据转换
用法:
gdal_translate [--help-general] [-ot {Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/ CInt16/CInt32/CFloat32/CFloat64}] [-not_strict] [-of format] [-b band] [-outsize xsize[%] ysize[%]] [-scale [src_min src_max [dst_min dst_max]]] [-srcwin xoff yoff xsize ysize] [-projwin ulx uly lrx lry] [-a_srs srs_def] [-a_ullr ulx uly lrx lry] [-a_nodata value] [-gcp pixel line easting northing]* [-mo "META-TAG=VALUE"]* [-quiet] [-sds] [-co "NAME=VALUE"]* src_dataset dst_dataset
gdal_translate 工具可以用来在不同格式间转换栅格数据。并且在处理过程中暗地里做一些诸如子栅格设置,重采样和象元值集体变化等勾当。
-ot type
-not_strict
-of format
选择输出格式。默认是GeoTiff(GTiff)。注意,指定的时候用格式简称。
-b band
选择一个波段来输出。波段号从1开始编号。多个 -b 参数可以用于选择输出某几个波段或者重新进行波段的排序。
-outsize xsize[%] ysize[%]
-scale [src_min src_max [dst_min dst_max] ]
-srcwin xoff yoff xsize ysize
-projwin ulx uly lrx lry
-a_srs srs_def
-a_ullr ulx uly lrx lry
-a_nodata value
-mo "META-TAG=VALUE"
-co "NAME=VALUE"
-gcp pixel line easting northing
-quiet
-sds
src_dataset
dst_dataset
例子:
gdal_translate -of GTiff -co "TILED=YES" utm.tif utm_tiled.tif
建立或者重建图像金字塔。
用法:
gdaladdo [-r {nearest,average,average_mp,average_magphase,mode}] filename levels
gdaladdo工具可以用于为大多数支持的格式建立或者重建金字塔。可以使用下面几种重采样算法中的一种来进行缩小重采样操作。
-r {nearest, average,average_mp, average_magphase,mode}:
filename
levels:
Mode不是一个确切的实现。而且average_mp不适合使用。Average_magphase在一个mag/phase空间中平均联合数据(译者:这句涉及算法,我不懂这个是什么平均方法)。最临近和平均值法可以用于普通的影像数据。最临近法用一个最临近的邻居(简单象元)重采样,而平均值法计算所有非无意义值的象元的平均值来进行重采样。
选择一个缩放水平如2表示略缩图缩放程度是源图像每个维上分辨率的1/2。如果文件在所选缩放水平上已经存在略缩图,那么那个缩放程度将被重新计算并覆盖写入。
一些格式根本不支持金字塔。许多格式在文件以外以扩展名.ovr存储金字塔,TIFF就是如此。GeoTIFF格式直接把金字塔存储到原有的文件中。
在TIFF中创建金字塔可以通过用COMPRESS_OVERVIEW配置参数进行压缩。所有GeoTIFF支持的压缩方法,可以在这里获得(如: --config COMPRESS_OVERVIEW DEFLATE)。
大多数驱动也支持一个备用的略缩图格式(使用的是Erdas图像格式)。引发这个备用格式使用 USE_RRD=YES 来设置参数。这样做会把GDAL程序创建的金字塔放到一个辅助的.aux文件中使得可以该金字塔可以直接在Erdas中使用或者也可以在ArcGIS中使用。
例子:
在所提供的TIFF文件内部创建金字塔
gdaladdo -r average abc.tif 2 4 8 16
从一个ERDAS.IMG文件中创建一个外部的压缩的金字塔文件。
gdaladdo --config COMPRESS_OVERVIEW DEFLATE erdas.img 2 4 8 16
为给定JPEG文件创建一个Erdas Imagine 格式金字塔
gdaladdo --config USE_RRD YES airphoto.jpg 3 9 27 81
简单图像重投影和绑定工具。
用法
gdalwarp [-s_srs srs_def] [-t_srs srs_def] [-order n] [-et err_threshold] [-te xmin ymin xmax ymax] [-tr xres yres] [-ts width height] [-wo "NAME=VALUE"] [-ot Byte/Int16/...] [-wt Byte/Int16] [-srcnodata "value [value...]"] [-dstnodata "value [value...]"] [-rn] [-rb] [-rc] [-rcs] [-wm memory_in_mb] [-multi] [-q] [-of format] [-co "NAME=VALUE"]* srcfile* dstfile
gdalwarp工具是一个图像镶嵌、重投影、和绑定的工具。程序可以重投影到任何支持的投影,而且如果图像("raw" with)控制信息也可以把GCPs和图像存储在一起。
-s_srs srs_def
源空间参考集。所有可以使用OGRSpatialReference.SetFromUserInput()来调用的坐标系统都可以使用。包括EPSG PCS和GCSes(例如EPSG:4296),PROJ.4描述(如上)。或者包含知名文本的以prf为扩展名的文件。
-t_srs srs_def
-order n
-tps
-et err_threshold
-te xmin ymin xmax ymax
-tr xres yres
-ts width height
-wo "NAME=VALUE"
-ot type
-wt type
-rn
-rb
-rc
-rcs
-srcnodata value [value...]
-dstnodata value [value...]
-wm memory_in_mb
-multi
-q
-of format
选择输出格式,默认是GeoTiff
-co "NAME=VALUE"
srcfile
dstfile
如果输出文件已经存在,则在已存在的文件中创建地图集。
例子:
一个带有用经纬度标记的边界控制点的8位GeoTiff格式的Spot影像可以通过下面的命令绑定到一个UTM投影上。
gdalwarp -t_srs '+proj=utm +zone=11 +datum=WGS84' raw_spot.tif utm11.tif
一个带有用经纬度标记的边界控制点的两个波段的HDF格式的ASTER影像可以通过下面的命令绑定到UTM投影上。
gdalwarp HDF4_SDS:ASTER_L1B:"pg-PR1B0000-2002031402_100_001":2 pg-PR1B0000-2002031402_100_001_2.tif