• GDAL源码剖析(四)之命令行程序说明一


    一、GDAL工具通用命令

    下面的工具主要参考的GDAL官方网站中提供的帮助文档说明,此外还有我的一些经验,GDAL官方具体地址为:http://gdal.org/gdal_utilities.html

    在所有的GDAL工具集中都会支持下面的通用命令行参数,其形式一般是以两个减号(--)开始,下面详细介绍:

    1.             –version

    输出GDAL的版本信息,即版本号。

    2.             --formats

    输出GDAL支持的所有图像格式说明。包括只读和读写。格式支持描述如下:“ro”是只读驱动;“rw”是读写驱动(比如支持CreateCopy方法);“rw+”是读写和更新驱动(比如支持Create方法),支持所有的读写更新操作。

    3.             --format format

    输出GDAL单个格式驱动的细节信息。格式名需要是在--formats 后列出所要输出的格式名。比如GTiff,HFA,PCISK等。

    4.             --optfile file

    读取指定名称的文件并把其中的内容当成参数传入命令行列表。如果行首以#开头的行将被忽略。多字组成的参数(即中间有空格隔开的参数)需要用双引号来保正其为单一的参数。

    5.             --config key value

    设置配置,把指定键设置为某个值,从而不必把他们设置为环境变量。一些命令参数键是GDAL_CACHEMAX(用于缓存的内存有多少M)以及GDAL_DATA(gdal的数据路径)。比如在GDAL1.8之后,经常会发现打不开中文路径的文件,那么可以用这个来设置,具体为“—configGDAL_FILENAME_IS_UTF8 NO”。同时对于每一种驱动都会有各自的配置,具体参考各个驱动的说明。更多的配置选项参考该网址:http://trac.osgeo.org/gdal/wiki/ConfigOptions

    6.             --debug value

    控制调试信息的打印输出。ON值表示允许调试信息输出,OFF值表示不要输出调试信息。

    7.             --help-general

    输出各个工具的命令行参数帮助信息。不同的命令输出的内容不同。

     

    下面还有一些通用的命令,是用来创建文件来使用的。创建不同的格式需要的参数都是不相同的,尤其是在特殊的情况下,比如创建的Erdas的img格式需不需要使用压缩等特殊的需求。这些参数一般使用一个减号(-)开始。下面对这些参数进行一个简单的说明。

    8.             -of format

    选择要创建新的文件的格式。这个格式被指定为类似GTiff(GeoTIFF格式)或者HFA(ERDAS格式)。所有的支持格式列表可以用--formats 参数列出来。但是只有格式列表“(rw)”可以被写入和创建。许多工具如果没有指定,默认是创建GeoTIFF格式的文件。文件扩展名不会自动添加,如果没有指定文件名的后缀名,gdal一般不会添加任何扩展名。各个工具的命令行参数帮助信息。不同的命令输出的内容不同。

    9.             -co NAME=VALUE

    创建文件选项,许多格式会有一个或者更多的创建参数来控制文件创建的细节。比如GeoTIFF或者Erdas的img格式可以用创建参数控制压缩,或者控制是否用分片还是分带来进行存储。

    可以使用的创建参数根据格式驱动不同而不同。而一些简单的格式根本就没有创建参数。虽然某个格式可以用"--format <format>"参数列出所有可用的参数列表,但是更详细的信息可以在格式介绍网页中查到。对于不同的文件格式,请参考对应文件格式说明网页。

    10.       -a_srs SRS

    指定输出文件的投影信息(坐标系统)。输出各个工具的命令行参数帮助信息。不同的命令输出的内容不同。有几个工具(如gdal_translate、gdalwarp)可以在命令行中通过类似-a_srs(分配输出SRS)、-s_srs(源SRS)、-t_srs(目标SRS)来指定坐标系统。这些工具允许以一系列格式定义坐标系统(SRS就是空间参考系统spatial reference system)。SRS通常可以使用下面几种方式来指定:

    • NAD27/NAD83/WGS84/WGS72:这些常见的地理坐标系统可以通过名字来直接使用。
    • EPSG:n:坐标系统(投影或者地理坐标)可以通过EPSG码来选择。例如EPSG 27700是英国国家网格。更多的EPSG坐标系统可以在GDAL数据文件gcs.csv和pcs.csv中找到(位于GDAL目录中的data文件夹中)。
    • PROJ.4定义:一个PROJ4定义字符串可以用作坐标系统定义。例如“+proj=utm +zone=11 +datum=WGS84”。注意在命令行中要保持Proj4字符串在一起作为一个单独的参数(一般用双引号引起来)。
    • OpenGIS WKT字符串: OpenGIS标准定义了一个文本格式来描述坐标系统作为简单要素规范的一个部分。这个格式是gdal中使用的坐标系统的内部工作格式。包含wkt坐标系统描述的文件的文件名可以被用来作为坐标系统参数,或者坐标系统元素本身也可以被用来作为命令行参数。
    • ESRI WKT字符串:ESRI 在他们的ArcGIS产品(ArcGIS中的.prj文件)中使用了一种经过精简OGC WKT的格式,而且这个格式被用在一个和wkt相似的风格的文件中。但是文件名要被加以ESRI::前缀。比如"ESRI::NAD 1927 StatePlane Wyoming West FIPS 4904.prj"。
    • 空间参考网址URLs:可以使用一个空间参考的网址来指定,如:http://spatialreference.org/ref/user/north-pacific-albers-conic-equal-area/
    • 文件名:可以使用一个包含WKT、Proj.4的字符串,或者XML/GML格式的坐标系统定义的文件。

    二、GDAL工具说明

    1.             gdalinfo 输出文件信息

    用法:

    gdalinfo[--help-general] [-mm] [-stats] [-hist] [-nogcp] [-nomd]

             [-noct] [-nofl] [-checksum] [-proj4][-mdd domain]*

            [-sd subdataset] datasetname

    参数说明:

    gdalinfo程序输出gdal支持的栅格格式的一系列信息。

    -mm

    强制计算栅格每个波段的最大最小值。

    -stats

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

    -hist

    输出所有波段的直方图信息。

    -nogcp

    禁止地面控制点(GCP)列表打印。这可能对大量的GCP的数据集来说是十分有用的。比如L1B AVHRR或者hdf4MODIS数据,这些数据包含了成千上万的地面控制点。

    -nomd

    禁止元数据打印,一些数据集可能包含极多的元数据字符串。

    -noct

    禁止输出颜色表。

    -checksum

    强制计算数据集中所有波段的checksum。

    -mdd domain

    输出指定区域的元数据信息。

    -nofl

    仅显示文件列表中的第一个文件信息。GDAL1.9.0开始支持该参数。

    -sd subdataset

    如果输入的数据集包含几个子数据集,那么将使用指定的数字来替代(从1开始)完整的子数据集名称。GDAL1.9.0开始支持该参数。

    -proj4

    输出文件的坐标系统按照PROJ.4类型的字符串输出。GDAL1.9.0开始支持该参数。

    gdalinfo同时会输出如下的信息(如果有的话):

    • 当前文件的格式驱动信息
    • 栅格数据大小(行列数)
    • 文件的坐标系统(OGC WKT形式)
    • 图像关联到地理的转换参数(当前不包含旋转系数)
    • 地理上的边界坐标,如果可能的话还有基于经纬度的完整的地理转换参数(如果是GCPs就没有)
    • 地面控制点(GCPs)
    • 所有的(包括子栅格的元数据)文件元数据
    • 波段数据类型
    • 波段颜色信息(RGB,Gray等)
    • 波段颜色表信息
    • 波段瓦片大小(文件块大小)
    • 波段描述
    • 波段最大最小值(已经经过计算的)
    • 波段CheckSum值(已经经过计算的)
    • 波段无意义值(NODATA值)
    • 波段可获得的略缩图分辨率
    • 波段单位类型(如:波段的高程是米制还是英制)
    • 波段的假颜色列表

    举例:

    gdalinfoF:/Work/Data/utm.tif

    Driver:GTiff/GeoTIFF

    Sizeis 512, 512

    CoordinateSystem is:

    PROJCS["NAD27/ UTM zone 11N",

        GEOGCS["NAD27",

           DATUM["North_American_Datum_1927",

                SPHEROID["Clarke1866",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)

    PixelSize = (60.000000,-60.000000)

    CornerCoordinates:

    UpperLeft  ( 440720.000, 3751320.000) (117d38'28.21"W, 33d54'8.47"N)

    LowerLeft  ( 440720.000, 3720600.000) (117d38'20.79"W, 33d37'31.04"N)

    UpperRight (  471440.000, 3751320.000)(117d18'32.07"W, 33d54'13.08"N)

    LowerRight (  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)

    Band1 Block=512x16 Type=Byte, ColorInterp=Gray

    2.             gdal_translate 格式转换

    用法:

    gdal_translate[--help-general]

           [-ot{Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/

                 CInt16/CInt32/CFloat32/CFloat64}][-strict]

           [-of format] [-b band] [-mask band][-expand {gray|rgb|rgba}]

           [-outsize xsize[%] ysize[%]]

           [-unscale] [-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 lrxlry] [-a_nodata value]

           [-gcp pixel line easting northing[elevation]]*

           [-mo "META-TAG=VALUE"]* [-q][-sds]

           [-co "NAME=VALUE"]* [-stats]

           src_dataset dst_dataset

    参数说明:

    gdal_translate工具可以用来在不同格式间转换栅格数据。同时还可以做一些诸如提取子栅格、重采样和数据类型转换等操作。

    -ottype

    指定输出波段的数据类型。

    -strict:

    对于这转换过程中出现丢失数据等错误直接报错,不进行忽略处理。之前的参数叫-not_strict,表示对其进行宽大处理,不报错。

    -of format:

    选择输出格式。默认是GeoTiff(GTiff)。注意,指定的时候用格式简称。

    -b band:

    选择一个波段来输出。波段号从1开始编号。多个 -b 参数可以用于选择输出某几个波段或者重新对波段进行排序。从GDAL1.8.0开始,波段可以设置为“mask,1”(或者直接mask)来讲输入数据集的第一个波段作为一个mask波段来使用。

    -mask band:

    (从GDAL1.8.0开始)(GDAL >= 1.8.0)选择一个输入波段来作为创建输出数据的掩码波段。波段数是从1开始,band可以设置为none,用来避免复制整个输入数据集作为掩码,否则在默认情况下(“auto”),除非掩码是一个alpha通道,或者使用参数-b mask来进行输出,参数band也可以设置为“mask,1”(或者直接mask)来讲输入数据集的第一个波段作为一个mask波段来使用。

    -expand gray|rgb|rgba:

    (从GDAL1.6.0开始)将带有颜色表信息的单波段文件展开为RGB三波段文件或者RGBA四波段文件。对于输出格式为JPEG,JPEG2000,MrSID,ECW等不支持颜色表的数据来说很有用。灰度值(从GDAL1.7.0开始)也可以使用颜色表展开为一个数据集,但输出文件中仅仅包含灰度级别的一个索引。

    -outsize xsize[%] ysize[%]:

    设置输出文件的大小。大小以象元为单位,除非用“%”来标记,这时,表示的是输出为输入图层大小的百分比。

    -scale [src_min src_max [dst_mindst_max]]:

    重新组织输入象元的值。将它们从src_min~src_max范围内缩放到dst_min ~ dst_max范围内。如果省略,输出范围将为0~255。输入范围将由源数据自动计算。

    -unscale:

    大概意思是,不对波段中的数据进行缩放转换,在使用-ot设置输出文件类型时这个参数往往是很有用的。(这个参数的英文有点绕口,不好翻译,有知道的同学麻烦告诉我一下)。

    -srcwin xoff yoff xsize ysize:

    选择一个取值窗口,通过该窗口在原图像中的行列位置来拷贝数值。

    -projwin ulx uly lrx lry:

    选择一个取值窗口,通过该窗口在原图像中地理坐标范围来拷贝数据(类似srcwin)。参数中的四个值,使用的投影坐标。

    -a_srs srs_def:

    给输出文件投影强制指定坐标系。srs_def可以是任何常用的GDAL/OGR格式的投影信息,如:WKT、Proj4、EPSG:n 或者一个包含着wkt的文件的文件名。

    -a_ullr ulx uly lrx lry:

    强制指定输出文件的空间转换边界范围(图像的四至范围)。而将原图像的四至范围忽略掉。

    -a_nodata value:

    指定一个无意义值到输出波段。从GDAl1.8.0开始,可以设置为none来使用原文件中的nodata值作为输出文件的nodata值。

    -mo "META-TAG=VALUE":

    如果可以,给输出数据设置一个元数据的键和其对应的值。

    -co "NAME=VALUE":

    通过一个创建参数来指定输出格式特殊创建要求。多个-co 参数可以组合起来使用。创建参数可以参考各个数据格式本身说明。

    -gcp pixel line easting northingelevation:

    添加指定地面控制点到输出数据集。这个选项可以被多次使用,以提供一系列的地面控制点GCPs 。GCP格式为:列号 行号 横坐标 纵坐标 高程值。

    -q:

    安静模式,不输出进度信息以及其他非错误信息。

    -sds:

    拷贝文件中所有子数据集到各自的输出文件中。通常这个参数用在HDF或者OGDI这样有子数据集的格式中。

    -stats:

    强制计算(重新计算)数据的统计信息。自GDAL1.8.0开始支持该参数。

    src_dataset:

    输入数据集名称,可以是文件名,或者是一个多数据集文件中的一个子数据集的URL地址(比如HDF数据集中的一个子数据集)。

    dst_dataset:

    输出文件名。

    举例:

    将utm.tif转换为一个以分块存储的GeoTiff文件。

    gdal_translate -of GTiff-co "TILED=YES" utm.tif utm_tiled.tif

    创建一个JPEG压缩的Tiff图像,同时使用内部掩码从一个RGBA数据集中。

    gdal_translate rgba.tifwithmask.tif -b 1 -b 2 -b 3 -mask 4 -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR--config GDAL_TIFF_INTERNAL_MASK YES

    创建一个RGBA图像从一个RGB数据中使用一个掩码。

    gdal_translatewithmask.tif rgba.tif -b 1 -b 2 -b 3 -b mask

    3.             gdaladdo 建立金字塔

    用法:

    gdaladdo[-r {nearest,average,gauss,cubic,average_mp,average_magphase,mode}]

             [-ro] [-clean] [--help-general]filename levels

    参数说明:

    gdaladdo工具可以用于为大多数支持的格式建立或者重建金字塔。可以使用下面几种重采样算法中的一种来进行缩小重采样操作。

    -r {nearest(default),average,gauss,cubic,average_mp,average_magphase,mode}:

    指定重采样方法,分别是最邻近(默认),均值,高斯,立方卷积等。

    -ro:

    (从GDAL1.6.0开始有效),以只读的方式打开数据,来创建外部金字塔(特别对于GeoTIFF来说)。

    -clean:

    删除所有的金字塔。(从GDAL1.7.0开始有效)。

    filename:

    要建立金字塔的文件名。

    levels:

    要建立略缩图的层号的列表。 如果使用-clean选项是将被忽略。

    模式,(从GDAL1.6.0开始有效)选择最常用的重采样方式。average_mp 是不适合使用的, Average_magphase用于复数数据空间的图像。Nearest 和 average 用于普通的图像。Nearest 使用最邻近采样(简单采样),它计算所有的有效值的均值来进行计算。Cubic 采样(从GDAL1.7.0开始有效)使用一个4x4的近似立方卷积内核。 Gauss 采样(从GDAL1.6.0开始有效)使用高斯内核计算。这种对于高对比度和图案边界比较明显的图像效果比较好。一般建议的采样比值是2,4,8,…,使用3x3重采样作为高斯采样的计算窗口。

    gdaladdo将遵守正确NODATA_VALUES元组(特殊的数据集元数据),因此,只有一个给定的的RGB三元组(在一个RGB图像的情况下)作为NODATA值,而不是每个波段有独立的NODATA值。

    选择一个缩放级别值如2表示略缩图缩放程度是源图像每个维上分辨率的1/2。如果文件在所选缩放级别上已经存在略缩图,那么这个缩放级别上的缩略图将被重新计算并覆盖写入。

    一些格式根本不支持金字塔。所以许多格式在文件以外以扩展名.ovr存储金字塔,TIFF就是如此。GeoTIFF格式直接把金字塔存储到原有的文件中。除非使用-ro标记来指定。在TIFF中创建金字塔可以通过用COMPRESS_OVERVIEW配置参数进行压缩。所有GeoTIFF支持的压缩方法,可以在这里获得(如:--config COMPRESS_OVERVIEW DEFLATE)。

    大多数驱动也支持一个备用的略缩图格式(使用的是Erdas图像格式)。要使用这个备用格式使用USE_RRD=YES 来设置参数。这样做会把GDAL程序创建的金字塔放到一个辅助的.aux文件中使得可以该金字塔可以直接在Erdas中使用或者也可以在ArcGIS中使用。关于如何使用GDAL创建Erdas格式的金字塔,请参考我的博文:http://blog.csdn.net/liminlu0314/article/details/6127755

    举例:

    在所指定的TIFF文件内部创建金字塔:

    gdaladdo -r average abc.tif 2 4 8 16

    从一个ERDAS.IMG文件中创建一个外部的压缩的金字塔文件:

    gdaladdo --config COMPRESS_OVERVIEWDEFLATE erdas.img 2 4 8 16

    为给定JPEG文件创建一个Erdas Imagine 格式金字塔:

    gdaladdo --config USE_RRD YES airphoto.jpg3 9 27 81


    东西太多了,今天没写完,明天继续补上。

  • 相关阅读:
    第二十四讲 ASP.NET中开发复合控件
    第二十六讲 使用ASP.NET实现网络通讯
    第二十五讲 ASP.NET中的XML
    【经验】android webview 后退键导致表单再次提交
    【笔记】java 泛型
    【笔记】Collection
    【算法】Tween算法
    【JavaSript】发现一个漏洞
    【研究】加载图片时,同一url,多次request
    【笔记】多态之Override
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314039.html
Copyright © 2020-2023  润新知