APP下载

基于ArcGIS Engine的栅格数据批量处理方法

2016-12-28张建永梁春利石海岗张春雷

地理空间信息 2016年10期
关键词:批量栅格投影

张建永,梁春利,石海岗,张春雷

(1.核工业航测遥感中心,河北 石家庄 050002)

基于ArcGIS Engine的栅格数据批量处理方法

张建永1,梁春利1,石海岗1,张春雷1

(1.核工业航测遥感中心,河北 石家庄 050002)

基于ArcGIS 的二次开发工具包ArcGIS Engine,从栅格数据检查、坐标系统定义、投影转换、范围裁切等方面,介绍了对栅格数据各类信息读写和调用ArcGIS工具的批量处理方法,并在实践中取得了很好的效果,为实际应用及扩展提供了技术基础。

栅格数据;批处理;ArcGIS Engine;Dot NET

在常用的遥感数据格式中,ERDAS软件的Image文件是一种较为常见的格式,具有可存储多种类型数据(图像数据、统计数据、直方图、专题图等)、存储信息丰富(传感器、投影、地理、分层、分块等)、读写方便、图像算法易实现等特点,是栅格数据的常用格式。在国内外多种遥感、地理信息软件平台中,对该格式都有较好的支持。本文基于ArcGIS软件的开发工具包(ArcGIS Engine),探讨海量ERDAS Image格式文件的批量处理方法,通过搭建流程化的处理框架,为快速、高效、准确完成栅格数据处理工作提供思路。

1 批量处理方法分析

1.1 ArcGIS批处理模式

ArcGIS平台中的各类图像处理工具本身具有批量处理的功能。在工具上点击右键,选择“Batch”,即可弹出批量处理对话框。该模式为ArcGIS平台批量处理的通用模式,但每次只能执行一个工具,对需要进行处理的数据和处理后数据的存放目录、文件命名都有一定要求,限制较多。而日常的数据处理工作大都不满足这样的条件。

1.2 空间建模

ArcGIS平台带有Model Builder模型构建器,可以将一系列处理工具串联在一起构成工作流。模型的构建包括数据处理工具和数据源,以流程图的形式表示,相当于一种图形化编程。通过建立模型,对技术人员的要求大大降低,能够重复使用,减少重复性的工作。但迭代器的使用有较大限制,且仅能调用ArcGIS自身的工具,在实际应用中灵活性不足。

1.3 二次开发

ArcGIS提供了二次开发组件函数,支持Python、 Perl、Java、Dot NET(C#、VB)等多种开发语言,能够方便实现各类数据处理功能。从各种开发语言功能强弱、实现的难易程度、兼容性、可扩展性等方面综合考虑,基于ArcGIS Engine + Dot NET的开发是解决海量数据批处理行之有效的方法。在开发的过程中,还可以依据用户实际需求,灵活实现对数据的条件选择、多个工具之间组合处理、质量检查、错误判断、进度控制等功能。

2 ArcGIS Engine简介

ArcGIS Engine 是 ESRI ArcGIS软件中推出的一组完备的嵌入式 GIS 组件库和工具库,供开发人员创建新的或扩展已有的桌面应用程序。与ArcObjects相比,ArcGIS Engine 的结构合理灵活,具有更为强大的开发功能和独立性。

ArcGIS Engine的开发包包括了控件、工具命令集和对象库3个部分,涉及了低层次的API和高层次的控件。同时通过GeoProcessor可以方便调用ArcGIS自身工具包。基于这些优点,开发者能将ArcGIS功能快速集成到GIS 解决方案中,开发出功能强大、适应各种需求的 GIS 程序和系统,给开发人员带来了极大的灵活性和便利。

3 程序体系结构及流程

本文以Visual Studio.NET 2010为开发平台,采用VB可视化编程语言,建立基于 ArcGIS Engine 10组件的栅格数据批量检查处理模块,主要实现对栅格数据的文件完整性检查、坐标系统检查、坐标系统定义、投影转换、范围裁切、属性统计等功能,如图1。

文件完整性检查用于检查栅格文件是否创建了金字塔,影像文件是否损坏,文件行列数、像素类型、像素深度、波段数、像元大小等信息与元数据是否一致。

坐标系统检查用于判断栅格文件是否存在空间参照坐标系统。如果存在,检查影像范围是否满足空间参照的坐标范围区间;如果不存在,则获取影像的坐标范围区间,为设置该影像的坐标系统提供参考。

坐标系统定义用于影像文件丢失空间参照的情况。判断影像文件坐标范围是否为地理坐标区间或含带号的投影坐标区间,是则利用ArcGIS工具设定其坐标系统;不是则将该文件编号写入文件记录,后续人工进行检验。

图1 程序体系结构图

投影转换是将影像的地理坐标系统或投影坐标系统转换为目标文件投影的过程。依据转换前后不同的坐标类型,转换中使用的计算模型也不同。

范围裁切是根据目标范围,对栅格影像进行裁切的过程。目标范围可以是矩形,也可以是不规则形状的矢量文件。

信息统计是对裁切后的成果文件进行统计,包括建立金字塔,获取影像的坐标范围、行列数、波段数等信息并写入到元数据文件中。

4 主要功能实现

4.1 栅格数据检查

在栅格数据的存储转换中,由于文件尺寸较大,可能存在数据缺失或损坏的情况。因此在数据数据处理前,要先判断数据是否完整。通过创建栅格数据集的方式打开文件,并读取文件的属性信息,来检查文件的完整性。通过IWorkspaceFactory、IRasterWorkspace、IRasterDataset、Iraster等接口打开栅格文件,利用 IRasterDataset、IRaster、IRasterBandCollection、IRawBlocks、IRasterInfo、IRasterPorps、IRasterPyramid等接口获取栅格文件的波段信息、像元尺寸、行列数、坐标范围、数据类型、文件格式等属性信息,检查是否与数据自身的元数据一致。

打开文件的主要功能如下:

pRasterWorkSpace = pWorkSpaceFactory.OpenFrom File(FolderName, 0)

//利用栅格数据的工作空间工厂和栅格数据工作空间,访问栅格数据文件夹

pRasterDataset =pRasterWorkSpace.OpenRaster Dataset(FileName)

//利用栅格工作空间,打开栅格文件,返回值是栅格数据集

Dim pRaster As IRaster = pRasterDataset2.CreateFullRaster

/

/在内存中创建栅格数据的实例,获取栅格数据的具体内容

获取栅格文件属性信息的主要功能如下:

Dim pRasterBandCollection As IRasterBandCollection = pRasterDataset

//定义栅格波段集合的变量,用于访问栅格文件的各个波段

Dim pRawBlocks As IRawBlocks = pRasterBandCollection. Item(0)

//定义数据块变量,用于读取栅格数据

Dim pRasterInfo As IRasterInfo = pRawBlocks.RasterInfo

//定义栅格文件信息变量,用于访问各类详细的栅格文件信息

利用IRasterInfo接口的CellSize、Extent、Height、Width、Format、PixelType等属性获取栅格文件的对应信息。

4.2 坐标系统检查

栅格文件的坐标系统信息能够表明栅格文件的空间位置,是其重要的组成部分。数据处理过程中,需要通过影像的坐标系统信息来判断该文件是否处于数据处理的范围内。坐标系统的检查分为两步,首先判断影像是否存在坐标系统,其次判断坐标系统是否准确。

通过获取影像的空间坐标参照信息,判断是否存在坐标系统:

Dim pRasterProps As IRasterProps = pRaster

//定义栅格文件属性变量,用于访问栅格文件的属性

Dim pRasterSPR As ISpatialReference = pRasterProps. SpatialReference

//定义空间参照变量,用户检查栅格数据的坐标系统是否正确

如果栅格影像的坐标参照为空,则pRasterSPR的Abbreviation、Alias、Remarks等属性值为空;Name属性值为"Unknown"。

如果栅格影像的坐标参照不为空,则判断其类型是地理坐标系统或者投影坐标系统。同时检查栅格文件的坐标范围是否与相应的坐标系统值域范围匹配,以便进行后续坐标转换工作。

4.3 调用ArcGIS工具

栅格数据的数据处理工作如投影转换、范围裁切等可以直接调用ArcGIS软件的工具进行。ArcGIS Engine中可以利用ESRI.ArcGIS.Geoprocessor类中的Geoprocessor接口来调用ArcGIS自带的工具。调用时首先设置工具的各项参数,然后通过Geoprocessor接口的Execute方法执行工具,利用GetMessage方法返回工具执行过程中的状态信息。

4.4 定义文件坐标系统

如果栅格文件缺失坐标信息,需要设定其坐标系统。通过检查影像文件的坐标范围,判断采用的坐标系统类型及对应的椭球体等参数来进行坐标系统的设定。如为投影坐标系统还需通过影像的坐标范围判断栅格文件的中央经度,确定投影参数。设定坐标系统的过程主要利用ESRI.ArcGIS.DataManagementTools类中的DefineProjection接口进行,通过设定2个参数,即需要处理的文件和对应的坐标系统,可完成该功能。

Dim pDefineProjection As ESRI.ArcGIS.DataManagement Tools.DefineProjection = New DefineProjection

//定义一个投影设置工具,用于设置栅格数据的坐标信息,下面为相应的参数设置

pDefineProjection.in_dataset = pCurrentRasterFile

pDefineProjection.coor_system = strProj

GP.Execute(pDefineProjection, Nothing)

4.5 投影转换

若现有文件的坐标系统与要求不同,则需进行投影转换。投影转换功能可以将地理坐标系统或投影坐标系统转换为投影坐标系统。投影转换功能主要利用ESRI.ArcGIS.DataManagementTools类中的ProjectRaster接口来实现,通过设定该接口的输入栅格、输出栅格、输出坐标系统3项参数来进行投影转换。同时可以利用像元尺寸(cell_size)、重采样方式(resampling_ type)2个属性参数对输出栅格的影像进行调整。如果坐标转换前后的坐标系统涉及2个椭球体,则需要设定椭球之间的转换模型,即geographic_transform参数。如1954年北京坐标系与WGS84之间的转换,不同的地理位置选用不同的转换模型,如Beijing_1954_To_ WGS_1984_1、Beijing_1954_To_WGS_1984_2等。

Dim ProjectRasterDataset As ProjectRaster = New ProjectRaster

//定义一个投影转换工具,下面为相应的参数设置

ProjectRasterDataset.in_raster = pCurrentRasterFile

ProjectRasterDataset.out_raster = pReprojectOutRasterFile

ProjectRasterDataset.out_coor_system = pProjectFeature ClassSPR

4.6 范围裁切

栅格数据范围裁切是截取所需要的一定坐标范围内的栅格数据的功能。栅格范围裁切可以利用空间分析工具(ESRI.ArcGIS.SpatialAnalyst)中的IExtractionOp接口、数据管理工具(ESRI.ArcGIS. DataManagementTools)中的Clip接口来实现,但二者应用的情形不同。IExtractionOp接口可以基于多边形要素对栅格文件进行裁切,Clip接口是基于坐标范围进行裁切。本文的裁切范围主要是基于标准图幅范围外扩,所以利用Clip接口更为方便快捷。设定Clip接口的输入栅格、输出栅格及输出范围3个参数,即可实现该操作。

Dim pDataManagementClip As Clip = New Clip

//定义一个裁切工具,用于对栅格数据进行范围裁切,下面为相应的参数设置

pDataManagementClip.in_raster = inRaster

pDataManagementClip.out_raster = pTempOutFileName

pDataManagementClip.rectangle = XMin & " " & YMin & " " & XMax & " " & YMax

5 实 验

依据上述思路,作者编写了栅格数据批量处理的模块,界面如图2所示。经过实验,利用该模块进行数据处理不仅能保证数据的准确性和精度,且处理效率有很大提高,能够进行大批量的自动处理,有效节约人员成本,缩短处理时间。

P208

B

1672-4623(2016)10-0043-03

10.3969/j.issn.1672-4623.2016.10.012

2016-01-18。

项目来源:中国地质调查局国产卫星数据质量改进与地矿综合应用示范项目(1212011220158)。

猜你喜欢

批量栅格投影
基于邻域栅格筛选的点云边缘点提取方法*
批量提交在配置分发中的应用
解变分不等式的一种二次投影算法
基于最大相关熵的簇稀疏仿射投影算法
基于A*算法在蜂巢栅格地图中的路径规划研究
找投影
找投影
基于VBA井斜数据批量校正方法
在数控车床上批量钻铰孔类工件的实践
不同剖面形状的栅格壁对栅格翼气动特性的影响