




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【开源库GDAL及其在影像拼接中的应用】arcgis影像拼接 摘 要本文概要介绍了网上优秀的GIS开源库GDAL _与主要功能,然后针对遥感影像处理中的经常用到的数据拼接处理问题,用示例说明了GDAL库进行GIS系统开发的方法与过程。 关键词GDAL OGR 影像拼接 TPA1007-9416(xx)02-0088-02 1 引言 目前,越来越多的开源GIS系统出现在互联网上,这些开源的源代码系统有IBM、GDAL、SharpMap、QGIS等一些重量级的软件公司和一些软件开放基金会的支持,其中的很多软件经过众多软件爱好者与志愿者的千锤百炼,具有很好的软件质量,这些开源的GIS系统是GIS开发者一个巨大的知识与财富宝库,是全人类的共同财富,包括ESRI、Google等公司的很多算法与模块都于这些开源库。中国也已经成为地学开源软件基金会(OSGeo)的成员1。很好地使用这些开源资源,对于我国GIS开发者学习掌握成熟、高效的GIS常用算法,提高我国GIS软件的原创水平具有重要的意义。在这众多的开源GIS系统中,GDAL是公认的佼佼者之一。GDAL库有多个版本,其中包括C+、C#、JAVA、.NET等。可以用来用于操作各种栅格地理数据格式。当然除了栅格操作,这个库还同时包括了另外一个库OGR,OGR包括了操作矢量数据的所有方法,这样这个库就同时具备了操作栅格和矢量数据的能力。同时,GDAL还是一个跨平台的开源库。 影像拼接是将两张或多张(具有重叠显示的连续影像)拼接显示的过程2。影像拼接是GIS软件的基本功能之一,它包括影像数据读取、显示、拼接、裁切等一系列操作,是遥感影像处理软件的入门但常用功能,本文通过对该功能的实现,提供了用GDAL进行系统开发的简单范例,展示了GDAL的强大功能和方便的开发步骤。 2 GDAL库介绍 1998年末, _的Frank Warmerdam 开始了GDAL(Geospatial Data Abstraction Library)项目的编写工作3。该项目得到了许多个人和团体的支持,主要的赞助团体有Cadcorp、Safe Software、SRC、i-cubed、Ingres Corporation等。GDAL是一个独立的专业的开源库,并且是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式,还有一系列命令行工具来进行数据转换和处理。OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。有很多著名的GIS类产品包括ESRI的ArgGIS 9.2,Google Earth和跨平台的GRASS GIS系统都使用了GDAL/OGR开源库的若干模块。利用GDAL/OGR库,可以使基于Linux的地理空间数据管理系统提供对矢量和栅格文件数据的支持4。 2.1 GDAL的类框架 GDAL提供对多种栅格数据的支持,包括Arc/Info的ASCII Grid(asc),GeoTiff (tiff),Erdas Imagine Images(img),ASCII DEM(dem) 等格式。GDAL使用抽象数据模型(abstract data model)来解析它所支持的数据格式,抽象数据模型包括数据集(dataset)、坐标系统、仿射地理坐标转换(Affine Geo Transform)、大地控制点(GCPs)、元数据(Metadata)、栅格波段(Raster Band)、颜色表(Color Table)、子数据集域(Subdatasets Domain)、图像结构域(Image_Structure Domain)、XML域(XML:Domains)等。 GDAL的核心类结构设计如图1所示: 其中的类说明如下: GDALMajorObject类:带有元数据的对象。 GDALDdataset类:通常是从一个栅格文件中提取的相关联的栅格波段集合和这些波段的元数据;GDALDdataset也负责所有栅格波段的地理坐标转换(georeferencing transform)和坐标系定义。 GDALDriver类:文件格式驱动类,GDAL会为每一个所支持的文件格式创建一个该类的实体,来管理该文件格式。 GDALDriverManager类:文件格式驱动管理类,用来管理GDALDriver类。 2.2 GDAL的主要功能 GDAL作为一个优秀的开源库,它提供了标准的二次开发接口,包括读取、写入、转换、处理多种栅格数据格式,同时它提供完全公开的源代码,为用户进行二次开发和底层的功能扩展提供了很高的起点。GDAL使用了一个单一的抽象数据模型来支持大多数类型的栅格数据5,GDAL支持的数据格式有BMP、JPEG、 GTiff、 HFA、BT、 ECW、FITS、GIF、HDF4、EHdr等。这也是GDAL的一个最重要的功能。 在打开GDAL所支持的光栅数据之前需要注册驱动。这里的驱动是针对GDAL支持的所有数据格式。通常可以通过调用GDALAllRegister()函数来注册所有已知的驱动。然后需要根据不同的数据格式获取相应的驱动。例如: GDALDriver * driver=NULL; CString format = “dataformat”; if (format = bmp) driver = GetGDALDriverManager()-GetDriverByName(BMP); else if (format = jpg) driver = GetGDALDriverManager()-GetDriverByName(JPEG); else if (format = tif) driver = GetGDALDriverManager()-GetDriverByName(GTiff); else if (format = img) driver = GetGDALDriverManager()-GetDriverByName(HFA); . 在获取相应驱动后,通过GDALDriver类提供的函数进行创建GDALDataset,然后利用GDALDataset类进行数据的读写和地理参数的设置。一个GDALDataset包含了光栅数据的一系列的波段信息。同时它还包含元数据、一个坐标系统、投影类型、光栅的大小以及其他许多信息。其中地理参数包含以下几个方面: adfGeoTransform0/* 左上角 x */ adfGeoTransform1/* 东西方向一个像素对应的距离*/ adfGeoTransform2/* 旋转, 0表示上面为北方*/ adfGeoTransform3/* 左上角 y */ adfGeoTransform4/* 旋转, 0表示上面为北方*/ adfGeoTransform5/* 南北方向一个像素对应的距离*/ 3 影像拼接 像数据应用的过程中,人们获得的原始数据通常是分片的,在构建应用中,常常需要对这些分片的原始数据进行拼接,然后根据不同要求把瓦片数据拼接成一幅或多幅影像数据。影像镶嵌的目标就是要产生一个视觉可行的全景图像,便于更好地统一处理、解译、分析和研究6。本文所用实例就是在GDAL库的基础上进行影像数据拼接的一个应用。 本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 本文影像拼接所用数据大小均为256256瓦片,它们的名称均采用Google QRST命名规则。 本文实例应用所用技术主要有以下几点: (1)根据数据块的名称,设计算法求出该数据块在整个图幅中的行列号,同时根据数据块名称的长度求得该图层在所在金字塔中的级数。 Void FindRowAndCol(CString filename, int &row, int &col, int &level) char tempchar; static int length = 0; filename = filename.MakeLower(); tempchar = filename.GetAt(0);/获取文件名的第一个字母 if(length = 0) length = filename.GetLength(); level = length - 1; filename = filename.Right(filename.GetLength()-1); if(tempchar = t)/判断文件名的第一个字母是否为t row = 2*row; col = 2*col; FindRowAndCol( filename, row, col, level );/递归查找 else if(tempchar = s) /判断文件名的第一个字母是否为s row = 2*row ; col = 2*col + 1; FindRowAndCol( filename, row, col, level ); /递归查找 else if(tempchar = q) /判断文件名的第一个字母是否为q row = 2*row + 1; col = 2*col; FindRowAndCol( filename, row, col, level ); /递归查找 else if(tempchar = r) /判断文件名的第一个字母是否为r row = 2*row + 1; col = 2*col + 1; FindRowAndCol( filename, row, col, level ); /递归查找 (2)根据中的算法遍历所有数据块,求出所有数据块的最大最小行列号,从而得出整个图幅的范围。然后根据需要拼接图幅的大小把整个图幅划分成多个子图幅,然后根据各个子图幅的范围创建不同的数据集。主要函数有: GDALAllRegister(); /注册所有已知的驱动 GDALDriver*GetGDALDriverManager()-GetDriverByName(const char*)/获取驱动 GDALDataset *GDALDriver-Create( const char * pszName,int nXSize, int nYSize,intnBands,GDALDataType eType,char * papszOptions);/创建数据集 (3)遍历每一个数据块,通过数据块的名称求出应该插入到子图幅的索引号以及在子图幅中的偏移量。最后把该数据块写入到子图幅所对应的数据集。主要函数有: Int getMergeImageBlockIndex(Cstring filename,int &rowoffsetInImageBlock,Int &coloffsetInImageBlock) ;/获取子图幅的索引号以及在子图幅中的偏移量 bool isMergeImageBlockExist(int index) ;/判断子图幅数据集是否存在 bool createMergeImageBlockExist(int index);/若子图幅不存在创建子图幅数据集 GDALRasterBand GDALDataset-GetRasterBand( int );/获取一个影像波段 GDALRasterBand-RasterIO(GDALRWFlag, int, int, int, int, void *, int, int, GDALDataType,int, int );/读写栅格数据的方法 GDALClose(GDALDataset); /关闭数据集 图2为遥感影像拼接前的数据块,图3为遥感影像拼接后的图幅。 4 结语 本文通过影像拼接模块的开发实例介绍了开源软件GDAL的功能与开发方法。GDAL不仅在栅格数据处理上有很强的功能,在矢量数据处理方面也有不俗的表现,由于篇幅有限,针对OGR的主要功能在此不做详细阐述。希望本文能对GDAL开源库在国内的广泛应用起到抛砖引玉的作用。 _ 1 陈荣国,孙剑.OSGeo在中国J.软件世界,xx.10.20,40-41. 2 ER Mapper.使用指南EB/OL.(xx-1-11). .省略/ermapper/gb/support/user-guide/user-guide.htm 3 Frank Warmerdam.GDAL - Geospatial Data Abstraction Lib
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 连锁快餐店AI应用行业跨境出海项目商业计划书
- 休闲食品健康食用营养成分分析创新创业项目商业计划书
- 自助式中式快餐吧企业制定与实施新质生产力项目商业计划书
- 企业视频宣传片行业跨境出海项目商业计划书
- 河南推拿职业学院《临床疾病概要》2023-2024学年第二学期期末试卷
- 铁质补血口服液行业深度调研及发展项目商业计划书
- 会晤接待管理制度
- 会计台账管理制度
- 会计统计管理制度
- 湖南高尔夫旅游职业学院《逻辑推理证明》2023-2024学年第二学期期末试卷
- 2025-2030中国食物病原体检测行业市场发展趋势与前景展望战略分析研究报告
- 托里县铁厂沟镇工业固废垃圾填埋场项目环境影响报告书
- 中草药种植技术课件
- T/CHES 63-2022活塞式调流调压阀技术导则
- T/CCMA 0048-2017二手工程机械评估师
- 传染病防治法试题(答案)
- 家居建材联盟协议书
- 2024北京海淀区六年级(下)期末语文试题及答案
- 无人机航线规划与飞行策略试题及答案
- 2025年全国保密教育线上培训考试试题库带答案(典型题)含答案详解
- 亚历山大大帝传
评论
0/150
提交评论