首页 GDAL库学习笔记

GDAL库学习笔记

举报
开通vip

GDAL库学习笔记 ZION  GDAL库学习笔记  作者:lilin        文章来源:http://wiki.woodpecker.org.cn/              如果您发现我写的东西中有问题,或者您对我写的东西有意见,请一定要发邮件跟我讲,Email( linux_23@163.com )  2    GDAL库学习笔记(一): GDAL库介绍  1.  介绍  可能你不玩 GIS,不懂这个库到底有什么用,或者和 python有什么关系。但是你要玩 GIS,RS,你就应 当知道这个库的...

GDAL库学习笔记
ZION  GDAL库学习笔记  作者:lilin        文章来源:http://wiki.woodpecker.org.cn/              如果您发现我写的东西中有问题,或者您对我写的东西有 意见 文理分科指导河道管理范围浙江建筑工程概算定额教材专家评审意见党员教师互相批评意见 ,请一定要发邮件跟我讲,Email( linux_23@163.com )  2    GDAL库学习笔记(一): GDAL库介绍  1.  介绍  可能你不玩 GIS,不懂这个库到底有什么用,或者和 python有什么关系。但是你要玩 GIS,RS,你就应 当知道这个库的价值。就算你不玩 GIS,我想这个库对你也应该有致命的吸引力。为什么?看下面的介绍吧!    先看看这段 GDAL 主页上的英文介绍吧!    is a translator  library for raster geospatial data formats that  is  released  under  anX/MITstyleOpen  Sourcelicense  by  theOpen  Source  Geospatial  Foundation.  As  a  library,  it  presents  asingle  abstract  data modelto  the  calling  application  for  all  supported  formats.  It  also  comes with  a  variety of usefulcommandline utilitiesfor data translation and processing.  简单地说,GDAL 是一个操作各种栅格 地理数据格式的库。包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入 等不支持)。它使用了一个单一的抽象数据模型就支持了大多数的栅格数据(GIS对栅格,矢量,3D 数据模 型的抽象能力实在令人叹服)。当然除了栅格操作,这个库还同时包括了操作矢量数据的另一个有名的库 ogr (ogr 这个库另外介绍),这样这个库就同时具备了操作栅格和矢量数据的能力,买一送一,这么合算的买 卖为什么不做。最最最重要的是这个库是跨平台的,开源的!如今这个库对各种数据格式的支持强大到令 人啧啧的地步了。如果你对他的强大有什么怀疑的话,看看这里一大串的 GDAL 所支持格式清单,吓到了吧! 再看看它的主页最后那些使用了它作为底层数据处理的软件列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 吧!其中你可以不知道 GRASS,你也可以 不知道 Quantum GIS (QGIS),但是你总该知道 Google Earth 吧!不知道?赶快下一个去玩玩--会当临绝顶, 一览众山小!    有人说我又不玩 GIS。不错,但是,你即使不玩 GIS,这个库也是满有用的。首先,哪个库支持这么多 栅格(图片)格式,哪个库在 C/C++/python/ruby/VB/java/C#(这个暂时不完全支持)下都能用,而且都一样用? 退一步讲,3S 软件又不一定要用在 3S 下(很多医学影像就是用 PCI 软件来处理的)。再退一步,你的生活 即使和 3S一点关系都没有,栅格数据又不单单只有 GIS下才用到。你大可用这个库来读取 jpg,gif,tif,xpm 等格式。而且对各种格式支持得不是一般的好,很大一部分非 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 格式照样支持得非常好。我曾经在 java 下玩过 jai,以及一系列 jai的扩展库,一些图像格式在很多图片浏览器中都可以正确读取(有的甚至不是非 标准格式),用 jai死活就读不出来!    这个库的 python 版和其他的 python 库结合的很好。最直接、明显的支持是使用 Numeric库来进行数据 读取和操作。各种矩阵魔术可以发挥得淋漓尽致(图像其实就是矩阵)。而且按我的观点,python 对矩阵的 操作比其他的语言有明显的优势。写出来的东西比其他语言写出来的短小的多,而且好看得多。并且 python 的弱类型在处理栅格数据格式类型的时候代码量比强类型的语言少了数倍(不用 double,byte,short 等等 分开处理,这简直就是先天上的优势)。所以我就喜欢用 python 做图像的处理。所以就连 GIS界的微软 ESRI 也直接在 ARCGIS9 中用 python 来作栅格数据的导入导出。一句话,真是太方便啦!  2.  安装  2.1. windows下的安装  官方安装文档在这里。下面是我自己的实践步骤:    先去 http://www.gdal.org/dl/下一个版本,解压。  打开控制台,输入: “D:\Program Files\Microsoft Visual  Studio .NET 2003\Vc7\bin\vcvars32.bat"  注册 vc的编译环境。    打  开 gdal文件夹下的 nmake.opt 修改 GDAL_HOME =  "C:\warmerda\bld"把路径改到需要把 gdal安装的 3    地方。不改也可以。这里需要添加 python 支持,所以修改 PY_INST_DIR = $(GDAL_HOME)\pymod 把路径改成 python 下的 Lib\site‐packages文件夹下。PYDIR = "C:\Software\Python24"  改成 python 的安装路径。  下面的 参数爱改什么就把前面的#删除(要看您有没有那些库的源码),注意一下路径就可以了。我是都没改。  后 面就依次运行    Toggle line numbers Toggle line numbers          1 nmake /f makefile.vc        2 nmake /f makefile.vc install        3 nmake /f makefile.vc devinstall  最后最后,还要去 GDAL_HOME 目录下的 bin 文件夹下把 gdal13.dll  (也有可能是 gdal12.dll)copy 到 PY_INST_DIR路径下    到此处就完成安装 gdal(python)的工作。    最后需要注意一下,gdal在.net2005下只能顺利编译 1.2,1.3 以上版本不能顺利编译,有一个地方指针 转换出错。可能是 2005的编译器比以往的严厉一点吧。另外,安装了 QGIS,对编译也有一些影响,主要是 proj 库的冲突,导致一个找不到"d:/program.obj"文件的错误,如果你有静态编译过 proj,那么你可以打开 nmake.opt 修改有关 proj 的设置,如果搞不定,就卸载 QGIS,然后编译,编译后再安装 QGIS.呵呵,还好 QGIS 的体积没有 ArcGIS那么可怕.    2.2. linux 下的安装  linux 下的安装就更简单了。直接    Toggle line numbers Toggle line numbers          1 ./configure        2 make        3 su        4 make install        5 ldconfig  就 ok(默认就已经支持 python)。当然在第一步的时候需要看看是否依赖的库都安装了。如果缺少,就 去安装一个。如果对 configure的条件不理解,就用./configure ‐‐help 看看具体情况。    2.3.  安装其他驱动  这里讲一个安装 hdf4 的驱动的例子(默认情况下 gdal是不安装 hdf4 的),其他驱动应该和这个也差不 了多少吧,可以作为其他的参考。完整步骤如下:    在 windows 下的安装:    从 ftp://ftp.ncsa.uiuc.edu/HDF/HDF/HDF%5FCurrent/bin/windows/下载 42r1‐win.ZIP,解压。    编辑gdal根目录下的nmake.opt,找到“# Uncomment the following and update to enable NCSA HDF Release  4 support.”这一行    把下面两行前面的#去掉,然后改成:    ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  HDF4_DIR = D:\warmerda\42r1‐win\release    #HDF4_LIB = /LIBPATH:$(HDF4_DIR)\lib hd421m.lib    HDF4_LIB = $(HDF4_DIR)\dll\hd421m.lib $(HDF4_DIR)\dll\hm421m.lib \    $(HDF4_DIR)\lib\hd421.lib $(HDF4_DIR)\lib\hm421.lib    4    ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  用HDF4_LIB=/LIBPATH:这种形式似乎可以建立 gdal的库,但是往下编译会出错。而且要把$(HDF4_DIR)\dll 和$(HDF4_DIR)\lib 拷贝到同一个目录下,不然会提示找不到库    你也可以试一试在 D:\Program Files\Microsoft Visual Studio  .NET 2003\Common7\Tools\vsvars32.bat 文件 中添加 HDF4_LIB 路径到“@set LIB=”这行的末尾(不要忘记;的分割符)。    然后找一下"INC="这行,把  ‐I$(HDF4_DIR)\include 加到下一行的末尾(应该也可以在 vsvars32.bat 中添加 路径,不过要重启命令行)。    然后编译吧!祝你好运。    注意:上面的 HDF4_DIR  是我本机的路径,你要根据你自己的路径进行设置(想起我的一个老师说过的 话:“抄人家的作业可以,不要连名字也一起抄走啊  ”    ),下面的$(HDF4_DIR)可以不用改,那个是变量, 会自动替代 HDF4_DIR  路径。    编译成功后,要 HDF4 能运行,还需要两个库,一个是 zlib,一个是 szip,可以到下面两个链接去下载一 个    ftp://hdf.ncsa.uiuc.edu/lib‐external/zlib/1.2/bin    ftp://hdf.ncsa.uiuc.edu/lib‐external/szip/2.0/bin/windows    把这两个库下载后解压,然后设置 PATH系统变量,使得它们在默认状态下也可以被动态链接成功  。    在 Linux 下比在Windows 下简单:    只要用./configure ‐‐help 察看一下打开 HDF4 的编译开关(包括库路径,头文件路径等,看清楚),然后 在./configure  后面加上那个开关以及hdf4的安装路径后就可以了。在configure后gdal会提示是否支持HDF4。  编译后也要把 zlib 和 szip 的动态链接库设置好  。    到此你已经可以用 C/C++来操作 gdal读写 hdf4 的格式了!    最后,为了让 Python能够支持 hdf的读写,别忘了把重新生成安装后的 pymod目录下的内容,还有 gdal13, 还有那两个 hdf的库,还有 zlib,szip 的库拷贝到 Python 的 Lib\site‐packages目录下  。    2.4.  下载  如果你实在玩不转,可以在这里下载已经编译好的 gdal1.3.2 程序库  以及其依赖的其他库,其中包括 hdf4,hdf5 支持,以及 proj,geos插件。注意,这里的 geos是静态链接的,注意版权(geos是 LGPL 的 license)。 hdf4 和 hdf5用的是 release版本。这里是我的 nmake配置文件,你可以对照你的实际情况参考一下。  3.  快速开始  其实在主站的教程里已经有 python的示例了。但是我们还是按照自己的思路来开始吧。    第一步就是打开一个数据集。对于“数据集”这个名词大家可能不会太习惯,但是对于一般的格式来 说,一个“数据集”就是一个文件,比如一个 gif文件就是一个以 gif为扩展名的文件。但是对于众多 RS数 据来说,一个数据集包含的绝对不仅仅是一个文件。对于很多 RS数据,他们把一张图像分成数个图像文件, 然后放在一个文件夹中,用一些额外的文件来组织它们之间的关系,形成一个“数据集”。如果你不理解, 那么就算了,当成 jpg或者 gif文件好了。    下面我们打开一个 tiff 文件(GeoTIFF)。这个文件是我从 GRASS 的示例数据 spearfish 中导出的一个同名 影像数据。    Toggle line numbers Toggle line numbers          1 >>> import gdal        2 >>> dataset = gdal.Open("j:/gisdata/gtif/spot.tif")  5          3 >>> dir(dataset)        4 ['AddBand', 'AdviseRead', 'BuildOverviews', 'FlushCache', 'GetDescription', 'Get        5 Driver', 'GetGCPCount', 'GetGCPProjection', 'GetGCPs', 'GetGeoTransform', 'GetMe        6 tadata', 'GetProjection', 'GetProjectionRef', 'GetRasterBand', 'GetSubDatasets',        7    'RasterCount', 'RasterXSize', 'RasterYSize', 'ReadAsArray', 'ReadRaster', 'Refr        8 eshBandInfo', 'SetDescription', 'SetGCPs', 'SetGeoTransform', 'SetMetadata', 'Se        9 tProjection', 'WriteRaster', '__del__', '__doc__', '__init__', '__module__', '_b      10 and', '_o']      11 >>>  这样我们就打开了这个文件。并且我们可以看到可以供我们调用的函数们(更具体的 API 列表可以看这 里)。现在我们不做修改,不做添加,所以只要带有 Set 开头的函数以及有Write开头的函数我们暂时都不管。 因为 RS影像必然要和地理上的位置挂上钩,才能把图像正确铺展到一个坐标系中。其中的信息和对应关系 有点复杂,不适合在快速开始中介绍,我们暂时也先不管。这里需要注意的就是几个函数。    GetDescription  获得栅格的描述信息。    Toggle line numbers Toggle line numbers          1 >>> dataset.GetDescription()        2 'j:/gisdata/gtif/spot.tif'        3 >>>  看来这里的图像描述是图像的路径名,但是这是和各种不同数据集相关的,不同数据集可能有不同的 描述。这要看读取驱动的实现作者的高兴了。    RasterCount  获得栅格数据集的波段数。    GetRasterBand  获得栅格数据集的波段。    Toggle line numbers Toggle line numbers          1 >>> dataset.RasterCount        2 1        3 >>> band = dataset.GetRasterBand(1)        4 >>>  这里需要解释的是 Band这个词。这个词可以翻译成“波段”,“通道”等等。我这里把它统一称为“波 段”。因为遥感卫星的传感器有很多个。一个传感器只负责接收一个频率范围的地物反射光波,一个频率范 围的光波记录称为一个波段。是不是晕了?其实说得简单一点。其实你可以把波段看成红绿蓝几种颜色。 图像不是分 RGB三色吗?把 R,G,B值都提取出来成为三个表。R值表就是波段一,G值表就是波段二,B 值表就是波段三。    这里我们看到这张图只有一个波段(一种颜色)。就可以把它看成是一个灰度图(类似黑白照片)。如果 RasterCount 是 3,就有可能是彩色图。如果 RasterCount 是比 3大的数,恭喜你,你看到一张遥感影像。有 很多卫星的传感器大于 3 个,比如 TM 就有 7 个波段,不仅有可见光,还有红外等其他非可见光。,所以, 波段一般比 RGB 能表达的丰富地多。不过这样一来就需要我们从中挑出 3 个波段然后组合成 RGB,当然这 样就有可能使图像显示出来的东西不像平常我们看到的那样。这样安排是因为对科学有帮助(一些波段在科 学家眼里比真实的彩色照片有价值)。不理解就跳过,很正常,我第一次听这种东西也觉得很玄:)    这里我们获取了第一个波段(红色值组成的表)。注意!这里的波段获取和通常的 C数组获取不一样,开 始是 1 不是 0。获取了波段,我们就可以在下面的操作中读取这个波段的所有数值。    RasterXSize  图像的宽度(X 方向上的像素个数)    RasterYSize  图像的高度(Y方向上的像素个数)    Toggle line numbers Toggle line numbers          1 >>> dataset.RasterXSize  6          2 950        3 >>> dataset.RasterYSize        4 700        5 >>>  可以看出我们的图像大小是 950*700。还是很小的一张图。    ReadRaster  读取图像数据(以二进制的形式)    ReadAsArray  读取图像数据(以数组的形式)    Toggle line numbers Toggle line numbers          1 >>> help(dataset.ReadRaster)        2 Help on method ReadRaster in module gdal:        3 ReadRaster(self, xoff, yoff, xsize, ysize, buf_xsize=None, buf_ysize=None, buf_t        4 ype=None, band_list=None) method of gdal.Dataset instance        5 >>> help(dataset.ReadAsArray)        6 Help on method ReadAsArray in module gdal:        7 ReadAsArray(self, xoff=0, yoff=0, xsize=None, ysize=None) method of gdal.Dataset        8    instance        9 >>>  这两个函数很重要,它们直接读取图像的数据,可以看到两个函数的帮助中有一大溜的参数。解释一 下:  xoff,yoff,xsize,ysize  你可能不想读取整张图像。只想读取其中的一部分。那么就用 xoff,yoff 指定想要 读取的部分原点位置在整张图像中距离全图原点的位置。用 xsize和 ysize指定要读取部分图像的矩形大小。    buf_xsize buf_ysize  你可以在读取出一部分图像后进行缩放。那么就用这两个参数来定义缩放后图像最 终的宽和高,gdal将帮你缩放到这个大小。    buf_type  如果你要读取的图像的数据类型不是你想要的(比如原图数据类型是 short,你要把它们缩小成 byte),就可以设置它。    band_list  这就适应上面多波段的情况。你可以指定读取的波段序列。要哪几个波段,不要哪几个波段, 你说了算。    举个例子吧:    Toggle line numbers Toggle line numbers          1 >>> dataset.ReadAsArray(230,270,10,10)        2 array([[255, 255, 255, 232, 232, 255, 255, 255, 255, 222],        3                [255, 255, 255, 255, 255, 255, 210, 110,    11, 122],        4                [255, 255, 255, 255, 255, 255, 210, 255,    11, 243],        5                [201, 255, 255, 255, 255, 200, 200, 110, 122, 243],        6                [111, 211, 255, 201, 255, 255, 100,    11, 132, 243],        7                [255, 100, 100, 100, 110, 100, 110, 111, 122, 243],        8                [255, 255, 255, 255, 255, 255, 122, 222, 255, 255],        9                [255, 255, 255, 255, 255, 255, 243, 243, 255, 255],      10                [255, 255, 255, 255, 255, 255, 255, 255, 255, 255],      11                [255, 255, 255, 255, 255, 255, 255, 255, 255, 255]],'b')      12 >>> dataset.ReadRaster(230,270,10,10)      13 '\xff\xff\xff\xe8\xe8\xff\xff\xff\xff\xde\xff\xff\xff\xff\xff\xff\xd2n\x0bz\xff\      14 xff\xff\xff\xff\xff\xd2\xff\x0b\xf3\xc9\xff\xff\xff\xff\xc8\xc8nz\xf3o\xd3\xff\x      15 c9\xff\xffd\x0b\x84\xf3\xffdddndnoz\xf3\xff\xff\xff\xff\xff\xffz\xde\xff\xff\xff      16 \xff\xff\xff\xff\xff\xf3\xf3\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff  7        17 \xff\xff\xff\xff\xff\xff\xff\xff\xff'      18 >>>  我们就把图像中位于 230,270,宽度 10 高度 10 的数据读取出来了。    我们看完了数据集的主要函数。似乎已经够用了。的确,如果只是为了显示图像,这些的确已经够了。 但是如果需要更多信息,我们就不得不进入波段操作数据(实际上我们大多数时候都需要进入 band 获取信 息)。下面我们现在来看看刚才读取出来的那个 band 有些什么东西可以供我们操作的(具体的 API 列表看这 里)。    Toggle line numbers Toggle line numbers          1 >>> dir(band)        2 ['AdviseRead', 'Checksum', 'ComputeBandStats', 'ComputeRasterMinMax', 'DataType'        3 , 'Fill', 'FlushCache', 'GetDefaultHistogram', 'GetDescription', 'GetHistogram',        4    'GetMaximum', 'GetMetadata', 'GetMinimum', 'GetNoDataValue', 'GetOffset', 'GetO        5 verview', 'GetOverviewCount', 'GetRasterColorInterpretation', 'GetRasterColorTab        6 le', 'GetScale', 'GetStatistics', 'ReadAsArray', 'ReadRaster', 'SetDefaultHistog        7 ram', 'SetDescription', 'SetMetadata', 'SetNoDataValue', 'SetRasterColorInterpre        8 tation', 'SetRasterColorTable', 'WriteArray', 'WriteRaster', 'XSize', 'YSize', '        9 __doc__', '__init__', '__module__', '_o']      10 >>>  挑几个有用的吧。    Toggle line numbers Toggle line numbers          1 >>> band.XSize        2 950        3 >>> band.YSize        4 700        5 >>> band.DataType        6 1        7 >>>  不用解释了吧,波段图像的宽和高(象元为单位)。DataType,图像中实际数值的数据类型。具体数据类 型定义在 gdalconst 模块里。使用的时候用 import gdalconst 引入。    Toggle line numbers Toggle line numbers          1 >>> import gdalconst        2 >>> dir(gdalconst)        3 ['CE_Debug', 'CE_Failure', 'CE_Fatal', 'CE_None', 'CE_Warning', 'CPLES_Backslash        4 Quotable', 'CPLES_CSV', 'CPLES_SQL', 'CPLES_URL', 'CPLES_XML', 'CPLE_AppDefined'        5 , 'CPLE_AssertionFailed', 'CPLE_FileIO', 'CPLE_IllegalArg', 'CPLE_NoWriteAccess'        6 , 'CPLE_None', 'CPLE_NotSupported', 'CPLE_OpenFailed', 'CPLE_OutOfMemory', 'CPLE        7 _UserInterrupt', 'CXT_Attribute', 'CXT_Comment', 'CXT_Element', 'CXT_Literal', '        8 CXT_Text', 'DCAP_CREATE', 'DCAP_CREATECOPY', 'DMD_CREATIONDATATYPES', 'DMD_CREAT        9 IONOPTIONLIST', 'DMD_EXTENSION', 'DMD_HELPTOPIC', 'DMD_LONGNAME', 'DMD_MIMETYPE'      10 , 'GA_ReadOnly', 'GA_Update', 'GCI_AlphaBand', 'GCI_BlackBand', 'GCI_BlueBand',      11 'GCI_CyanBand', 'GCI_GrayIndex', 'GCI_GreenBand', 'GCI_HueBand', 'GCI_LightnessB      12 and', 'GCI_MagentaBand', 'GCI_PaletteIndex', 'GCI_RedBand', 'GCI_SaturationBand'      13 , 'GCI_Undefined', 'GCI_YellowBand', 'GDT_Byte', 'GDT_CFloat32', 'GDT_CFloat64',      14    'GDT_CInt16', 'GDT_CInt32', 'GDT_Float32', 'GDT_Float64', 'GDT_Int16', 'GDT_Int  8        15 32', 'GDT_TypeCount', 'GDT_UInt16', 'GDT_UInt32', 'GDT_Unknown', 'GF_Read', 'GF_      16 Write', 'GPI_CMYK', 'GPI_Gray', 'GPI_HLS', 'GPI_RGB', 'GRA_Bilinear', 'GRA_Cubic      17 ', 'GRA_CubicSpline', 'GRA_NearestNeighbour', '__builtins__', '__doc__', '__file      18 __', '__name__']      19 >>>  那些 GDT开头的就是数值数据类型。    Toggle line numbers Toggle line numbers          1 >>> band.GetNoDataValue()        2 65535.0        3 >>> band.GetMaximum()        4 >>> band.GetMinimum()        5 >>> band.ComputeRasterMinMax()        6 (1.0, 255.0)        7 >>>  Maximum  是表示在本波段数值中最大的值,Minimum 当然就是表示本波段中最小的值啦。我们可以看 到在一开始这两个都没有值。因为对于文件格式不会有固有的最大最小值。所以我们通过函数 ComputeRasterMinMax 计算得到了。注意!这里的最大最小值不包括“无意义值”!也就是上面显示的 NoDataValue。需要解释一下“无意义值”。不要以为 0 或者 255 在任何情况下都无意义。在很多情况下 0, 255 需要和其他值一样表示一个实际意义。虽然可能它最终会被显示得和黑色一样。而一些位置上的点要表 示的意思是“什么也不是”,它在那个位置上只是为了占一个位置,使得整体图像看起来像个矩形而已。在 做实际应用的时候两种值的处理将会完全不一样。所以需要设置无意义值,来和其他的值区别开来。而用 ComputeRasterMinMax算出的最大最小值,是排除了无意义值后计算出来的最大最小值。    Toggle line numbers Toggle line numbers          1 >>> band.GetRasterColorInterpretation()        2 2        3 >>> gdalconst.GCI_PaletteIndex        4 2        5 >>> colormap = band.GetRasterColorTable()        6 >>> dir(colormap)        7 ['Clone', 'GetColorEntry', 'GetColorEntryAsRGB', 'GetCount', 'GetPaletteInterpre        8 tation', 'SetColorEntry', '__del__', '__doc__', '__init__', '__module__', '__str        9 __', '_o', 'own_o', 'serialize']      10 >>> colormap.GetCount()      11 256      12 >>> colormap.GetPaletteInterpretation()      13 1      14 >>> gdalconst.GPI_RGB      15 1      16 >>> for i in range(colormap.GetCount()):      17 ...          print colormap.GetColorEntry(i),      18 ...      19 (0, 0, 0, 255) (0, 0, 28, 255) (0, 0, 56, 255) (0, 0, 85, 255) (0, 0, 113, 255)      20 (0, 0, 142, 255) (0, 0, 170, 255) (0, 0, 199, 255) (0, 0, 227, 255) (0, 0, 255,      21 255) (0, 28, 0, 255) (0, 28, 28, 255) (0, 28, 56, 255) (0, 28, 85, 255) (0, 28,  9        22 113, 255) (0, 28, 142, 255) (0, 28, 170, 255) (0, 28, 199, 255) (0, 28, 227, 255      23 ) (0, 28, 255, 255) (0, 56, 0, 255) (0, 56, 28, 255) (0, 56, 56, 255) (0, 56, 85      24 , 255) (0, 56, 113, 255) (0, 56, 142, 255) (0, 56, 170, 255) (0, 56, 199, 255) (      25 0, 56, 227, 255) (0, 56, 255, 255) (0, 85, 0, 255) (0, 85, 28, 255) (0, 85, 56,      26 255) (0, 85, 85, 255) (0, 85, 113, 255) (0, 85, 142, 255) (0, 85, 170, 255) (0,      27 85, 199, 255) (0, 85, 227, 255) (0, 85, 255, 255) (0, 113, 0, 255) (0, 113, 28,      28 255) (0, 113, 56, 255) (0, 113, 85, 255) (0, 113, 113, 255) (0, 113, 142, 255) (      29 0, 113, 170, 255) (0, 113, 199, 255) (0, 113, 227, 255) (0, 113, 255, 255) (0, 1      30 42, 0, 255) (0, 142, 28, 255) (0, 142, 56, 255) (0, 142, 85, 255) (0, 142, 113,      31 255) (0, 142, 142, 255) (0, 142, 170, 255) (0, 142, 199, 255) (0, 142, 227, 255)      32    (0, 142, 255, 255) (0, 170, 0, 255) (0, 170, 28, 255) (0, 170, 56, 255) (0, 170      33 , 85, 255) (0, 170, 113, 255) (0, 170, 142, 255) (0, 170, 170, 255) (0, 170, 199      34 , 255) (0, 170, 227, 255) (0, 170, 255, 255) (0, 199, 0, 255) (0, 199, 28, 255)      35 (0, 199, 56, 255) (0, 199, 85, 255) (0, 199, 113, 255) (0, 199, 142, 255) (0, 19      36 9, 170, 255) (0, 199, 199, 255) (0, 199, 227, 255) (0, 199, 255, 255) (0, 227, 0      37 , 255) (0, 227, 28, 255) (0, 227, 56, 255) (0, 227, 85, 255) (0, 227, 113, 255)      38 (0, 227, 142, 255) (0, 227, 170, 255) (0, 227, 199, 255) (0, 227, 227, 255) (0,      39 227, 255, 255) (0, 255, 0, 255) (0, 255, 28, 255) (0, 255, 56, 255) (0, 255, 85,      40    255) (0, 255, 113, 255) (0, 255, 142, 255) (0, 255, 170, 255) (0, 255, 199, 255      41 ) (0, 255, 227, 255) (0, 255, 255, 255) (28, 0, 0, 255) (28, 0, 28, 255) (28, 0,      42    56, 255) (28, 0, 85, 255) (28, 0, 113, 255) (28, 0, 142, 255) (28, 0, 170, 255)      43    (28, 0, 199, 255) (28, 0, 227, 255) (28, 0, 255, 255) (28, 28, 0, 255) (28, 28,      44    28, 255) (28, 28, 56, 255) (28, 28, 85, 255) (28, 28, 113, 255) (28, 28, 142, 2      45 55) (28, 28, 170, 255) (28, 28, 199, 255) (28, 28, 227, 255) (28, 28, 255, 255)      46 (28, 56, 0, 255) (28, 56, 28, 255) (28, 56, 56, 255) (28, 56, 85, 255) (28, 56,      47 113, 255) (28, 56, 142, 255) (28, 56, 170, 255) (28, 56, 199, 255) (28, 56, 227,      48    255) (28, 56, 255, 255) (28, 85, 0, 255) (28, 85, 28, 255) (28, 85, 56, 255) (2      49 8, 85, 85, 255) (28, 85, 113, 255) (28, 85, 142, 255) (28, 85, 170, 255) (28, 85      50 , 199, 255) (28, 85, 227, 255) (28, 85, 255, 255) (28, 113, 0, 255) (28, 113, 28      51 , 255) (28, 113, 56, 255) (28, 113, 85, 255) (28, 113, 113, 255) (28, 113, 142,      52 255) (28, 113, 170, 255) (28, 113, 199, 255) (28, 113, 227, 255) (28, 113, 255,      53 255) (28, 142, 0, 255) (28, 142, 28, 255) (28, 142, 56, 255) (28, 142, 85, 255)      54 (28, 142, 113, 255) (28, 142, 142, 255) (28, 142, 170, 255) (28, 142, 199, 255)      55 (28, 142, 227, 255) (28, 142, 255, 255) (28, 170, 0, 255) (28, 170, 28, 255) (28      56 , 170, 56, 255) (28, 170, 85, 255) (28, 170, 113, 255) (28, 170, 142, 255) (28,      57 170, 170, 255) (28, 170, 199, 255) (28, 170, 227, 255) (28, 170, 255, 255) (28,      58 199, 0, 255) (28, 199, 28, 255) (28, 199, 56, 255) (28, 199, 85, 255) (28, 199,      59 113, 255) (28, 199, 142, 255) (28, 199, 170, 255) (28, 199, 199, 255) (28, 199,      60 227, 255) (28, 199, 255, 255) (28, 227, 0, 255) (28, 227, 28, 255) (28, 227, 56,      61    255) (28, 227, 85, 255) (28, 227, 113, 255) (28, 227, 142, 255) (28, 227, 170,      62 255) (28, 227, 199, 255) (28, 227, 227, 255) (28, 227, 255, 255) (28, 255, 0, 25      63 5) (28, 255, 28, 255) (28, 255, 56, 255) (28, 255, 85, 255) (28, 255, 113, 255)      64 (28, 255, 142, 255) (28, 255, 170, 255) (28, 255, 199, 255) (28, 255, 227, 255)      65 (28, 255, 255, 255) (56, 0, 0, 255) (56, 0, 28, 255) (56, 0, 56, 255) (56, 0, 85  10        66 , 255) (56, 0, 113, 255) (56, 0, 142, 255) (56, 0, 170, 255) (56, 0, 199, 255) (      67 56, 0, 227, 255) (56, 0, 255, 255) (56, 28, 0, 255) (56, 28, 28, 255) (56, 28, 5      68 6, 255) (56, 28, 85, 255) (56, 28, 113, 255) (56, 28, 142, 255) (56, 28, 170, 25      69 5) (56, 28, 199, 255) (56, 28, 227, 255) (56, 28, 255, 255) (56, 56, 0, 255) (56      70 , 56, 28, 255) (56, 56, 56, 255) (56, 56, 85, 255) (56, 56, 113, 255) (56, 56, 1      71 42, 255) (56, 56, 170, 255) (56, 56, 199, 255) (56, 56, 227, 255) (56, 56, 255,      72 255) (56, 85, 0, 255) (56, 85, 28, 255) (56, 85, 56, 255) (56, 85, 85, 255) (56,      73    85, 113, 255) (56, 85, 142, 255) (56, 85, 170, 255) (56, 85, 199, 255) (56, 85,      74    227, 255) (56, 85, 255, 255) (56, 113, 0, 255) (56, 113, 28, 255) (56, 113, 56,      75    255) (56, 113, 85, 255) (56, 113, 113, 255) (56, 113, 142, 255) (56, 113, 170,      76 255) (56, 113, 199, 255) (56, 113, 227, 255) (56, 113, 255, 255) (56, 142, 0, 25      77 5) (56, 142, 28, 255) (56, 142, 56, 255) (56, 142, 85, 255) (56, 142, 113, 255)      78 (56, 142, 142, 255)      79 >>>  通过 GetRasterColorInterpretation,我们知道我们的图像是一个颜色表索引的图像而不是纯粹的黑白灰 度图像(PaletteIndex,其他的颜色模型,可以察看 gdalconst 模块中 GCI 打头的枚举值)。这意味着我们读出 的数据有可能不是真实的数据。这些数据只是一个个实际数据的索引。真实数据存储在另一个表中。我们 通过 ReadRaster 读出的数据值只是对应到这个表的一个索引而已。我们需要通过读出这些数据,并在真实 数据表中找出真实数据,重新组织成一个 RGB 表才能用来绘制。如果我们不经过对应,我们绘制出来的东 西可能什么东西都不是。    用 GetRasterColorTable 获得了颜色表,通过 GetPalet
本文档为【GDAL库学习笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_850013
暂无简介~
格式:pdf
大小:490KB
软件:PDF阅读器
页数:44
分类:工学
上传时间:2012-05-11
浏览量:58