SuperMap Objects组件式GIS开发技术浅析

引言

随着GIS应用领域的扩展,GIS开发工作日显重要。一般地,从平台和模式上划分,GIS二次开发主要有三种实现方式:独立开发、单纯二次开发和集成二次开发。上述的GIS应用开发方式各有利弊,其中集成二次开发既可以充分利用GIS工具软件对空间数据库的管理、分析功能,又可以利用其他可视化开发语言具有的高效、方便等优点,集二者之所长,不仅能大大提高应用系统的开发效率,而且使用可视化软件开发工具开发出来的应用程序具有更好的外观效果、更强大的数据库功能,而且可靠性好,易于移植,便于维护。尤其是使用COM技术利用GIS功能组件进行集成二次开发更能表现出这些优势,也日渐成为主流的二次开发方式[1][2]。

COM是指组件对象模型(Component Object Model),是以Win32动态链接库(DLL)或可执行文件(EXE)形式发布的Windows二进制标准,是一种允许对象之间跨进程、跨计算机进行交互的技术,并且使得这种交互容易得好像在本地计算机同一进程中进行一样[3]。COM定义了一种基础性接口,这种接口为所有以COM为基础的技术提供了公共函数。

1 组件式地理信息系统

1.1 组件式GIS技术及特点

1.1.1 组件式GIS技术

组件式地理信息系统(ComGIS)是指基于组件对象平台,以一组具有某种标准接口的、允许跨语言应用的组件的形式提供基本功能的GIS,它是面向对象技术和组件式软件在GIS软件开发中的应用[4][6]。其基本思想是把GIS的各大功能模块划分为几个控件,不同控件完成不同的功能。各个GIS控件之间,以及GIS控件与其它非GIS控件之间,可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS应用。传统GIS软件与用户或者二次开发者之间的交互,一般通过菜单或工具条按钮、命令以及二次开发语言进行,ComGIS与用户和客户程序之间则主要通过属性、方法和事件交互。如图1所示。使用ComGIS开发的主导思想就是让GIS组件做GIS的工作,其他功能让其他的组件去完成,GIS组件与其他组件之间的联系由可视化的通用开发语言(如Visual C#或Delphi等)来建立[1][4][5]。

1 SuperMap Objects组件构成

1.1.2 组件式GIS特点

组件式GIS开发技术主要有以下几个方面的特点[1][5][6][7][8]:

  1. 无须专门的GIS开发语言,便于开发。ComGIS采用标准的组建技术,目前流行的开发语言(如VB、VC、CB与C#)等都支持这些规范。只要熟悉其中一门语言就可进行开发,有利于减轻开发者负担和降低开发成本。
  2. 无缝集成和扩展。ComGIS独立于开发语言,具有统一规范,主要完成GIS相关功能,ComGIS可以在程序设计阶段与其它功能的组件进行代码级别上的无缝集成和扩展。
  3. 小巧灵活,价格便宜。由于ComGIS灵活的可裁剪性,用户可以根据应用需求仅选择购买必要的组件进行开发,以获得更高的性价比。
  4. 强大的GIS功能,应用更加大众化。ComGIS开发模式能够使程序开发人员尽快地转移到GIS应用开发中来,同时也可使专业人员将自己的专业知识迅速转化为GIS组件,这样使得GIS的功能越来越强大,便于GIS软件推广和大众化。

由组件式GIS独有的优势,基于组件的开发已成为GIS应用系统建设的主流。

1.2 SuperMap Objects组件式GIS

组件式GIS的代表作应首推ArcEngine、MapX等。其中ArcEngine是由全球最大的GIS厂商ESRI推出的,MapX由著名的桌面GIS厂商MapInfo公司推出的,此外还有Intergraph公司的Geomedia。国内主要有超图公司的SuperMap GIS6R、泰坦公司的TITAN GIS等。本文将着重介绍SuperMap Objects及其开发流程[1][5][8]。

1.2.1 SuperMap Objects组件构成

SuperMap Objects是北京超图公司开发的基于ActiveX/COM技术大型、全组件式开发平台。它由一系列的ActiveX组件构成,包括核心组件(工作空间控件和地图控件)、工作空间管理组件、空间分析组件、布局组件、三维组件、拓扑组件、图例组件、属性表组件、辅助组件等多个组件库。它们是涵盖了数据输入、数据处理、空间数据存储与管理到空间分析、地图排版输出等各个环节的组件,提供从符号定制到地图可视化、从地图编辑采集到空间数据建库、从专题制图到布局输出、从数据转换到空间分析、从二维到三维等全面GIS功能。SuperMap Objects组件之间既互相联系,也保持相对独立性。其中核心组件库是基础的、必选的组件,其他组件全都是可选的。所支持的开发语言有Visual C++、Visual Basic、Visual FoxPro、Delphi、C++ Builder以及Power Builder等。可以将组件自由组合加载到系统之中,利用开发语言实现所需要的GIS功能[6][7][8]。

1.2.2 SuperMap Objects模型对象组织与管理

1)工作空间

工作空间(由工作空间控件创建)是用户在同一个工程中的工作环境,用于保存用户操作和处理的所有数据,包括数据源、地图、三维场景、布局和系统资源等。一个工程中只能有一个工作空间控件。

2)数据源和数据源集合

数据源是存储空间数据的场所,而工作空间并不直接存储空间数据,任何对空间数据的操作都需要先打开并获得数据源。多个数据源构成数据源集合。一个工作空间中可以打开多个数据源,各数据源通过别名或索引来标识。

3)数据集和数据集集合

数据集是空间数据的最小单位。一个数据源通常由多个不同类型的数据集组成。多个数据集构成数据集集合。数据集集合提供对数据集的管理功能,如创建、删除、重命名等操作。按照数据结构的不同,数据集分为矢量数据集和栅格数据集两类。这两种数据集可以共存于同一个数据源中,也可以同时显示在一个地图窗口中。

4)图层和图层集合

当数据集被加载到地图窗口中显示时就形成了图层,图层是数据集的可视化定义,是对数据集的引用或参考,图层可以来自不同数据源中的数据集。一般地,一个图层对应一个数据集,同一个数据集可以被多次添加到不同的地图窗口中显示。多个图层构成图层集合。

5)地图和地图集合

多个图层被赋予一定的风格而显示在一个SuperMap窗口中称为地图。地图是图层的集合,其中保存了图层不同的渲染效果,包括制作过的专题图、各个图层的显示比例尺等。

6)布局

一个或多个地图放置在布局窗口的适当位置,并辅以其它绘图要素如图名、图例、比例尺等就称为布局。布局是数字化空间数据和纸质地图之间的关系映射。SuperMap Objects的模型对象组织与管理结构图、工作空间及其组成部分之间的关系示意图分别如图2、3所示。

2 SuperMap Objects模型对象组织与管理结构图

   

3 工作空间及其组成部分之间的关系示意图   

4 SuperMap Objects组件引用

1.2.3 SuperMap Objects空间数据引擎

除了上述控件外,SuperMap Objects还集成了大型空间数据库引擎SDK+,用于访问不同来源的地理空间及属性数据。不同的引擎适用于不同规模的引用,实现了多源空间数据无缝集成技术。目前,SuperMap SDK+中提供的引擎类型包括三类:数据库引擎(SQL+、Oralcle+、Oralcle Spatial、Sybase、DB2、DM3、Kingbase)、文件引擎(SDB、SDB+)和Web引擎。此外,SuperMap Objects还支持直接访问其它GIS/CAD软件数据格式,如:MicroStation DGN、AutoCAD DXF和DWG和Arc/Info Coverage等。其中,SDB+引擎是SuperMap Objects自定义格式中唯一的文件型空间数据引擎。这种引擎采用传统的文件+数据库混合存储方式。SDB引擎的一个数据工程包括两个文件,扩展名为SDB的文件存储空间数据,采用OLE复合文档技术;扩展名为SDD的文件为属性数据库,采用Access的MDB数据库格式。由于SDB采用了复合文档技术,因此提供了在一个SDB工程中存储多个数据集的能力。这一点与Arc/Info Coverage、MapInfo Table文件等技术不同。SDB特点是速度快,操作灵活,主要面向中、小型系统和桌面应用,目的在于提高效率,弥补纯数据库引擎在这方面的不足[6][9][10]。

2 基于SuperMap Objects的地图浏览程序开发

2.1 引用SuperMap Objects组件

  1. 启动Visual Studio2010,创建一个C#窗体应用程序,并将窗体调整到合适尺寸。
  2. 在“工具箱”上单击鼠标右键,选择“选择项(I)”,会弹出“选择工具箱项”的对话框,在其中切换到“COM组件”选项卡,在列表框中选择“SuperMap控件”、“SuperWorkspace控件”等,添加成功后在工具箱中可以看到如图4的效果。之后就可以使用这些组件对象了。
  3. 将SuperWorkspace控件和SuperMap控件依次添加到窗体中。

2.2 调用SuperMap Objects组件接口

  1. 关联控件对象

控件使用中,凡是需要读取工作空间中数据的,都需要与工作空间建立连接。

  1. 将SuperMap、SuperWkspManager和SuperLayout控件对象与SuperWorkspace控件对象关联,接口如下;

object objHandle = this.axSuperWrkspc.ObjectHandle;//获得工作空间控件对象

this.axSuperMap.Connect(objHandle);

this.axSuperWkspManager.Connect(objHandle);

this.axSuperLayout.Connect(objHandle);

  1. 将SuperLegend控件对象与SuperMap控件对象关联,接口如下;

object objSMHandle = this.axSuperMap.CtlHandle; //获得地图控件对象

this.axSuperLegend.Connect(objSMHandle);

  1. 打开工作空间文件、数据源及包含的地图
  1. this.axSuperWrkspc.Open(strOpenPath, "");//打开工作空间

打开工作空间时,会自动打开对应的数据源,其中可以存在多个数据源,且允许是文件型或数据库型数据源,用户也可以单独去打开一个数据源。每个数据源中所有的数据集对象都由一个数据集集合对象来管理。

  1. this.axSuperMap.OpenMap(strMapName); //打开工作空间中的地图

当数据集被加载到地图窗口中显示时就形成了图层。多个图层赋予一定的风格叠加显示就形成了地图。地图对象是通过图层集合对象来管理和维护所有图层。地图文件是保存在工作空间中的,不是真正的单独存储。一个工作空间允许保存多个地图文件。

  1. 添加地图浏览、选择和量测等操作`

在工具条中添加12个按钮,然后给每个按钮添加单击事件,在其中调用组件开放给用户的接口。如放大按钮的接口如下:

this.axSuperMap.Action = seAction.scaZoomIn; //地图放大操作

2.3 运行结果

通过相应的窗体设计和代码编辑之后,编译、执行之后可得到如下图所示的结果。

5 一个简单的SuperMap Objects组件开发运行结果

3 结语

本文基于Visual Studio2010集成开发环境和SuperMap Objects 6组件平台,采用C#语言开发了一个简单的地图浏览、信息管理应用程序。本文的工作表明,利用SuperMap Objects组件式开发平台,可以极大地降低GIS系统的开发难度,减轻开发工作量,缩短开发周期,提高开发效率。

参考文献

  1. 刘光.地理信息系统二次开发实践教程-组件篇[M].北京:清华大学出版社,2003:1-15
  2. 柳锦宝等.组件式GIS开发技术与案例教程[M].北京:清华大学出版社,2010:1-8
  3. 徐爱萍,徐武平.组件技术与ComGIS[J].武汉:测绘信息与工程,2001,2:32-34,39
  4. 宋关福,钟耳顺.组件式地理信息系统研究与开发[J].北京:中国图象图形学报,1998,3(4):313-317
  5. 倪金生,李道亮,于雷易.3S技术二次开发实践教程[M].北京:电子工业出版社,2007:20-43
  6. 理解组件式开发平台SuperMap Objects[Z].北京:超图软件股份有限公司,2011
  7. SuperMap Objects开发教程中级篇[Z].北京:超图软件股份有限公司,2011
  8. SuperMap 图书编委会.GIS工程师训练营:SuperMap Objects组件式开发[M].北京:清华大学出版社,2011
  9. 贺振,贺俊平,张卫星.基于SuperMap Objects组件式GIS的开发与研究[J].商丘:商丘师范学院学报,2008,24(9),102-104
  10. 胡亚,李永树.基于组件式GIS-SuperMap Objects的地理信息系统二次开发[J].成都:四川测绘,2004,27(1),3-5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925606.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DM达梦管理工具拖出空白区块,无法关闭

1. 出现问题:DM达梦管理工具拖出空白区块,无法关闭。 2. 解决方法 新建查询页,把查询页拖到空白区块里,完全覆盖空白区块。之后空白区块会变成查询页,右上角会出现叉号,点击叉号关闭就行。 3. 后记 达梦…

idea_卸载与安装

卸载与安装 卸载1、设置 -> 应用2、查找到应用,点击卸载3、把删除记录和设置都勾选上4、删除其它几个位置的残留 安装1、下载安装包2、欢迎安装 -> Next3、选择安装目录 -> Next4、创建快捷图标和添加到环境变量5、确认文件夹的名称 -> Install6、完成安…

学习threejs,使用specularMap设置高光贴图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshPhongMaterial高…

UR开始打中国牌,重磅发布国产化协作机器人UR7e 和 UR12e

近日,优傲(UR)机器人公司立足中国市场需求,重磅推出UR7e和UR12e 两款本地化协作机器人。它们延续优傲(UR)一以贯之的高品质与性能特质,着重优化负载自重比,且在价格层面具竞争力&…

2024年陕西科技大学数据结构程序填空题+预测

递归实现插入排序 #include <stdio.h>void insertion_sort(int arr[], int n) {if (n > 1){insertion_sort(arr, n - 1);arr[0] arr[n];int i;for (i n - 1; i > 0; i--){if (arr[i] > arr[0]){arr[i 1] arr[i];}else{break;}}arr[i 1] arr[0];} }int m…

OGRE 3D----3. OGRE绘制自定义模型

在使用OGRE进行开发时,绘制自定义模型是一个常见的需求。本文将介绍如何使用OGRE的ManualObject类来创建和绘制自定义模型。通过ManualObject,开发者可以直接定义顶点、法线、纹理坐标等,从而灵活地构建各种复杂的几何体。 Ogre::ManualObject 是 Ogre3D 引擎中的一个类,用…

基于PoE交换机的智慧停车场监控组网应用

伴随城市发展快速&#xff0c;汽车保有量也不断增长&#xff0c;导致停车管理问题也愈发凸显。针对包括路侧停车位、地面停车场、地下停车场等场景的停车管理需求&#xff0c;通常会部署监控设备进行车位监测、现场安全监测等&#xff0c;助力构建智能化停车管理。因此如何为分…

直接抄作业!Air780E模组LuatOS开发:位运算(bit)示例

在嵌入式开发中&#xff0c;位运算是一种高效且常用的操作技巧。本文将介绍如何使用Air780E模组和LuatOS进行位运算&#xff0c;并通过示例代码帮助读者快速上手。 一、位运算概述 位运算是一种在计算机系统中对二进制数位进行操作的运算。由于计算机内部数据的存储和处理都是…

多点DMALL启动招股:将在港交所上市,聚焦数字零售服务

近日&#xff0c;多点数智有限公司&#xff08;Dmall Inc.&#xff0c;下称“多点”或“多点DMALL”&#xff09;发布全球发售文件&#xff0c;于11月28日至12月3日招股&#xff0c;预计将于2024年12月6日在港交所主板挂牌上市。 招股书显示&#xff0c;多点DMALL本次全球发售的…

WRF-Chem模式安装、环境配置、原理、调试、运行方法;数据准备及相关参数设置方法

大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果&#xff0c;同时气象因素是控制大气污染的关键自然因素。大气污染问题既是局部、当地的&#xff0c;也是区域的&#xff0c;甚至是全球的。本地的污染物排放除了对当地造成严重影响外&#xff0c;同时还会在…

离线安装 Docker-IO:详细步骤指南

离线安装 Docker-IO:详细步骤指南 一、准备工作1.1 下载 Docker 离线安装包1.2 准备安装环境1.3 配置防火墙和 SELinux(可选)二、上传和解压离线安装包2.1 上传安装包2.2 解压安装包三、安装 Docker-IO3.1 移动 Docker 文件到系统目录3.2 配置 Docker 服务3.3 赋予服务文件执…

拥抱 OpenTelemetry:阿里云 Java Agent 演进实践

作者&#xff1a;陈承 背景 在 2018 年的 2 月&#xff0c;ARMS Java Agent 的第一个版本正式发布&#xff0c;为用户提供无侵入的的可观测数据采集服务。6 年后的今天&#xff0c;随着软件技术的迅猛发展、业务场景的逐渐丰富、用户规模的快速增长&#xff0c;我们逐渐发现过…

【信息系统项目管理师】第3章:信息系统治理 考点梳理

文章目录 3.1 IT 治理3.1.1 IT治理基础3.1.2 IT治理体系3.1.3 IT治理任务3.1.4 IT治理方法与标准 3.2 IT 审计3.2.1 IT审计基础3.2.2 审计方法与技术3.2.3 审计流程3.2.4 审计内容 3.1 IT 治理 IT治理起到重要的统筹、评估、指导和监督作用。 信息技术审计(IT审计)作为与IT治…

DRM(数字权限管理技术)防截屏录屏----ffmpeg安装

提示&#xff1a;ffmpeg安装 文章目录 [TOC](文章目录) 前言一、下载二、配置环境变量三、运行ffmpeg四、文档总结 前言 FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的…

github webhooks 实现网站自动更新

本文目录 Github Webhooks 介绍Webhooks 工作原理配置与验证应用云服务器通过 Webhook 自动部署网站实现复制私钥编写 webhook 接口Github 仓库配置 webhook以服务的形式运行 app.py Github Webhooks 介绍 Webhooks是GitHub提供的一种通知方式&#xff0c;当GitHub上发生特定事…

全桥LLC变换器原理及MATLAB仿真模型

“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 主电路拓扑 全桥LLC 谐振变换器主电路拓扑结构图。图中S1 &#xff5e; S4为功率开关管&#xff0c; D1 &#xff5e; D4为功率开关管的体二极管&#xff0c; C1 &#xff5e; C4 为功率开关管的寄生电容。谐振电感r…

使用R语言进行美国失业率时空分析(包括绘图)

今天写一篇利用R语言&#xff0c;针对面板数据的简单分析与绘图。让我们直接开始把。 一、数据准备 这次的示例数据非常简单&#xff0c;只有一个shp格式的美国区县矢量数据&#xff0c;我们在QGIS中打开数据查看一下它的属性表。事实上我们需要的数据都在属性表的字段中。 二…

PostgreSQL在Linux环境下的常用命令总结

标题 登录PgSQL库表基本操作命令新建库表修改库表修改数据库名称&#xff1a;修改表名称修改表字段信息 删除库表pgsql删除正在使用的数据库 须知&#xff1a; 以下所有命令我都在Linux环境中执行验证过&#xff0c;大家放心食用&#xff0c;其中的实际名称换成自己的实际名称即…

React Native学习笔记(三)

一 组件简介 1.1 简介 RN中的核心组件&#xff0c;是对原生组件的封装 原生组件&#xff1a;Android或ios内的组件核心组件&#xff1a;RN中常用的&#xff0c;来自react-native的组件 原生组件 在 Android 开发中是使用 Kotlin 或 Java 来编写视图&#xff1b;在 iOS 开发…

TsingtaoAI具身智能高校实训方案通过华为昇腾技术认证

日前&#xff0c;TsingtaoAI推出的“具身智能高校实训解决方案-从AI大模型机器人到通用具身智能”基于华为技术有限公司AI框架昇思MindSpore&#xff0c;完成并通过昇腾相互兼容性技术认证。 TsingtaoAI&华为昇腾联合解决方案 本项目“具身智能高校实训解决方案”以实现高…