MAPGIS二次开发基础知识
GIS二次开发第1课
Hale Waihona Puke ArcGIS 开发工具包,包括ArcGIS开发帮助、组件帮助、对象模型图和示例
ESRI Developer Network: /提供有关ArcGIS开发的最新信
息,包括更新的示例和技术文档
第一课 GIS二次开发基础
ArcGIS 产品体系
ArcObjects的类之间存在四种关系
依赖关系 关联关系
组合关系
类型继承
对象模型示例
WorkspaceFactory
Map
*
Workspace Layer
MapControl
Curve
Map Segment Path PolyCurve
什么是组件对象模型
软件重用和开发效率始终是软件开发的核心问题。
在早期(面向过程语言),人们为了重用,将一些基本的数学计算 函数和界面设计函数设计成函数库,让其他软件开发人员调用。它
为应用开发者提供了方便,但是重用的粒度太小。
面向对象语言的出现,提高编程的粒度。面向对象语言的基本单位 是类,它封装了数据成员和函数成员 ,将最小组件的粒度提高了一
个等级。但是,一个类提供很多种方法和属性,使用和管理很不方
ArcGIS Engine—通过多种应用程序接口建立自定义应用程序的嵌 入式GIS组件库。
ArcGIS Server—为企业和Web计算框架建立服务器端GIS应用程 序的一个平台,可用于建立Web服务和Web应用程序。
ArcIMS—通过开放Internet协议发布地图、数据和元数据的GIS
Web服务器。
COM知识要点
COM的缺陷
利用VB和MAPGIS基本控件做二次开发
安装MAPGIS SDK软件到MAPGIS安装路径下。
添加声明模块vbW60_Area.bas,该模块包含MAPGIS基本参数及结构定义、消息与版本定义等。添加的方法是:在VB程序中点取"Project"菜单下的"Add Module",添加vbW60_Area.bas文件,该文件在MAPGIS安装程序的Basic子目录下。
主界面上还要放置图形编辑和显示控件:EditView.ocx。首先要将该控件添加到控件面板中,方法是:在VB程序中点取"Project"菜单下的“Components”,将EditView ActiveX Control Module控件打钩,如下图所示。
然后按照VB的常规编程设计方法使用该控件,在FORM窗体上划出该控件的大小和位置。设置各个控件和菜单的属性等参数。
设置可执行文件输出目录。生成的可执行文件必须放在与MAPGIS安装目录的动态库和控件相同的目录中才能执行。设置的方法是:点取"File"菜单下的"Make *.exe..",选择MAPGIS动态连接库所在的目录,如PROGRAM。
第二步:设计功能界面。
本文中演示的基本设计功能描述如下。程序分为四个主要的菜单:文件、编辑、窗口和帮助,每个菜单有分别有相应的功能。
End Sub
'弧段转线
Private Sub ArcToLne_Click()
ev1.ArcToLine
End Sub
'清除窗口并及时更新显示
Private Sub Clear_Click()
ev1.CleanWindow
ev1.RestoreWindow
gis二次开发复习资料
交换数据格式这是一种较传统的数据共享和互操作方法。
可以一定程度上解决GIS平台差异所造成的数据共享难的问题。
开放式GISOGC(开放地理信息系统协会)为了促进地理信息的共享和GIS互操作,加快地理空间信息标准化建设的步伐,提出了建设开放式地理数据模型的方案,并指出开放式地理数据模型应该包括统一的地理要素定义、空间属性、语义属性和与其他地理要素的关系。
以及地理数据模式等元数据的定义和表示等内容。
数据字典是关于数据信息的集合。
它是数据流图中所有要素严格定义的场所,这些要素包括数据流、数据流的组成、文件、加工小说明及其他应进入字典的一切数据,其中每个要素对应数据字典中的一个条目。
空间元数据空间元数据是指描述空间数据的数据,它描述空间数据集的内容、质量、表示方式、空间参考、管理方式以及数据集的其它特征,是空间数据交换的基础。
也是空间数据标准化与规范化的保证。
在一定程度上为空间数据的质量提供了保障。
地理编码所谓地理编码即是为点、线、面的位置和属性而设置的编码,按实体的属性特征和集合坐标的数据结构记录在计算机的存储设备上。
分布式GIS分布式GIS是通过分布式计算实现异地资源和信息共享、提高系统执行效率的GIS系统。
在分布式GIS中,可以分为基于客户/服务器模式的分布式GIS和全分布式GIS两种。
桌面GIS一般认为,所谓桌面地理信息系统,就是运行于桌面计算机(工作站和微型机)上的地理信息系统。
它一般有相对较弱的空间分析功能,大多数都是以地图查询及地图分析为主要应用目标而建立应用型地理信息系统。
组件式GIS基于组件对象平台,具有GIS功能和某种标准通讯接口、允许跨语言调用,可用以建立地理信息系统的组件称为GIS组件。
使用GIS组件所开发的GIS系统,称为组件式GIS。
内部数据格式内部数据格式面向程序设计,描述系统数据的物理结构和实体之间的拓扑关系、存取方式,在程序设计时确定。
外部数据格式外部数据结构面向用户,描述地图或地理实体之间的逻辑联系,由用户建立应用系统时定义。
mapgis二次开发基础知识
mapgis二次开发基础知识MAPGIS二次开发基础知识一、手动注册组件与注销组件COM以及客户应用程序所需的、用来定位组件及对组件进行实例化的信息存储在Windows的注册表(Registry)里。
因此,在使用组件之前要对组件进行注册,只有成功注册才能引用该组件,其具体步骤为:1.将包容组件的DLL文件放入MAPGIS PROGRAM 目录下,假设物理路径为:D:\mapgis65\program\ MapGisBasCom1.dll2.运行注册表程序注册组件 Windows开始菜单-〉运行:regsvr32 D:\mapgis65\program\MapGisBasCom1.dll 注册成功与否将有对话框弹出。
3.注销该组件方法为:regsvr32 /u D:\mapgis65\program\MapGisBasCom1.dll二、Visual Basic中嵌入对象类型库为了使Visual Basic能够访问MAPGIS对象定义,应该在Visuai Basic项目或模块中嵌入MAPGIS对象类型库。
如果想把一个Visual Basic对象声明为MAPGIS对象类型,要求嵌入MAPGIS对象类型库, 如果想把一个Visual Basic对象声明为一般Object类型,就不必嵌入MAPGIS对象。
为了在项目中嵌入MAPGIS对象类型库,通常执行这些步骤:从Project(工程)菜单, 选择References, References对话框出现, 选中复选框嵌入MapGisBasCom1 Type Library文件。
这要求VisualBasic环境或代码模块编辑器是活动的,正在运行。
三、使用MAPGIS对象可以使用Visual Basic编写使用MAPGIS对象的程序。
在Visual Basic程序中使用MAPGIS 对象所要求的步骤是:1.嵌入MAPGIS对象类型库。
2.建立一个MAPGIS对象。
MAPGIS的基本概念和体系结构
1.1 MAPGIS二次开发的基本概念 二次开发的基本概念
MAPGIS 二次开发支持的开发方式
1 API函数 API函数
函数库提供了从最基本数据单元的读取,保存,更新和维护到MAPGIS MAPGIS地图库 函数库提供了从最基本数据单元的读取,保存,更新和维护到MAPGIS地图库 的建立和漫游,以及空间分析,图象处理等一系列功能,MAPGIS应用程序可以 的建立和漫游,以及空间分析,图象处理等一系列功能,MAPGIS应用程序可以 根据需要在任何层次上进行开发. 根据需要在任何层次上进行开发.
4
ActiveX控件 ActiveX控件
MAPGIS的数据管理 1.2 MAPGIS的数据管理 工作区
MAPGIS数据管理的核心就是对工作区的操作. MAPGIS数据管理的核心就是对工作区的操作. 数据管理的核心就是对工作区的操作 工作区是MAPGIS提出的一个概念 工作区是 MAPGIS提出的一个概念 , 简单地 MAPGIS 提出的一个概念, 工作区就是一个数据池, 说, 工作区就是一个数据池 ,存放实体的空间数 拓扑数据,图形数据和属性数据, 据 , 拓扑数据 , 图形数据和属性数据 , 每个工作 区都对应于一个MAPGIS数据文件. MAPGIS数据文件 区都对应于一个 MAPGIS 数据文件 . 深入了解工作 区的逻辑结构和工作区操作函数的使用, 区的逻辑结构和工作区操作函数的使用, 是进行 成功的二次开发的关键. 成功的二次开发的关键.
MAPGIS二次开发的基本概念及其数据管理 MAPGIS 二次开发的基本概念及其数据管理
本 章 内 容
1.1,MAPGIS二次开发的基本概念 1.2,MAPGIS的数据组织 1.3,MAPGIS的工作区操作 1.4,编写你的第一个MAPGIS程序
MAPGIS二次开发常见问题及解答1
二次开发常见问题及解答、问:如何用生成明码文件?答:先利用手册看懂明码格式文件的格式,知道数据的组织方式,利用的文件函数创建一个文本型文件,吧数据库中的数据按照格式输出就是了。
、问:和的区别和联系?答:是以前老版本的东东,换成试试中包含了属性结构的详细信息,具体用法可参见二次开发帮助文档中第三章数据结构中关于属性字段描述结构,属性字段描述头和属性信息头的介绍,里面有该结构的详细内容。
、问:请教关于“不能打开子图库...”的问题,急!答:系统库路径不对,将、、三个文件拷贝到执行目录即可。
这几个语言件放在\\目录中。
或是运行可设置,该运行文件也同样在\\目录中。
、问:如果只知道工作区能不能依次得到工作区中的图元号,该如何得到啊!答:;;;;*;{()取点数(《){(()<)取点,返回值成功失败删除;…对该图元进行操作}}就是图元号、问:的函数,到底应该如何用啊!跟以前的不同了,给个例子吧!答:( * * *);点工作区号* 点位置号比如鼠标的位置图层开关标志,如不为空就只在打开状态的图层中查找是的长度出口返回距离返回值成功返回点号,失败为、问:如何屏蔽掉中的右键功能!!!答:有一个属性,同理也可以直接使用这个属性。
'不显示菜单'全部显示'显示窗口菜单'显示窗口编辑菜单'工具箱、问:如何将一个圆添加到一个工作区中?答:先用函数在工作区画园(或画弧)的时候需要自己生成坐标点,比如说 *,这里的空间需自己申请,其长度为,线的参数是,需要赋值,为区工作区号,为弧段号。
然后调用:();输入弧段。
然后添加区域入口: 区工作区号[] 区域数据块[] (弧段个数)[] ( 为弧段号)区域图形信息,需要赋值然后调用:();、问:急关于( * )函数!答:{ 工作区号图元类型图元号}定义一个数组你把所要闪烁的图元一个一个加进去就行了。
、问:实现查询多边形中图元的,并时期闪烁显示,应如何实现呢?答:用系列函数,然后可通过的闪烁机制完成。
MAPGIS二次开发资料16点
3 函数_LoadAFile( )传参数示例
char fileName[MAX_PATH]; lstrcpy(fileName,"c:\\mapgis6.7\\sample\\line.wl"); _LoadAFile(fileName,li);
4 取工作区文件名函数_GetAreaFileName1( )示例
8 从当前打开文件中提取出只属于该文件的图层名称或序号
可通过函数实现:
技术工兵(jsgb) 3
技术工兵淘宝店为您服务:
Hale Waihona Puke for(short i=0;i<MAX_LAYNUM;i++) {/*判断某一层是否有图元*/ short HaveElement = _IsALayHasElement(ai,i); if(HaveElement) TRACE( "area is %d at layer = %d has element\n", ai, i ); else TRACE( "area is %d at layer = %d has not element\n", ai, i ); }
char fname[MAX_PATH]; short len; fname[0] = 0; _GetAreaFileName1(ai,fname,MAX_PATH*sizeof(char));
5 删除字段函数_DelStruFldOnNumb( )提示示例
如果是用循环来操作此函数,需要从属性结构的尾部进行删除。打个很简单的例子:如 果有四个属性结构, 删除了第二个属性结构后, 则原来第四个属性结构变成了第三个属性结 构。所以 for(i=0;i<Num;i++) {
MapGIS开发平台二次开发
Jar包
功能
备注说明
dcs-cls-1.0.0
集群管理服务
提供对DCServer集群的管理能力
dcs-cms-1.0.0
控制管理服务
提供对数据中心服务器的管理能力
dcs-dws-1.0.0
数据仓库服务
目录服务、地图服务、要素/栅格服务、三维数据服务、空间参考系服务等
dcs-fws-1.0.0
IDesigner:为MapGIS IGSS设计开发中心的应用层,基于DataCenter服务之上的Web服务体系,IDesigner以服务插件方式提供Web服务扩展,实现GIS功能与其他业务功能的扩展。
AppCenter:“空间信息软件应用中心”支持多类型的客户端——桌面端、Web端、移动端的应用,可便捷地获得GIS服务。通过SCenter的不断积累,AppCenter可提供的服务不断增多,能最大限度地满足用户的需求。
COM组件二次开发接口
组件级别的二次开发接口,提供二次开发需要的各种功能函数的支持,亦能同C++接口一样无差别的完成二次开发功能。
1.
模块
库文件
备注说明
TDE框架
TDEMain7.dll、TDEPluginBase7.dll、TDE3DCommon7.dll、FeatureNodeLayerLib.rpk、TDECommon7.dll、……
DesignCenter:“设计开发中心”提供了一个“零编程、巧组合、易搭建”的可视化搭建开发环境。不需要技术高超的程序员,不需要大量的编码,只需简单的搭建配置流程,结合个别满足特定需求的插件,即可实现复杂的应用。
SDesigner:为MapGIS IGSS设计开发中心的基础内核,并提供底层服务的扩展开发,即通过跨平台的内核服务群向上封装扩展,或采用服务插件方式扩展,同时可结合工作流机制进行功能扩展。
Mapgis二次开发(入门)
Mapgis二次开发(入门)——MFC下的基本步骤作者:刘明瓒成都理工大学QQ:34194203欢迎大家转载此文,但请在转载时保证文章的完整性开发平台:VC++6.0&&Mapgis6.75内容:mapgis二次开发的一些基本概念和基本步骤要求:阅读此文需要一定C++编程基础和一点MFC的知识以及一点mapgis知识。
1概述1.1Mapgis二次开发的作用扩展mapgis产品功能,以达到自己的目的。
简单讲有:简化操作(将mapgis产品提供的功能包装,以前要点几下的现在点一下就可以了),功能扩展(mapgis产品没有的功能,可以通过二次开发自己实现),功能应用(自己开发的某个系统如果想使用mapgis里面的一些功能,可以通过二次开发直接拿到自己的系统中),……等等。
1.2基本概念有一点需要说明,mapgis二次开发所有API函数都是以“_”开头的,如_OpenPntArea、_GetPnt、_GetLin等等。
其他概念在要碰到时在谈。
1.3所需工具1、Microsoft Studio VC++6.02、Mapgis6.75产品及二次开发包以上工具网上均有免费下载, 进行一下步骤时请先下载并安装好。
2Mfc向导与工程设置2.1新建工程(1)打开VC++6.0 【File】->【New】选择【Projects】选项卡、【MFC AppWizard(exe)】、填入工程名称Mapgis_1,点击【OK】如下图:(2)选择Dialog based (为简单起见)点击【Finish】新建工程完毕2.2工程设置(1)点击菜单栏【Project】->【Setting】选择【C/C++】选项卡 Category:中选择【Code Generation】Struct member alignment选择【1 Byte】点击【OK】说明:此步设置是将C++结构体成员的内存对齐方式设置为1字节,因为mapgis6.X的开发就是采用的此对齐方式。
第七章 GIS二次开发入门
1.2.4 GIS开发方式的选择
独立开发难度太大; 宿主型二次开发受GIS平台所提供的脚本语言的限制; GIS组件开发模式结合了GIS平台软件与可视化开发 平台的组件开发模式的优点.不仅能大大提高应用 系统的开发效率,而且使用可视化软件开发工具开 发出来的应用程序具有更好的用户界面,更强大的 数据库功能.可靠性好,易于移植,便于维护,学 习周期较短,容易上手.
�
第七章 GIS二次开发入门
主要内容
GIS二次开发概述
组件式GIS
1.GIS二次开发概述Fra bibliotekGIS开发模式
GIS开发方式
1.1 GIS开发模式
自行开发模式 委托开发模式 联合开发模式
1.1.1 自行开发模式
自行开发模式是指由用户依靠自己的力量 独立完成系统的设计与开发. 自行开发方式需求明确,开发费用低,易 于维护,但是对用户的要求较高.
2.2.1 Component技术
CORBA标准主要分为3个层次:对象请求代理,公共对象服 务和公共设施. 最底层是对象请求代理ORB即对象总线,是CORBA的核心, 它为所有对象提供了一种面向总线的机制,是分布对对象系 统中的"软总线"; 在ORB之上定义了很多公共服务,可以提供诸如并发服务, 目录命名服务,事务(交易)服务,安全服务等各种各样的 服务; 最上层的公共设施则定义了组件框架,提供可直接为业务对 象使用的服务,规定业务对象有效协作所需的协定规则.
2.组件式GIS(ComGIS)
Component技术 ComGIS的定义 ComGIS系统的优点 ComGIS的不足 GIS组件的功能 GIS组件产品
2.2.1 Component技术
Compenent技术是在面向对象技术(OOP-Object Oriented Programming)基础上发展起来的,并成 为当今软件开发技术的主要潮流. . 面向对象技术的三大特征是封装性,继承性,多态 性.组件技术正是面向对象技术的扩展,不仅具有 这三个特性,而且更适合于现代软件更新快,规模 大,强调写作的软件环境.
gis 二次开发的基本方法与简单知识
gis 二次开发的基本方法与简单知识GIS(地理信息系统)是一种用于捕捉、存储、管理、分析和展示地理数据的技术。
GIS的二次开发是在GIS软件基础上进行的开发工作,通过编写代码和利用GIS提供的开发工具,对GIS软件进行自定义功能的扩展和定制,以满足特定的需求。
二次开发的基本方法主要包括以下几个方面:1. 环境搭建:进行GIS二次开发前,需要先搭建开发环境。
通常使用的开发环境有ArcGIS、QGIS等,根据自身需求选择合适的开发环境,并安装相应的开发工具和插件。
2. 学习相关知识:在进行GIS二次开发之前,需要学习相关的GIS 基础知识和编程语言知识。
熟悉GIS的基本概念、数据结构、坐标系统等,同时掌握一种或多种编程语言,如Python、Java、C#等。
3. API调用:GIS软件通常提供了一系列的API(应用程序接口),通过调用这些API可以实现对GIS软件的访问和操作。
开发者可以利用API提供的函数和方法,实现自定义的功能。
4. 数据处理:GIS二次开发中,经常需要对地理数据进行处理和分析。
可以利用GIS软件提供的工具和函数,进行数据的查询、过滤、分析等操作,以满足特定的需求。
5. 用户界面设计:在GIS二次开发中,通常需要设计用户界面,使用户可以方便地进行操作。
可以利用界面设计工具,如ArcGIS SDK、Qt等,进行用户界面的设计和开发。
6. 功能扩展:GIS软件通常提供了丰富的功能和工具,但有时候需要根据特定需求进行功能的扩展。
通过二次开发,可以添加自定义的功能和工具,以满足特定的需求。
在进行GIS二次开发时,需要掌握一些基本的知识:1. 地理坐标系统:地理坐标系统是用于描述地理位置的一种坐标系统,通常采用经度和纬度表示地理位置。
不同的地理坐标系统有不同的标准和转换方法,开发者需要了解并正确使用地理坐标系统。
2. 空间数据模型:空间数据模型是用于描述地理数据的一种模型,通常包括点、线、面等几何要素。
GIS二次开发考点复习
一、简述GIS开发模式及其优缺点?1)独立开发模式独立开发模式不依赖于任何GIS工具软件,由开发者独立设计。
优点:无须依赖任何商业GIS工具软件,减少了开发成本。
缺点:由于能力、时间、财力方面的限制,其开发出来的产品很难在功能上与商业化GIS工具软件相比。
2)单纯二次开发模式单纯二次开发模式指完全借助于GIS工具软件提供的开发语言进行应用系统开发。
优点:这种开发方式继承了平台软件的所有GIS功能,容易掌握,开发起来省时省力。
缺点:受二次开发的宏语言限制,所开发的应用系统功能扩展能力极弱,难以解决复杂问题,开发的应用程序不尽如人意。
3)集成二次开发模式集成二次开发模式是指利用专业的GIS工具软件进行开发。
优点:可以缩短程序开发周期,使编程过程更简洁、用户界面更友好,而且可以使程序更加灵活、简便。
二、简述COM的特性?1)封装性2)多态性3)重用性4)语言无关性5)进程透明性三、简述组件式GIS三级体系结构?1)基础组件基础组件面向空间数据管理,提供基本的交互过程。
2)高级通用组件高级通用组件面向通用功能。
高级通用组件由基础组件构造而成。
3)行业性组件行业性组件抽象出行业应用的特定算法和模型,固化到组件中,进一步加速开发过程。
四、简述相对于传统的GIS,组件式GIS的特点?1)集成灵活、价格便宜2)采用通用开发语言集成3)强大的GIS功能4)开发简捷、使用方便5)无缝集成6)可视化界面设计7)更加大众化五、简述ArcGIS Engine包含的两个内容?1.ArcGIS Engine开发工具包ArcGIS Engine开发工具包是由开发人员来开发客户化应用程序的一系列工具。
2.ArcGIS Engine运行时ArcGIS Engine运行时是一组包含ArcGIS Engine 核心组件以及扩展模块的工具。
六、简述Geodatabase模型结构(包括英文)?●对象类(ObjectClass);●要素类(FeatureClass);●关系类(RelationshipClass);●要素数据集(FeatureDataset);●域(Domians);●规则(Rules)。
mapgis二次开发培训教程
M A P G I S 二次开发培教程前言MAPGIS是武汉中地信息工程有限公司研制的具有自主版权的大型基础地理信息系统平台。
它是一个集当代最先进的图形、图像、地质、地理、遥感、测绘、人工智能、计算机科学于一体的大型智能软件系统,是集数字制图、数据库管理及空间分析为一体的空间信息系统,是进行现代化管理和决策的先进工具。
MAPGIS连续四年在全国GIS测评中名列第一,并成为唯一连续四年获得国家科技部向社会推荐的国产GIS软件平台。
中地软件丛书之MAPGIS二次开发培训教程是根据最新推出的MAPGIS软件平台编写而成,主要介绍进行MAPGIS二次开发必须具备的基础知识、主流开发工具以及MAPGIS系统的基本概念、结构体系和操作方法。
该教程分为三个部分,共十一讲。
其中:第一部分(即第一讲的内容):介绍Windows编程的概念。
包括类与数据封装、继承、重载、虚拟函数与多态性以及内存管理。
该部分为可视化编程的基础,有可视化编程经验的读者可以略过此讲,直接进入下一部分的学习。
第二部分(即第二讲的内容):编程工具VC。
对于在VC这样一个编程环境中开发应用程序所应熟悉的概念,术语和最基本的框架、构件实现过程等知识做了一个简明扼要的介绍。
已掌握一定VC编程基础知识的读者可以略过该部分。
第三部分(即第三讲至第十一讲的内容):详细讲述了地理信息系统的基本概念(包括GIS原理概述、空间数据类型、空间数据库、空间数据结构与数据管理等内容);MAPGIS 的基本概念和体系结构(简要描述了MAPGIS二次开发的基本概念、术语、工作区、空间实体及其数据、C++类组织和开发环境介绍的内容);MAPGIS空间数据存取和属性编辑(包括工作区、空间实体和属性的操作及其网络介绍);图形显示输出及窗口操作、图形编辑、类库和控件开发;矢量空间分析和属性查询;投影变换、图框生成和工程管理;图库管理和查询系统(包括基于图库的应用程序开发、MAPGIS图库介绍、开发的一般步骤以及结合图库显示说明图库主要函数的功能等方面的内容)以及图象分析与处理。
MapGIS常见问题之二次开发相关问题
MapGIS常见问题中地数码集团平台二次开发支持部本期常见问题要紧由MapGIS开发平台C/S开发问题组成,涉及部份B/S开发问题。
1、基于MapGIS开发平台,如何通过代码实现修改线的图形参数操作,包括可变颜色、可变笔宽、线型等参数?答:可依照如下步骤实现:(1)在MapGIS软件中假设需查看线、区等要素的图形参数,需开启还原显示功能,可通过编写代码手动开启还原显示功能。
(2)在还原显示模式下,线是通过MapGIS符号库的线型来显示的,而线型符号则由几部份组成,而每一部份若采取固定颜色或固定笔宽的模式,那么无法看到修改后的线型参数。
只有在某一部份采取可变颜色或可变笔宽的情形下,对图形信息中的相关项的修改才会有成效,因此能够通过修改符号库的相关线型的颜色模式或笔宽模式来达到成效。
(3)一个线型能够通过线型号+辅助线型号来唯一确信,以COM组件式开发C#语言为例的线属性如下:mcLinInfo. libID:辅助线型号mcLinInfo. linstyID:线型号(4)基于COM组件式开发C#语言的还原显示实现代码如下:mcLinInfolineInfo = new mcLinInfo();//线信息mcGeoVarLinevarLine = new mcGeoVarLine();//折线对象//点对象mcDot dot1 = new mcDot();mcDot dot2 = new mcDot();//点对象赋值dot1.x = 50;dot1.y = 50;dot2.x = 200;dot2.y = 200;//添加到折线对象varLine.Append2D(dot1);varLine.Append2D(dot2);//设置线参数lineInfo.linstyID = 21;lineInfo.libID = 4;lineInfo.xscale = 20;lineInfo.yscale = 20;//画图IXDisplay display = this.axMapXView1.Display;//画图对象display.DispLine(ptGeom as IGeoLine, lineInfo as mcLinInfo, 6);//依照线参数显示对应的线display.DisplayOption.SymbolShow = true;//开启还原显示功能display.DispLine(varLine, lineInfo as mcLinInfo, 0);//重绘制线2、在查看地图的进程中,常要通过不同比率显示地图,如何通过代码实现依照必然的显示比率显示地图的功能?答:步骤如下:(1)用户常常将显示比率与比例尺相混淆,比例尺一样应用于地图数据打印输出时,表示图上距离与实际距离的比值。
MAPGIS7二次开发入门篇C++
中地软件系列丛书MAPGIS70二次开发教程―入门篇(C++版)中地数码科技有限公司2006年4月武汉内容提要《MAPGIS70二次开发教程-入门篇( C++版)》是根据最新推出的MAPGIS70软件平台编写而成,主要介绍在VC环境下进行MAPGIS70二次开发必须具备的基础知识,通过实例程序一步步的带领大家了解和理解MAPGIS70二次开发的开发模式和开发技巧。
本书作为MAPGIS70地理信息系统系列产品配套使用手册,供使用MAPGIS70地理信息系统进行二次开发的入门用户参考。
版权所有武汉中地数码科技有限公司警告:未经武汉中地数码科技有限公司书面许可,任何单位和个人均不得以任何形式或手段复制或传播本书的任何部分。
在国家“十五”863项目的支持下,历经5年的科技攻关,由中地数码科技有限公司开发的具有完全自主版权的第一套“分布式超大型GIS平台软件MAPGIS70”已经研制成功。
MAPGIS70是属于最新的“第四代GIS”软件产品,具备“纵向多层,横向网格”的分布式体系结构,采用“面向服务”的最新设计思想,支持局域和广域网络环境下空间信息网格(SIG)的分布式计算,实现了面向空间实体及其关系的数据组织、高效海量空间数据的存储与索引、大尺度多维动态空间信息数据库、三维实体建模和分析,具有TB级空间数据处理能力、支持分布式空间信息分发与共享、网络化空间信息服务,支持Unix/Linux大型服务器,支持海量、分布式的国家空间基础设施建设。
《《MAPGIS70二次开发教程-入门篇( C++版)》是根据最新推出的MAPGIS70软件平台编写而成,主要介绍在VC环境下进行MAPGIS70二次开发必须具备的基础知识,通过实例程序一步步的带领大家了解和理解MAPGIS70二次开发的开发模式和开发技巧。
本书共分为两部分:第一部分是基于插件的应用框架开发,通过实例带领大家完成工具,视图插件制作的过程。
第二部分是基于MFC类库的应用框架开发,通过实例带领大家完成地图文档的显示编辑,空间分析功能模块的开发过程。
第一章MAPGIS基础知识
曲线光滑:就是根据给定点列用插值法或曲线拟合法建立某一符合实际要求的连续光滑曲线的函数,使给定点满足这个函数关系,并按该函数关系用计算加密点列来完成光滑连接的过程。
结点:结点是某弧段的端点,或者是数条弧段间的交叉点。
结点平差(顶点匹配):本来是同一个结点,由于数字化误差,几条弧段在交叉处,即结点处没有闭合或吻合,留有空隙,为此将它们在交叉处的端点按照一定的匹配半径捏合起来,成为一个真正结点的过程,称为结点平差。
第一章---MAPGIS基础知识
————————————————————————————————作者:
————————————————————————————————日期:
第一章MAPGIS基础知识
1.1、MAPGIS基本概念。
用户坐标系:是用户处理自己的图形所采用的坐标系。
设备坐标系:是图形设备的坐标系。数字化仪的原点一般在中心,笔绘图仪以步距为单位,以中心或某一角为原点。
监督分类:根据样本区特征建立反射与分类值的关系,然后再推广到影像的其它位置。它以统计识别函数为理论基础。而非监督分类以集群理论为基础,自动建立规则。
网络(Network):由节点和边组成的有规则的线的集合,如道路网络、管道网络。节点是线的交叉点或线的端点,边是数据库模型中的链(即定义复杂的线或边界的坐标串),节点度是节点处边的数目。网络分析多种多样,如交通规划、航线安排等。
重采样:就是根据一类象元的信息内插另一类象元信息的过程。
遥感:广义上讲,遥感就是不直接接触所测量的地物或现象,远距离取得测量地物或现象的信息的技术方法。狭义而言,主要指从远距离、高空以至外层空间的平台上,利用可见光、红外、微波等探测仪器,通过摄影和扫描、信息传感、传输和处理,从而识别地面物质的性质和运动状态的现代化技术系统。
MapGIS-TDE二次开发体系介绍
插 件 相 关
C++插件式二次开发
基本类结构
#include " TDEFunctionPluginBase.h” class CDomeFuncPlug: public FunctionPluginBase { public: CDomeFuncPlug(); virtual ~ CDomeFuncPlug(); public: void onExecute(const String& name, WPARAM wParam, LPARAM lParam); void registerFunctions(void); };
Com组件二次开发接口:在原C++二次开发接口的基础上封装了一 层组件接口,亦能同C++接口一样无差别的完成二次开发功能,主 要提供给VB、Delphi、C#、等其他语言的开发使用。
二次开发流程
开发过程围绕TDE插件展开,TDE框架负责数据的存储,组织以及显示 功能。TDE存储负责TDE数据同MapGis地理数据库的交互,Workspace 负责将TDE数据以树结点的形式组织挂接到三维数据树上,同时将TDE 数据转换为三维渲染实体,送到Dingle中进行显示。
}
C++插件式二次开发
功能响应函数 void onExecute(const String& name, WPARAM wParam, LPARAM lParam) { If(STR_CREATE_FEATURE == name) { //...} else If(STR_BUILD_HEAD_MDL == name) { //...} else If(STR_BUILD_ILL_MDL == name) { //...} else If(STR_BUILD_COAST_MDL == name) { //...} } 插件导出接口 long WINAPI dllStartPlugin(void) 启用插件。 long WINAPI dllStopPlugin(void) 停用插件。
MAPGIS地理信息系统的二次开发
16 测绘信息与工程 2000 N o .1M A PG IS 地理信息系统的二次开发郭际元 曾 文摘 要 介绍了M A PG IS 地理信息系统的二次开发的环境,工作区概念,空间实体及其数据组织,应用程序类型以及编写应用程序的方法。
关键词 地理信息系统 二次开发 工作区 空间实体 M A PG IS 地理信息系统是中国地质大学(武汉)信息工程学院,在十几年数字制图软件开发的基础上,开展G IS 应用系统研究工作而开发出来的。
该软件于1995年10月通过鉴定,经过这几年的不断完善和扩充,于1998年推出了5.32版本。
M A PG IS 是运行在PC 486以上微机平台的工具型软件,它为用户提供了两种使用方法:其一是利用软件自身的各种功能,建立用户的空间和专业属性数据库,并实现用户所需的各种专业检索和分析;其二是借助软件所提供的完整的二次开发函数库,在M A PG IS 平台上开发面向各自领域的应用系统。
目前,利用该平台已研制开发出通信管网及配线、国土详查、地籍管理、供水管网、煤气管道、城市综合管网、电力配网、城市规划、辅助作战指挥、GPS 导航与监控、环境保护与监测等一系列应用软件系统。
1 M A PG IS 的二次开发环境操作系统,M A PG IS 开发函数库以及M A PG IS 应用程序的相互关系,如图1。
目前,M A PG IS 二次开发库主要是以A P I 函数的方式提供的,这些函数的实现被封装在12个动态链接库(DLL )中,因此,是独立于开发工具的。
用户在所使用的高级语言中,如何调用W indow s 的A P I 函数,可依此调用M A PG IS 的二次开发函数。
M A PG IS 二次开发函数库,有工作区基础函数、图形显示输出、工作区管理函数、图形窗口操作、空间分析函数、地图库读取显示、图形编辑函数、图像输入输出、图像显示函数、彩色变换函数、图像处理函数以及进程控制函数。
MAPGIS二次开发讲义
MAPGIS二次开发简明讲义一、MAPGIS二次开发的基本概念成熟实用的地理信息系统(GIS)的重要标志就是它提供给用户的二次开发能力。
MAPGIS 提供完整的二次开发函数库。
用户完全可以在MAPGIS平台上开发面向各自领域的应用系统。
操作系统、MAPGIS开发库及MAPGIS应用程序的相互关系如下图所示:基于MAPGIS平台的应用程序MAPGIS二次开发函数库包括下表所列部分,这些库函数都支持Windows3.x,Windows95和NT操作系统。
MAPGIS二次开发函数库支持的语言包括Borland c++,Visual c++,Visual basic等高级语言程序设计环境。
表1 MAPGIS函数库MAPGIS二次开发函数采用匈牙利命名法,即动宾结构命名法,并且所有函数都以下横线开始,以便和Windows函数以及其他语言函数明显区别开来,如_GetLin表示取线实体;在Visual Basic环境下,由于Visual Basic语言不能识别以下横线开始的函数名,所以库函数都以字母b开始,如bGetLin表示取线实体。
上述动态函数库提供了从最基本数据单元的读取、保存、更新和维护到MAPGIS地图库的建立和漫游,以及空间分析,图象处理等一系列功能,MAPGIS应用程序可以根据需要在任何层次上进行开发。
除了上述 API函数外,MAPGIS还为基于MFC(Microsoft Foundation Class)的开发者提供多个可重用基类,将应用程序所需的常见基本功能作了封装,使用便利,改动灵活。
MAPGIS正在向组件化迈进,已推出一系列组件,这将使得二次开发更为快捷便利。
但与此同时MAPGIS仍将不断完善其API函数库,以多种开发手段满足不同层次、不同应用的需求。
二、MAPGIS的数据组织工作区MAPGIS数据管理的核心就是对工作区的操作。
工作区是MAPGIS提出的一个概念,简单地说,工作区就是一个数据池,存放实体的空间数据、拓扑数据、图形数据和属性数据,每个工作区都对应于一个MAPGIS数据文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MAPGIS二次开发基础知识一、手动注册组件与注销组件COM以及客户应用程序所需的、用来定位组件及对组件进行实例化的信息存储在Windows的注册表(Registry)里。
因此,在使用组件之前要对组件进行注册,只有成功注册才能引用该组件,其具体步骤为:1.将包容组件的DLL文件放入MAPGIS PROGR AM 目录下,假设物理路径为:D:\mapgis65\program\ MapGisBasCom1.dll2.运行注册表程序注册组件 Windows开始菜单-〉运行:regsvr32 D:\mapgis65\program\MapGisBasCom1.dll 注册成功与否将有对话框弹出。
3.注销该组件方法为:regsvr32 /u D:\mapgis65\program\MapGisBasCom1.dll二、Visual Basic中嵌入对象类型库为了使Visual Basic能够访问MAPGIS对象定义,应该在Visuai Basic项目或模块中嵌入MAPGIS对象类型库。
如果想把一个Visual Basic对象声明为MAPGIS对象类型,要求嵌入MAPGIS对象类型库, 如果想把一个Visual Basic对象声明为一般Object类型,就不必嵌入MAPGIS对象。
为了在项目中嵌入MAPGIS对象类型库,通常执行这些步骤: 从Project(工程)菜单, 选择R eferences, R eferences对话框出现, 选中复选框嵌入MapGisBasCom1 Type Library文件。
这要求VisualBasic环境或代码模块编辑器是活动的,正在运行。
三、使用MAPGIS对象可以使用Visual Basic编写使用MAPGIS对象的程序。
在Visual Basic程序中使用MAPGIS对象所要求的步骤是:1.嵌入MAPGIS对象类型库。
2.建立一个MAPGIS对象。
3.使用MAPGIS对象和包含的其他对象。
4.释放MAPGIS对象。
使用一个句点(.)把对象变量与该对象的属性、方法和集合分开。
四、使用C++和COM函数可以使用C++和COM函数编写使用MAPGIS对象的程序。
在C++程序中使用MAPGIS对象所要求的步骤是:1.嵌入MAPGIS对象和COM头文件,并链接到COM库。
2.初始化C0M库。
3.建立一个MAPGIS对象。
4.使用MAPGIS对象和包含的其他对象。
5.释放MAPGIS对象。
6.解除C0M库的初始化。
使用成员选择运算符(->)把“对象指针”变量与属性、方法和集合函数分开。
嵌入MAPGIS对象对MAPGIS对象编程的第一步是在项目中嵌入合适的类型库或头文件。
完整的MAPGIS对象类型库包含在MapGisBasCom1.h文件中,这个文件的默认路径:D:\mapgis65\include\MapGisBasCom1.h类型库含有关于所有MAPGIS对象、属性和方法的信息。
五、COM的调用MAPGIS对象包括ANSI和Unicode这两个定制接口。
使用ANSI接口时,所有MAPGIS对象字符串都是每个字符一个字节的ANSI字符串。
使用Unicode接口时,所有MAPGIS对象字符串都是每个字符两个字节的Unicode字符串。
所有MAPGIS对象字符串都使用====BSTR字符串数据类型。
默认情况下使用ANSI定制接口和ANSI ====BSTR字符串。
如果想使用Unicode定制接口和Unicode =====BSTR字符串,在嵌入所有头文件之前必须定义UNICODE和_UNICODE。
例如:#define UNICODE#define _UNICODE在字符串值两端使用TEXT(“str”)宏。
默认情况下,这些是ANSI“Str”字符串。
在定义了UNICODE和_UNICODE时,这些是Unicode L“Str”字符串。
在32位0LE中,所有BSTR字符串是Unicode字符串。
为了使C++程序能够访问MAPGIS对象定义,除了嵌入Windows和0LE头文件之外,还必须嵌人MAPGIS==.H和MAPGIS==.H头文件。
默认情况下,MAPGIS头文件位于======\INCLUDE目录中。
Visual C++项目的Include设置或INCLUDE环境变量应指向含有这些文件的目录。
必须嵌入以下头文件:1. MapGisBasCom1_i.c2. MapGisBasCom1.h例如:#include "MapGisBasCom1_i.c"#include "MapGisBasCom1.h"Visual C++项目的Library设置或LIB环境变量应指向含有这些文件的目录。
六、初始化COM库在程序能使用MAPGIS对象之前,必须初始化C0M库。
Visual BasicMAPGIS程序不必初始化COM,Visual Basic自动初始化C0M库。
C++所有MAPGIS COM函数都返回一个HRESULT值,这个值含有关于MAPGIS COM函数的成功或失败的信息。
可以声明单个HRESULT变量并重复利用它。
例如:HRESULT hr;在调用任何MAPGIS或COM函数之前, MAPGIS程序必须使用COM CoInitialize函数初始化COM库。
例如:hr=CoInitialize(Null);必须把NULL传递给CoInitialize。
七、建立MAPGIS对象MAPGIS组件的核心是MAPGIS对象。
Visual Basic在Visual Basic 中有2个方法用于建立MAPGIS对象,这2个方法都涉及使用Dim 语句声明特定类型的对象变量。
特定的MAPGIS对象类型常用的方法(如果使用的Visual Basic 版本支持它)是使用Dim语句声明特定MAPGIS对象对象类型的对象变量,这个方法要求MAPGIS类型库包括在Visual Basic项目中。
为了实际建立一个MAPGIS对象的新实例.可以在Dim语句中使用New关键字(如果使用VisualBasic版本支持它的话)或者使用CreateObject函数。
例如,使用New关键字创建新的MAPGIS对象的语句是:Dim ldot As New L_DOT例如,使用CreateObject函数声明和创建一个新的MapGis对象:Dim ldot As L_DOTSet ldot = CreateObject("MapGisBasCom1.L_DOT")有些版本的Visual Basic 使用虚函数表绑定(vtable-binding),或早期绑定。
直接使用MAPGIS定制接口(不通过COM IDispatch接口),产生最好的性能。
有些版本的Visual Basic使用推迟绑定的形式,叫做分派ID绑定(dispID,binding),它使用COM IDispatch。
IDispatch ::Invoke 函数与在MAPGIS类型库中包括的dispID一起使用。
这种方法使应用的性能没有使用New关键字那样快.但比使用Object类型快。
八、在C++中建立MAPGIS对象在C++中只有一种方法建立MAPGIS对象,声明合适的MAPGIS“对象指针"类型的对象变量,然后使用COM CoCreateInstance函数建立MAPGIS对象的新实例。
把以下参数传递给CoCreateInstance:1. MAPGIS对象的类ID2. NULL3. CLSCTX_INPROC_SERVER4. MAPGIS对象的接口ID5. MAPGIS “对象指针”变量的地址(使用&运算符的地址)。
例如,要建立一个新的ID_Dot MAPGIS对象:IPntArea *ptPAi;hr=CoCreateInstance(CLSID_PntArea,NULL,CLSCTX_INPROC_SERVER,IID_IPntArea,(void**)&ptPAi);注意:一个多线程程序,必须串行化对MAPGIS对象的所有访问,以避免重入.九、函数库名称函数库名称 c,c++说明文件工作区基础函数 Win_area.h矩形图框函数 frmdll32.h投影类库 projdll.h控制点操作 w32_cpnt.h状态栏显示点转换以及工作区投影函数 cordcvt.h图形显示输出 Map_out.hwin_out.h工程对象操作函数以及拼版文件操作函数 Map_prj.h编辑工程文件 Prj_Disp.h图例和工程文件操作函数 Project.h图像显示函数 Mapdisp.h图像编辑函数 Mapedi t.h输入编辑子系统类库 CGisEdit.hCPrjEdit.h拓扑操作函数 Gistopo.h图元以及剪贴板操作函数 clippaste.hUNDO 处理数据及成员函数gistool.h窗口操作函数 CGisView.hGisView对象函数 Win_oper.h空间分析函数 Spc_anly.h各种头文件 MapGis.h十、怎样用vb对mapgis进行二次开发,不知道怎样将二者联系起来Vb开发三种方式:MAPGIS API开发库通过调用应用程序接口直接编程MAPGIS 可视控件(ocx)MAPGIS 组件开发(com)通过控件和组件编程如何创建MAPGIS对象Dim workai As NEW PntAreaDim workai As PntAreaSet workai = CreateObject(“MapGisBasCom1.pntarea”)三种方式可以互为补充。