当前位置: 首页 > news >正文

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

相关文章:

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

引言 随着GIS应用领域的扩展,GIS开发工作日显重要。一般地,从平台和模式上划分,GIS二次开发主要有三种实现方式:独立开发、单纯二次开发和集成二次开发。上述的GIS应用开发方式各有利弊,其中集成二次开发既可以充分利…...

多组数输入a+b:JAVA

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 输入描述: 输入包含多组数据,每组数据输入一行,包含两个整数 输出描述: 对于每组数据输出一行包含一个整数表示两个整数的和 代码: import java.util.Scanner; pu…...

R语言结构方程模型(SEM)在生态学领域中的应用

目录 专题一、R/Rstudio简介及入门 专题二、结构方程模型(SEM)介绍 专题三:R语言SEM分析入门:lavaan VS piecewiseSEM 专题四:SEM全局估计(lavaan)在生态学领域高阶应用 专题五&#xff1…...

架构-微服务-服务调用Dubbo

文章目录 前言一、Dubbo介绍1. 什么是Dubbo 二、实现1. 提供统一业务api2. 提供服务提供者3. 提供服务消费者 前言 服务调用方案--Dubbo‌ 基于 Java 的高性能 RPC分布式服务框架,致力于提供高性能和透明化的 RPC远程服务调用方案,以及SOA服务治理方案。…...

【SpringBoot问题】IDEA中用Service窗口展示所有服务及端口的办法

1、调出Service窗口 打开View→Tool Windows→Service,即可显示。 2、正常情况应该已经出现SpringBoot,如下图请继续第三步 3、配置Service窗口的项目启动类型。微服务一般是Springboot类型。所以这里需要选择一下。 点击最后一个号,点击Ru…...

OpenCV 图像轮廓查找与绘制全攻略:从函数使用到实战应用详解

摘要:本文详细介绍了 OpenCV 中用于查找图像轮廓的 cv2.findContours() 函数以及绘制轮廓的 cv2.drawContours() 函数的使用方法。涵盖 cv2.findContours() 各参数(如 mode 不同取值对应不同轮廓检索模式)及返回值的详细解析,搭配…...

电机驱动MCU介绍

电机驱动MCU是一种专为电机控制设计的微控制器单元,它集成了先进的控制算法和高性能的功率输出能力。 电机驱动MCU采用高性能的处理器核心,具有快速的运算速度和丰富的外设接口。它内置了专业的电机控制算法,包括PID控制、FOC(Fi…...

人工智能学习框架详解及代码使用案例

人工智能学习框架详解及代码使用案例 人工智能(AI)学习框架是构建和训练AI模型的基础工具,它们提供了一组预定义的算法、函数和工具,使得开发者能够更快速、更高效地构建AI应用。本文将深入探讨人工智能学习框架的基本概念、分类、优缺点、选择要素以及实际应用,并通过代…...

修改Textview中第一个字的字体,避免某些机型人民币¥不显示

在 Android 中,系统提供了三种常用的字体类型,分别是: Serif(衬线字体): 这种字体有明显的衬线或笔画末端装饰,通常用于印刷品和书籍,给人一种正式和优雅的感觉。示例:Typeface.SERI…...

彻底理解quadtree四叉树、Octree八叉树 —— 点云的空间划分的标准做法

1.参考文章: (1)https://www.zhihu.com/question/25111128 这里面的第一个回答,有一幅图: 只要理解的四叉树的构建,对于八叉树的构建原理类比方法完全一样:对于二维平面内的随机分布的这些点&…...

Python时间序列优化之道滑动与累积窗口的应用技巧

大家好,在时间序列数据处理中,通常会进行滑动窗口计算(rolling)和累积窗口计算(expanding)等操作,以便分析时间序列的变化趋势或累积特征。Pandas提供的rolling和expanding函数提供了简单、高效的实现方式,特别适用于金融、气象、…...

Buffered 和 BuffWrite

Buffered和BuffWrite是Java IO包中的两个类,用于提高IO操作的效率。 Buffered是一个缓冲区类,可以将一个InputStream或者一个Reader包装起来,提供了一定的缓冲区大小,可以一次读取多个字节或字符,减少了读取的次数&am…...

【娱乐项目】基于cnchar库与JavaScript的汉字查询工具

Demo介绍 利用了 cnchar 库来进行汉字相关的信息查询,并展示了汉字的拼音、笔画数、笔画顺序、笔画动画等信息用户输入一个汉字后,点击查询按钮,页面会展示该汉字的拼音、笔画数、笔画顺序,并绘制相应的笔画动画和测试图案 cnchar…...

泷羽sec-蓝队基础之网络七层杀伤链 (下)学习笔记

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

FPGA 开发工程师

目录 一、FPGA 开发工程师的薪资待遇 二、FPGA 开发工程师的工作内容 1. 负责嵌入式 FPGA 方案设计,包括仿真、软件编写和调试等工作。 2. 使用工具软件建立 FPGA 综合工程,编写综合策略和时序约束。 3. 进行 FPGA 设计的优化与程序维护&#xff0c…...

【Leetcode 每日一题】3250. 单调数组对的数目 I

问题背景 给你一个长度为 n n n 的 正 整数数组 n u m s nums nums。 如果两个 非负 整数数组 ( a r r 1 , a r r 2 ) (arr_1, arr_2) (arr1​,arr2​) 满足以下条件,我们称它们是 单调 数组对: 两个数组的长度都是 n n n。 a r r 1 arr_1 arr1​ 是…...

较类中的方法和属性比较

在 Python 中,类中有以下几种常见的方法和属性,它们的作用和用法有所不同。以下是详细比较: --- ### **1. 实例方法** - **定义**:使用 def 定义,第一个参数是 self,表示实例对象本身。 - **作用**&#…...

nVisual可视化资源管理工具

nVisual主要功能 支持自定义层次化的场景结构 与物理世界结构一致,从全国到区域、从室外到室内、从机房到设备。 支持自定义多种空间场景 支持图片、CAD、GIS、3D等多种可视化场景搭建。 丰富的模型库 支持图标、机柜、设备、线缆等多种资源对象创建。 资源可…...

自动类型推导(auto 和 decltype)

​​​​​​一、auto关键字 基本概念 在 C 11 中引入了auto关键字用于自动类型推导。它可以让编译器根据变量的初始化表达式自动推断出变量的类型。这在处理复杂的类型,如迭代器、lambda 表达式的类型等情况时非常有用。 使用示例 例如,在迭代器的使用中…...

新型大语言模型的预训练与后训练范式,谷歌的Gemma 2语言模型

前言:大型语言模型(LLMs)的发展历程可以说是非常长,从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初,LLM的训练过程只关注预训练,但后来逐步扩展到了包括预训练和后训练在内的完整…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...