APP下载

基于ArcObject的遥感影像裁剪探讨

2018-12-06张广耀王蕾

中华建设 2018年11期
关键词:栅格多边形矩形

张广耀 王蕾

近年来,随着3S技术的快速发展,遥感数据的应用突飞猛进。通常,遥感影像在应用之前需要进行正射处理,而处理后影像的数据量较大,不便后续应用,为此在应用前需按照特定的需要进行裁切。目前,现有的大型商业软件像ArcGIS、Erdas等都提供有影像裁剪的功能。此外,国内的MAPGIS-RSP、EV-Manager等也都有所涉及。

尽管以上所提到的相关软件都具有影像裁剪的功能,但是这些软件不管是安装还是使用,专业性都较强,对于那些不具备专业知识的普通用户来说无疑是一大障碍,从而使得遥感影像的应用受到限制。基于此,本文利用ArcObject,在开源环境Eclipse下,编程实现了多种方式的遥感影像裁剪,以期能满足广大用户的需求。

一、ArcObject组件及开发技术

ArcObject是由美国环境系统研究所开发的一套可重用的二次开发组件集,是ArcGIS软件的核心。使用AO可以直接搭建自己GIS的功能模块,大大扩展ArcGIS功能。

利用ArcObject进行二次开发有两种常见的模式:

1.VBA定制

在ArcCatalog和ArcMap应用程序中绑定有VBA编译器,使用VBA可以方便、简洁地定制个性化程序界面、个性化工具栏并能扩展部分地理功能,但其不足是独立性差,功能较单一。

2.COM组件开发

ArcObject的另一个开发模式就是应用COM技术。ArcObject为组件式开发提供了框架,利用目前流行的编程语言,开发者可以实现商业GIS软件的所有功能。COM的出现使软件的开发与组织达到了新的高度,它是一种强有力的集成技术,可以在运行程序时把各种分散的软件模块组织在一起,使应用程序在更高的程度上被定制,使软件更灵活、更具动态性。图1为COM的工作过程。

图1 COM工作过程

二、影像裁剪功能设计

考虑到现实需求,再加上Java语言的健壮性、安全性、分布式等一系列优良特性,本文采取在Java平台下,结合ESRI提供的ArcObject.jar包,设计按矩形、多边形、行政边界、矢量文件、栅格文件等影像裁剪模块。

按矩形裁剪,用户只需在裁剪前按需要自定义好矩形四个顶点的坐标,然后点击“裁剪”按钮即可实现。

多边形裁剪,一方面用户可以根据需要在影像上画出多边形,然后以该多边形为模板进行裁剪;另一方面用户还可以把已有的ROI或AOI(感兴趣区域)文件作为模板,与待裁剪影像叠加,从而实现裁剪。

按行政边界和按已有矢量文件裁剪本质上是一样的,按矢量文件裁剪是用户在裁剪前输入已有矢量文件,服务器从该矢量文件上获取一特性,然后以该特性为模板进行裁剪。而按行政边界裁剪只是已有矢量文件为某一(或某几)个行政区域罢了,所以也可以认为行政边界裁剪是已有矢量文件裁剪的特殊情况。不过,需要注意的是,这种裁剪方式要求矢量文件和影像文件的投影类型必须一致。

此外,用户还可以拿已有的栅格文件做模板,而去裁剪另外的栅格影像。

三、影像裁剪功能实现

1.实现方案

在Java平台下AO包里提供了两个类:Clip类和ExtractByRectangle类,利用它们均可实现影像的矩形裁剪。其中Clip类位于数据管理工具子包内,是ESRI专门为栅格影像提供的按矩形进行裁剪的一个类,调用前需定义好它的三个属性,即inRaster、rectangle、outRaster。ExtractByRectangle类位于空间分析工具子包内,它是通过提取待裁剪影像的像元实现影像的裁剪。其不足就是以像元的中心来判断该像元是否在矩形范围内,如果一个像元的中心在矩形范围内,而其中一部分在矩形范围外,那么它就认为该像元整个就位于矩形内,这样裁剪后的影像子集就会不准确。同时,对于一个多波段影像来说,裁剪后默认的输出格式为ESRI grid stack,该格式的命名有严格的限制,从而给用户带来不必要的麻烦。相反,Clip类在这些方面则表现出巨大的优势,基于此,本文采用Clip类实现影像的矩形裁剪。

同样,AO在空间分析工具包里还提供了ExtractByPolygon类,利用它,可以像ExtractByRectangle类那样采取抽取像元的方法实现影像的多边形裁剪。但是,该类同样具有像ExtractByRectangle类那样的不足,因此,本文不采用它,而是采用另外一个类ClipFilter来同时实现影像的多边形、行政边界以及按已有矢量文件裁剪,其不仅简单并且效率也较高。

对于上文我们提到的Clip类,其作用远不只是仅仅能实现矩形裁剪,它还可以根据已有栅格数据模板去裁剪其他影像数据。基于此,本文采用它来实现按已有栅格文件裁剪的功能。

综上所述,本文在Java平台下基于ArcObject来实现设计的影像裁剪模块,其中影像裁剪的流程如图2所示。

图2 影像裁剪流程图

2.功能设计实现

根据以上方案,本文在开源环境Eclipse下采用Java语言编程实现了遥感影像的裁剪功能。为了验证裁剪功能的可行性,利用现有的遥感影像数据以及相关的矢量数据进行了实验,实验数据包括以tiff格式存储的中巴影像和美国陆地卫星的ETM影像。图3展示的是对ETM影像进行矩形裁剪后的结果并与原数据对比。

图3 ETM影像矩形裁剪后的结果并与原数据对比图

实验结果表明,本文设计并实现的遥感影像裁剪模块切实可行且效率较高,基本满足用户的现实需求。

四、结语

本文以ArcObject组件库为基础,根据现实需要,设计了遥感影像的裁剪模块,然后利用Java编程实现了该模块的功能,最后结合相关影像数据对相关功能进行了有效验证。当然,如果把该功能发布成网络服务的形式以供用户调用,将会更进一步促进遥感影像的广泛应用,同时也就要涉及到其他相关知识,所以还需进一步的研究。

猜你喜欢

栅格多边形矩形
多边形中的“一个角”问题
基于邻域栅格筛选的点云边缘点提取方法*
矩形面积的特殊求法
基于A*算法在蜂巢栅格地图中的路径规划研究
多边形的艺术
解多边形题的转化思想
化归矩形证直角
多边形的镶嵌
从矩形内一点说起
不同剖面形状的栅格壁对栅格翼气动特性的影响