GDAL源码剖析(五)之Python命令行程序

一、 GDAL Python工具

本文主要介绍的是GDAL工具集中的Python脚本命令,需要的环境必须是有Python环境和GDALPython版本。这是必须的,否则这些工具都不能用。对于已经安装ArcGIS的同学来说,Python都已经安装好了,可以直接下载GDALPython版本,然后就可以使用下面这些工具。

1. rgb2pct.py 转换24RGB图为8位图

用法:

rgb2pct.py [-n colors | -pct palette_file] [-of format] source_file dest_file

参数说明:

该工具会自动根据指定的RGB图像计算最合适的假彩色颜色表。然后对结果影像使用该颜色表。简而言之,就是将RGB彩色图像转换为一个单波段的图像,使用颜色表来表示颜色。

-n colors:

指定生成颜色表的颜色数目,默认是256,其值必须是2256之间的整数值。

-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

<VRTDataset rasterXSize="226" rasterYSize="271">

  <VRTRasterBand dataType="Byte" band="1">

    <ColorInterp>Palette</ColorInterp>

    <ColorTable>

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

</VRTDataset> 

2. pct2rgb.py 转换8位图为24RGB

用法:

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:

指定输出数据类型,使用类型名称,如ByteInt16等。

-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 Earthkml文件。

Do not generate KML files for Google Earth.

-googlemapskey KEY:

指定生成区域的范围,使用Google MapsAPI。参考(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 PCSGCSesPROJ.4声明或者其他的包含WKT字符串的prf文件。如果不知道,将会从指定输入图像中读取。同时该空间参考用来创建生成的瓦片的矢量文件。

-tileIndex tileIndexName:

包含结果瓦片索引的shp名称。

-tileIndexField tileIndexFieldName:

包含瓦片名称的属性表字段名称。

-csv csvFileName:

指定包含瓦片地理信息的csv文件名称。该文件包含五列,分别是:(瓦片名称,最小x,最大x,最小y,最大ytilename,minx,maxx,miny,maxy。

-csvDelim column delimiter:

CSV文件的列之间分隔符,默认使用分号风格。

-useDirForEachRow:

通常情况下,输出的瓦片文件存放在-targetDir指定的文件夹中。对于大图像,在有些文件系统中对于文件夹中的文件数过多可能会有一些问题,从而导致gdal_retile程序不能正常执行完毕。使用该参数可以创建不同的目录结构。原始的瓦片文件存放在名字为0的子文件夹中,金字塔依次存放在子文件123...中,数字代表金字塔的级别。

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

读取和现实图像统计信息,如果指定该参数,将强制计算图像的统计信息,如各个波段的最大值、最小值、均值、标准差等。

二、 其他说明

关于GDALPython编译、安装和使用方法,网上有很多的博文。由于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/

原文链接: https://www.cnblogs.com/xiaowangba/archive/2012/01/29/6314033.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    GDAL源码剖析(五)之Python命令行程序

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/40675

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午5:28
下一篇 2023年2月8日 下午5:28

相关推荐