您好,欢迎来到保捱科技网。
搜索
您的当前位置:首页基于ArcGIS Engine 的水下地形等高线断线连接技术研究与实现

基于ArcGIS Engine 的水下地形等高线断线连接技术研究与实现

来源:保捱科技网
http://www.paper.edu.cn

基于ArcGIS Engine的水下地形等高线断线连接技术

研究与实现

张琴,安如

南京市河海大学水资源环境学院, 江苏南京(210098)

E-mail:shuiqin1016@sina.com摘 要: ArcGIS Engine作为ESRI公司最新推出的嵌入式组件,具有高效便捷的特点,由于其开发时完全脱离了ArcGIS桌面平台,因而为用户提供了一个可供选择的,有针对性的,低成本的GIS应用选择。本文在简要介绍ArcGIS Engine特点的基础上,对水下地形等高线的断线连接问题进行了研究和实现,并阐述了使用ArcGIS Engine技术在VC++环境下连接不连续等高线的具体实现过程。 关键词: ArcGIS Engine,等高线,断线连接

1. 引 言

地理信息系统的软件技术正日益迅猛发展,随着对空间数据需求的增加,把GIS与嵌入式组件技术结合形成一个的嵌入式地理空间集成平台是当前GIS研究领域的重要趋势,而基于COM技术的ArcObjects为GIS发展提供了前所未有的灵活性,软件开发者只要有一个可编程的GIS工具包,在构建应用时提供常规的GIS功能即可[1]。ESRI公司将ArcObjects和MapObjects合并而成的ArcGIS Engine为用户提供了有针对性的GIS功能,利用ArcGIS Engine进行GIS应用开发时彻底脱离了ArcGIS桌面平台,提供了新的,更为有效的开发GIS方式。

在传统CAD制图中,等高线的表达由于存在地形要素交叉和覆盖等现象,存在大量断点,理论上应完整且闭合的线对象被打散成许多间隔不等的短线[2],这样的等高线数据在转入GIS时无法建立正确的空间拓扑关系,且数据冗余较大,不能直接加以利用,如何尽可能地将这些间隔不等的断线转入GIS系统后进行自动连接是数据转换过程中首先需要解决的问题。本文利用ArcEngine在VC++6.0编程环境下实现对水下地形等高线数据由CAD转入GIS后断线的自动连接,对于探讨ArcGIS Engine的实践应用具有一定的借鉴意义。

2. 开发关键技术

2.1 ArcGIS Engine开发技术

由ESRI公司推出的基于COM技术的组件对象库ArcObjects集成了几乎全部的GIS应用,现今基于ArcGIS的开发多数都是利用AO语言。但AO不是的应用产品,必须依附于GIS桌面应用程序,用户必须安装ArcMap,ArcCatalog等桌面软件才可以运行AO程序,这使得利用AO开发时的成本大大增加。ArcGIS Engine则是由AO中的核心组件集单独封装出来,可以脱离ArcGIS桌面版单独运行的组件库,能在各种编程接口中调用,减小了用户的使用费用。利用ArcGIS Engine进行GIS的二次开发具有相当大的研究价值和发展前景,其主要特点有:

(1) 完整的嵌入式GIS组件库:ArcGIS Engine提供了内核操作、显示操作、分析操作、数据存取操作、空间对象操作、系统操作、输出操作等组件群,利用这些组件群,可以搭建一个客户化的服务平台。很多情况下,用户可能只需要在自己的系统平台中实现部分特定的GIS功能,而不需要全套功能的ArcGIS桌面版,按照以往的AO开发要求,用户是必须安装庞大的ArcGIS桌面版的,而ArcGIS Engine推出后,开发者就可以在自己的集成环境下构建某些特定的GIS功能,将需要用到的GIS功能嵌入到自己的集成环境中,而不需要安

- 1 -

http://www.paper.edu.cn

装桌面版,从而减小了定制和开发的约束,降低了用户使用成本。

(2) 支持多种开发环境:ArcGIS Engine可以在Windows,UNIX,和Linux桌面上运行并支持一系列的应用软件开发环境,例如:COM,Visual Basic 6,C++,Microsoft Visual Studio .NET,Java等开发环境,使开发者能够跨操作系统,在多种开发构架下灵活的进行选择,开发者可以采用自己熟悉的编程语言和开发环境,从而降低了开发难度,提高了应用程序的开发效率。

(3) 开发方便快捷:ArcGIS Engine包含一个构建定制应用的开发包,开发者只需在自己的计算机上安装此工具包就可以很方便地进行开发。同时ArcGIS Engine通过在开发环境中添加控件、工具、菜单条和对象库,在应用中嵌入GIS功能,可扩展性较强。

2.2 断线连接技术

目前GIS系统的数据源仍旧大量的来源于测绘部门的CAD格式数据,而在早期的CAD制作过程中,并没有考虑到等高线在GIS中连续且闭合的需求,CAD格式的等高线仅仅为了满足出图的需要被打散成间隔不等的断线,且高程属性信息仅仅以标注的形式表达,这些数据转入GIS后根本无法满足空间分析的需求,因此必须先将大量的断线进行初步的连接。近几年来,等高线信息的自动提取问题已有了突破性进展,但现有研究中采用的实验数据一般是基于等高线比较连续的情况,仅存在局部特殊的断点,各种匹配算法也主要在对一些成因较简单的断点进行处理时能取得较好的效果,而针对CAD转入GIS系统时大量断线数据的批处理连接还没有较好的方法。

已有的断线连接方法很多,主要包括基于费曼码的断线连接,基于数学形态学膨胀与收缩原理的断线连接法,基于等高线空间关系结构约束的最大集团图搜索法以及顾及拓扑关系的连接方法等[3],这些方法都是从纯算法角度解决断线连接问题。而随着地理信息系统的广泛应用,如何充分应用GIS系统中的空间分析功能进行基于空间拓扑关系的断线连接技术成为新的研究切入点。

GIS中提供了强大的空间拓扑关系的定义和分析功能,如相交、相离、包含等,使得原本利用数学方法表达起来及其复杂的空间位置关系在GIS中可以用比较简单的语句进行判断。主要还是采用GIS本身的COM组件来实现针对空间对象的操作,通过组件中定义的接口来获得对象及其相应的属性,因此在GIS平台下进行断线连接技术的研究与实现具有方便快捷的特点。

本文针对大批量的水下地形等高线数据由CAD格式转入GIS系统时的断线连接问题,探讨了基于最短距离和最小角度约束的断线连接技术,即完全基于线与线之间的空间位置关系,将距离最近,沿延长线方向角度变化最小的线进行连接,主要算法过程设计如下:

(1) 以每根等高线对象的终点为圆心,一定长度阈值为半径做缓冲,计算落入缓冲区内的其它线对象的个数;

(2) 若落入缓冲区的线对象正好是一根且满足角度约束条件,则直接连接; (3) 若多于一根,则减小缓冲区半径;

(4) 若没有线对象落入缓冲区,则增加缓冲区半径,当增加到给定的最大半径时仍没有搜索到满足条件的线对象时表明已经到达图幅边缘,此时停止搜索。

本次实验主要用于“江苏江河道监测管理系统”中大量等高线数据由CAD转入GIS时的数据处理工作,仅仅用到少量GIS功能,因此选择采用ArcGIS Engine组件将所需要的功能嵌入到自己的应用程序中。

- 2 -

http://www.paper.edu.cn

3. 算法实现及技术流程

使用ArcGIS Engine开发的首要步骤是将与地图有关的控件加入到用户界面中,从而可以方便的对地图对象进行操作,在VC++中,通过组件库和控件结合开发程序时,使用Add To Project加入控件。一般只需要加入ESRI MapControl,ESRI TOCControl和ESRI ToolbarControl三个控件即可满足用户对地图对象的各种操作[4]。采用ArcGIS Engine在VC++环境中编程还需要引用C++ 头文件(.h),并且导入Engine开发包,将Engine资源包含到程序中,如…\\Program Files\\ArcGIS\\include\\CPPAPI…。

图1 VC++环境下利用ArcGIS Engine设计的简单界面

在对等高线进行操作时首先需要获得其图层所对应的要素集,即FeatureClass,然后才能针对要素集中的每一个要素进行操作。获得FeatureClass的方法有多种,在已知图层的情况下可以通过IFeaturLayer接口的get_FeatureClass方法得到,而针对Layer的操作则需要通过IMapControl接口获取。

连接断线操作主要分以下几步: (1) 获得等高线图层对应的对象

针对图层操作只要获得IMapControl接口就可以获得图中所有对象,图层所对应的FeatureClass就可以获得,FeatureClass中对应的每一个Feature的类型、状态等属性都可以得到,从而对其进行空间分析操作,在C++编程环境下获得Feature的主要方法如下: ILayerPtr ipLayer;

IFeatureLayerPtr ipFeatureLayer; IFeatureClassPtr ipFeatureClass; IFeaturePtr ipFeature;

IFeatureCursorPtr ipFeatureCursor;

pMapControl->get_Layer(0,&ipLayer); '通过获得的MapControl得到第一个图层 ipFeatureLayer=ipLayer; 'IFeatureLayer和ILayer通过接口传递地址 ipFeatureLayer->get_FeatureClass(&ipFeatureClass); '获得等高线图层对应的FeatureClass ipFeatureClass->Search(NULL,false,&ipFeatureCursor); '获得指向图层对象的指针 ipFeatureCursor->NextFeature(&ipFeature); '指向图层中第一个对象

while(ipFeature!=NULL) '设置循环使指针不断指向下一个对象,直到搜索不到对象时跳出循环

- 3 -

http://www.paper.edu.cn

{ ……

ipFeatureCursor->NextFeature(&ipFeature); }

(2) 针对每个线对象搜索能与其连接的线

IGeometryPtr ipGeometry,ipConnectGeometry; '定义搜索线和连接线几何类型

IPointCollectionPtr ipCollection,ipConnectCollection; '定义点集

ipCollection=ipGeometry; '通过CoClass将几何类型设置为点集

ipConnectCollection= ipConnectGeometry; …… ……

ipCollection->AddPointCollection(ipConnectCollection); '当搜索到唯一一根连接线用IPointCollection中的AddPointCollection方法直接将连接线的点集加到搜索线中即可将两线合并。

(3) 判断连接线条件

首先以距离为约束条件,找到离搜索线最近的线对象,具体操作过程是以每条线的终点做Buffer,判断其余线对象的起点落入缓冲区的个数,当多于一个时减小半径,没有线对象落入缓冲区时增加半径,直到搜索到唯一一根线对象跳出循环,从下一根搜索线开始搜索。

从等高线图中可以量测出断线的一般间隔为15,做缓冲区时给定的半径只要稍大于这个值即可,给定初始缓冲区半径distance=20,获取搜索线终点ipEndPoint和连接线起点ipStartPoint后进行以下判断:

ITopologicalOperatorPtr ipTopOperator;

IGeometryPtr ipBufferGeometry,ipPointGeometry; IPolygonPtr ipPolygon;

ipTopOperator=ipEndPoint; '以搜索线终点做缓冲区

ipTopOperator->Buffer(distance,&ipBufferGeometry); '返回缓冲区面区域 IRelationalOperatorPtr ipRelOperator; '空间拓扑关系接口 ipPolygon=ipBufferGeometry; ipRelOperator=ipPolygon; ipPointGeometry=ipStartPoint; VARIANT_BOOL contains;

ipRelOperator->Contains(ipPointGeometry,&contains); '判断连接线起点是否在缓冲区内,当contains==-1时返回值为TURE

但实际操作中距离搜索线最近的并不一定是理论上应该连接的线对象,例如下图所示:

- 4 -

http://www.paper.edu.cn

图2 距离约束产生的错误

因此在距离约束的同时还需要加入角度约束条件,即连接线起始两点连线的方向与搜索线最后两点连线的延长线方向应为最小。因此程序中设置了一个函数用于判断连接线是否满足角度约束条件,其定义如下:

BOOL CContour:: SameDirect(double dAngle,IGeometryPtr pGeometryAB,IGeometryPtr pGeometryCD)

两个Geometry对象分别为搜索线和连接线,dAngle为给定的角度阈值,本次实验中取tan 10°,即0.1763,只有搜索线同时满足距离和角度约束条件才进行连接,否则不连。

(4) 更新指针

在每连接完一根线后,图中的线对象数量会减少一个,且需要删除连接过的线对象,否则将造成数据大量冗余,循环时指针同时需要更新。

ipFeatureClass->Update(NULL,true,&ipFeatureCursor); for(int i=0;iipFeatureCursor->NextFeature(&ipFeature); }

4. 实验结果与讨论

本次实验采用ArcGIS Engine技术在VC++开发环境下对水下地形不连续的等高线进行了连接操作,效果较好,效率也较高,实验结果如下:

图3 等高线断线原图 图4 连接断线结果图

实验中采用了基于最小距离和最小方向约束相结合的方法,结果表明角度和距离阈值的变化是相互制约的,当角度一定,增大缓冲区半径时,搜索到的线对象可能并不是实际应该

- 5 -

http://www.paper.edu.cn

连接的对象,而距离一定的情况下,角度增大时也会出现连错的情况。

图5 不连续的等高线 图6 角度约束和距离约束的矛盾

采用ArcGIS Engine不仅使得系统运行效率较高,且不需要安装庞大的ArcGIS桌面版,仅需要在自己的系统中嵌入特定的GIS功能,采用自己熟悉的编程语言进行开发即可。本文介绍了组件式GIS,AO、AE技术,并以水下地形等高线的断线连接为实例,探讨了基于AE利用VC++6.0进行应用程序开发的方法,对实践有一定的借鉴意义。

- 6 -

http://www.paper.edu.cn

参考文献

[1] 朱 政.通过ArcGIS Engine构建GIS应用[Z],ESRI中国北京有限公司.

[2] 张 斌. 基于ArcGIS Engine的GIS开发技术[J],武汉大学研究生学报(自然科学版),2004,3(21) :173-176.

[3] 陈 丹,龙 毅.基于知识的等高线断点连接方法[J].测绘信息与工程,2003,28(3) ,31-33. [4] 吴 玮,李小帅,张斌. 基于ArcGISEngine的GIS开发技术探讨[J].科学技术与工程, 2006,6(2):176-178. [5] ESRI ArcObject Developer Help[Z],Environmental Systems Research Institute Inc,2002.

Study and Implementation of Joining Underwater Topography Discontinuous Lines Based on ArcGIS Engine

Zhang Qin,An Ru

Geographical Information Science Department Water Resource and Environment College

HoHai University,1 Xi Kang Road,Jiangsu, Nanjing,China(210098) Abstract

As an embedded component produced by ESRI, ArcGIS Engine offers a convenient and efficiency way of developing GIS getting rid of ArcGIS desktop fully. It provides client with a choice of GIS Applying which is lower cost, specifical and lightweight. This paper describes and implement the method of joining underwater topography discontinues contour lines on the environment of VC++ using ArcGIS Engine.

Keywords: ArcGIS Engine, contour, Broken-line linking

作者简介:

张琴,南京市河海大学水资源环境学院地图学与地理信息系统专业硕士研究生;

安如,南京市河海大学水资源环境学院地图学与地理信息系统专业硕士生导师, 副教授。

- 7 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoaiwan.cn 版权所有 赣ICP备2024042794号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务