为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 基于 ARCGIS ENGINE 的水下地形等高线断线连接技术

基于 ARCGIS ENGINE 的水下地形等高线断线连接技术

2017-11-18 11页 doc 99KB 27阅读

用户头像

is_260251

暂无简介

举报
基于 ARCGIS ENGINE 的水下地形等高线断线连接技术基于 ARCGIS ENGINE 的水下地形等高线断线连接技术 基于 ArcGIS Engine 的水下地形等高线断线连接技术 研究与实现 张琴,安如 南京市河海大学水资源环境学院, 江苏南京,210098, E-mail:shuiqin1016@sina.com 摘 要: ArcGIS Engine 作为 ESRI 公司最新推出的嵌入式组件~具有高效便捷的特点~由 于其开发时完全脱离了 ArcGIS 桌面平台~因而为用户提供了一个可供选择的~有针对性的~ 低成本的 GIS 应用选择。本文在简要介绍 ArcGIS...
基于 ARCGIS ENGINE 的水下地形等高线断线连接技术
基于 ARCGIS ENGINE 的水下地形等高线断线连接技术 基于 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- 装桌面版,从而减小了定制和开发的约束,降低了用户使用成本。 (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- 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…。 VC++环境下利用 ArcGIS Engine 图 1 设计的简单界面 在对等高线进行操作时首先需要获得其图层所对应的要素集,即 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- „„ { ipFeatureCursor->NextFeature(&ipFeature); } (2) 针对每个线对象搜索能与其连接的线 ,定义搜索线和连接线几 IGeometryPtr ipGeometry,ipConnectGeometry; 何类型 IPointCollectionPtr ipCollection,ipConnectCollection; ,定义点集 ,通过 CoClass 将几何类 ipCollection=ipGeometry; 型设置为点集 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- 距离约束产生的错误 图 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;iNextFeature(&ipFeature); } 4. 实验结果与讨论 本次实验采用 ArcGIS Engine 技术在 VC++开发环境下对水下地形不连续的等高线进行 了连接操作,效果较好,效率也较高,实验结果如下: 等高线断线原图 图 3 图 4 连接断线结果图 实验中采用了基于最小距离和最小方向约束相结合的方法,结果表明角度和距离阈值的 变化是相互制约的,当角度一定,增大缓冲区半径时,搜索到的线对象可能并不是实际应该 -5- 连接的对象,而距离一定的情况下,角度增大时也会出现连错的情况。 不连续的等高线 图 5 图 6 角度约束和距离约束的矛盾 采用 ArcGIS Engine 不仅使得系统运行效率较高,且不需要安装庞大的 ArcGIS 桌面版, 仅需要在自己的系统中嵌入特定的 GIS 功能,采用自己熟悉的编程语言进行开发即可。本 文介绍了组件式 GIS,AO、AE 技术,并以水下地形等高线的断线连接为实例,探讨了基于 AE 利用 VC++6.0 进行应用程序开发的方法,对实践有一定的借鉴意义。 -6- 参考文献 [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. Environmental Systems Research Institute Inc,2002. [5] ESRI ArcObject Developer Help[Z], 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-
/
本文档为【基于 ARCGIS ENGINE 的水下地形等高线断线连接技术】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索