zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    Three.js中引入dat.gui库实现界面组件控制动画速度变量
    Three.js中使用requestAnimationFrame方法实现立方体转动和小球跳动的动画
    Windows下使用Java API操作HDFS的常用方法
    Windows下配置Hadoop的Java开发环境以及用Java API操作HDFS
    HDFS的访问方式之HDFS shell的常用命令
    CentOS7上搭建Hadoop集群(入门级)
    CentOS7中怎样安装JDK与配置环境变量
    【2021-08-05】哪怕天踏下来,也要当被子盖
    【2021-08-04】连岳摘抄
    【2021-08-03】里程碑
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314033.html
Copyright © 2011-2022 走看看