当前位置:文档之家› MAPGIS二次开发讲义

MAPGIS二次开发讲义

MAPGIS二次开发讲义
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数据文件。MAPGIS 开发函数库提供对工作区实施操作的一系列函数,如将工作区中的内容存盘,从盘上将数据装入工作区,对工作区中内容进行添加、修改、删除、检索等等。对硬盘数据的存取及虚拟内存的管理等等复杂繁琐的工作无需应用程序的编写者去关心,而是由MAPGIS工作区管理模块自动完成。如图1-2所示。由此可见,深入了解工作区的逻辑结构和工作区操作函数的

工作区管理模块的地位

MAPGIS将工作区分为点、线、区、网、表五种类型,它们的差别主要表现在其中包含的空间实体的类型不同。详见下表:

各类工作区中可以包含的实体类型

由于不同种类的工作区中空间实体的类型不同,各类型的工作区所适用的数据操作函数也就不同。例如,对点工作区只能使用操作点实体数据的函数;而对区工作区则可对线、结点和区实体的数据进行操作。

空间实体及其数据组织

空间实体是MAPGIS数据操作的基本单位,在一个工作区中,一类实体可有多达2G的个体,每个个体都有唯一的序号,称为实体号(点号、线号、区号、网号、记录号等)。对实体数据的存取主要依据实体号。

每个实体在工作区中都存储有对应的空间数据、拓扑数据、图形参数及属性记录。当然,实体类型不同,上述几方面的数据就有不同的特点,见下表。

不同类型实体的相关数据

说明:

1. F_DOT 是描述二维空间位置的数据结构,就是(x,y )座标对。见后边“宏定义及数据结构”。

2.

LIN_INFO 是描述线的拓扑关系的数据结构,主要记录线两端的结点、线两边的区等信息。见后边

“宏定义及数据结构”。 3.

PNT_INFO 、LIN_INFO 、REG_INFO 、NET_INFO 分别是描述点、线、区、网图形特征(用于显示

或输出)的数据结构,其定义见后边“宏定义及数据结构”。

4. 上表中仅列出不同类实体的缺省属性域,它们是最基本的。用户可以在此基础上任意扩充新的各种数据类型的数据域以满足自己的需要。

对每种空间实体的空间数据、拓扑数据、图形参数及属性记录,MAPGIS 都提供相应的

函数来实施获取、修改、删除等操作。

下面以例子来详细说明线实体、结点实体、区实体在工作区中的数据组织。

L1

n2

一个区工作区中的空间实体

图1-3给出了一个区工作区中的空间实体。在这个工作区中有四条线(线号分别用L1、L2、L3、L4表示),有四个结点(结点号分别用n1、n2、n3、n4表示),有两个区(设区号分别为R1、R2)。

1、线实体

MAPGIS 中的线由多个座标点组成,线实体的空间数据就是存放在工作区中的座标点序列(D_DOT 结构)。如果线L1由8个点组成,它的空间数据就如下所示:

线拓扑(LIN_TOP 结构)记录线两端的结点和线两旁的区。如线L2的拓扑数据如下:

而L4起始结点

右区

2、结点实体

结点的空间数据与点实体一样,是二维座标点,其拓扑数据记录它所连接的线,如n1的拓扑数据是:

而n4的拓扑数据是:

3、区实体

区由线实体(在区工作区中又被称为弧段)围成,它的空间数据主要记录这些线的序号。如果线L1、L2、L3、L4的方向如图1-3所示,且所含座标点的数目分别为d1、d2、d3、d4,假设我们将顺时针方向定为R1的方向(这并不是硬性的规定,也可以将一个区的方向定为逆时针),则区R1的空间数据如下:

注意:

1.第一个单元存放的并不是线号,而是全部线的座标点数目的总和加上区边界的圈数;

2.边界各圈的线号用0相隔;

3.在数据中与区方向一致的线用正数表示,与区方向相反的线则存储线号的相反数。

4、属性记录

图1-3中各个实体对应的属性记录都具有如下结构:

偏移字节 0 1 1+sizeof(long)

*(double*)(att+5)

三、工作区数据操作

下面介绍对工作区实施管理及对工作区中实体进行查询、检索和修改的一系列函数,相关头文件:Win_Area.h。

1、初始化和关闭工作区实例

工作区实例可以认为是工作区的一个集合,要实施工作区的各项操作,首先要建立一个工作区实例(相当于先建立一个空的工作区集合),再在这个实例的基础上创建一个工作区(相当于把一个工作区加入工作区集合)。在使用完工作区实例对应的(即这个工作区集合中的)全部工作区之后,应该关闭(撤消)工作区实例。

工作区数据操作的一般次序是:创建工作区实例——>使用工作区实例打开工作区——>将数据文件或数据库中的数据表装入工作区——>对工作区中的实体实施添加、删除、修改、查询等操作——>将工作区存盘——>关闭工作区——>关闭工作区实例。

初始化工作区,创建工作区实例

AREA_HINST _InitWorkArea(HINSTANCE hInst);

参数:入口hInst-进程实例句柄

出口

返回值成功则返回值大于0,该值表示合法的工作区实例,使用该工作区实例,MAPGIS应用程序可以打开多个属于该实例的工作区;失败则返回0。

说明:每一个工作区都应该对应于一个工作区实例。

关闭所有工作区

int _CloseAllArea(AREA_HINST ahInst);

参数:入口ahInst - 工作区实例,由_InitWorkArea函数创建。若ahInst=0则关闭所有实例的所有工作区;若ahInst合法,则只释放ahInst实例及其所属工作区。

出口

返回值成功返回1,失败返回0,取消则返回IDCANCEL。

说明:该函数检查所有属于ahInst实例的工作区,并且关闭这些工作区。若某一工作区的内容已经被修改,则该函数弹出对话窗如图2.3,询问是否保存,若:

图4-1文件是否保存提示窗

选择按钮,则保存该文件。

选择按钮,则不保存文件。

选择按钮,则立即返回IDCANCEL。

询问完所有被修改的工作区,该函数将关闭所有工作区,若成功则返回1,否则0。

为了使MAPGIS应用程序在结束时,立即释放相关工作区所占用的内存空间,应该调用该函数。若该函数调用成功,则清除与ahInst实例相关的内存,并释放该实例。

释放工作区实例

int _FreeWorkArea(AREA_HINST ahInst);

参数:入口ahInst - 工作区实例,由_InitWorkArea函数创建。

出口

返回值成功返回1,失败返回0,或者返回IDCANCEL。

说明:该函数功能与_CloseAllArea函数相同,请参阅_CloseAllArea函数说明。

示范:下列C程序说明工作区实例创建和撤消的使用方法:

AREA_HINST AHInst; /*定义工作区实例*/

/*主窗口回调函数*/

LRESULT CALLBACK _export WndProc(HWND hWnd, UINT msg,WPARAM Param,

LPARAM lParam)

{

LRESULT rtn=0;

switch(msg)

{

case WM_CREA TE:

AHInst=_InitWorkArea(hInstance);

break;

case WM_CLOSE:

if(_CloseAllArea(AHInst)==IDCANCEL)

break;

DestroyWindow(hWnd);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

rtn=DefWindowProc(hWnd,msg,wParam,lParam);

break;

}

return(rtn);

}

2、工作区整体操作

打开关闭工作区

打开特定类型的工作区

short _OpenPntArea(AREA_HINST ahInst);打开点工作区

short _OpenLinArea(AREA_HINST ahInst);打开线工作区

short _OpenRegArea(AREA_HINST ahInst);打开区工作区

short _OpenNetArea(AREA_HINST ahInst);打开网络工作区

short _OpenTblArea(AREA_HINST ahInst); 打开表格工作区

short _OpenDbsTblArea(AREA_HINST ahInst,char *tblFname,char editable=0); 打开数据表格工作区

参数:入口 ahInst - 工作区实例

*tblFname –表格文件名

editable –编辑状态标志,1/0 可/不可

出口

返回值工作区号,若>0则表示成功,否则为失败。

打开某种类型的工作区

short _OpenArea(AREA_HINST ahInst,short type);

参数:入口ahInst - 工作区实例

type - 工作区类型,允许使用下列宏定义之一:

LIN,PNT,REG,NET,TBL。

出口

返回值返回工作区号,若>0则表示成功,否则为失败。

打开指定的数据文件对应的工作区,并将数据装入到新工作区中

short _OpenFileArea(AREA_HINST ahInst,char *fname,char *szDSN=NULL,

char *szLOG=NULL,char *szPSW=NULL,short dtype=LIN);

参数:入口ahInst - 工作区实例

*fname –文件名

*szDSN - ODBC数据源名称

*szLOG - 登录号(登录名)

*szPSW - 登录口令

dtype - 数据源类型

出口

返回值返回工作区号,若>0则表示成功,否则为失败。

说明:若数据是本地数据,则该函数首先检测fname文件的类型,然后打开一个相同类型的新工作区,并将fname文件装入新工作区,最后返回工作区号。若是网络数据,则该函数根据dtype打开新工作区,并将fname指定的网络数据映射到新工作区。

关闭指定的工作区

int _CloseArea(short ai);

参数:入口ai -工作区号

出口

返回值0-失败,原因是ai工作区号非法或ai工作区不存在。

1-成功。

IDCANCEL-取消。

若工作区内容被修改,则该函数弹出如图4.1所示对话窗,若:

选择按钮,则该函数先保存文件,然后关闭工作区。

选择按钮,则该函数不保存文件就关闭工作区。

选择按钮,则该函数立即返回IDCANCEL。

遍历工作区

获取打开的工作区数

short _GetAreaNumber(AREA_HINST ahInst);

参数:入口ahInst - 工作区实例

出口

返回值返回属于ahInst实例工作区数。

取属于ahInst实例的第一个工作区号

short _GetFirstAreaNo(AREA_HINST ahInst);

参数:入口ahInst - 工作区实例

出口

返回值返回属于ahInst实例的第一个工作区号,返回值大于0是合法的工作区号,表示成功。

取属于ahInst实例的下一个工作区号

short _GetNextAreaNo(AREA_HINST ahInst);

参数:入口ahInst - 工作区号。

出口

返回值返回属于ahInst实例的下一个工作区号,返回值大于0是合法的工作区号,表示成功。

C示范:读取属于AHInst实例的所有工作区

……

short i, ai ,an;

an=_GetAreaNumber(AHInst);

ai=_GetFirstAreaNo(AHInst);

for(i=0;i

{

//使用ai工作区

}

……

清除工作区

清除工作区

short _ClearArea(short ai);

参数:入口ai -工作区号

出口

返回值成功返回1,失败返回0

说明:该函数清除ai工作区中的所有内容,包括图形和属性,使用要慎重。若ai工作区中的内容已经改变,该函数弹出图4.1所示对话框,询问是否要保存数据,详细说明,请参阅_CloseArea函数。

查询和设置工作区特性

取工作区类型

char _GetAreaT ype(short ai);

char _AT ype(short ai);

参数:入口ai - 工作区号

出口

返回值返回工作区类型,可以是下列宏定义之一:LIN,PNT,REG,NET,TBL,DBSTBL。

取工作区所属的实例号

AREA_HINST _GetAreaInstance(short ai);

参数:入口ai - 工作区号

出口

返回值返回ai工作区所属的工作区实例号

说明:工作区号由_InitWorkArea初始化函数获得。

指定的工作区是否为空

short _IsAreaEmpty(short ai);

参数:入口ai -工作区号

出口

返回值工作区空(没有图元)则返回1,否则返回0

指定的工作区是否已经打开?

short _IsOpenArea(short ai);

参数:入口ai -工作区号

出口

返回值打开则返回1,否则返回0

指定的工作区是否改变

char _GetChangeFlag(short ai);

参数:入口ai -工作区号

出口

返回值返回1表示改变,0表示未变或工作区号非法。

设置指定的工作区改变标志

short _SetChangeFlag(short ai,char chg);

参数:入口ai -工作区号

chg-改变标志,1表示改变,0表示未变

出口

返回值成功返回1,否则返回0

说明:除非特别需要,否则,MAPGIS应用程序不要使用该函数来强制工作区变化标志。当打开一个工作区、装文件到工作区或保存工作区内容后,MAPGIS管理系统自动将工作区的变化标志清为0。

受影响的函数:_ClearArea,_CloseArea。使用_SetChangeFlag函数强制改变工作区的变化标志,若chg=1,则_ClearArea,_CloseArea将显示图4.1所示提示窗;若chg=0,则_ClearArea,_CloseArea函数不显示图4.1所示提示窗。

设置数据压缩标志

short _SetPackFlag(short ai,short flag);

参数:入口ai -工作区号

flag-压缩标志;1/0表示:压缩/不压缩

出口

返回值返回原来的数据压缩标志。

说明:如果把某个工作区的压缩标志设置为1,那么在保存工作区内容时,被删除的实体将从物理上被清除掉。打开工作区时,压缩标志被设置为0,所以,在缺省情况下,保存工作区内容时,不清除被删掉的实体。重新装入文件时,被删掉的实体依然存在,并且可用_Undel函数恢复。

取数据压缩标志

short _GetPackFlag(short ai);

参数:入口ai -工作区号

出口

返回值返回数据压缩标志

工作区和文件系统的数据交流

将某个文件装入指定工作区

short _LoadFile(short ai);

参数:入口ai -工作区号

出口

返回值成功返回1,失败返回0

说明:该函数根据ai号工作区类型弹出文件名输入窗,若输入的文件类型和工作区类型不符合,则该函数拒绝装入文件,并返回0。

若ai号工作区中已经有内容,则新装入的内容将覆盖旧的内容。

将指定文件装入指定工作区

short _LoadAFile(char *datName,short ai,char *szDSN=NULL,char *szLOG=NULL, char *szPSW=NULL);

参数:入口 * datName -文件名指针,若为本地数据,则必须带路径。若为网络数据,

则不带路径,且不允许数据名称有后缀,如”.wp”。该函数自动核对

文件和工作区类型。

ai -工作区号

*szDSN - ODBC数据源名称,若=NULL,则datName为本地数据,否则

是网络数据,数据通过szDSN指定的数据源进行存取。

*szLOG - 登录号(登录名) ,即为网络数据库的登录号。

*szPSW - 登录口令,即为网络数据库的登录口令。

出口

返回值成功返回1,失败返回0

说明:若装入的文件类型和工作区类型不符,函数拒绝装入文件,并返回0。若ai工作区中已经有内容,则新装入的内容覆盖旧的内容。

添加某个文件到指定工作区

short _AppendFile(short ai);

参数:入口ai -工作区号

出口

返回值成功返回1,失败返回0

说明:该函数根据ai号工作区类型弹出文件名输入窗,若输入的文件类型和工作区类型不符,则该函数拒绝添加文件,并返回0;若图元属性结构和工作区中已有图形属性结构不一致,该函数提问是否添加,若添加,则被添加文件的图元属性结构统一到工作区中的图元属性结构,这可能造成图元属性丢失。

添加指定文件到指定工作区

short _AppendAFile(char *fname,short ai,char *szDSN=NULL,char *szLOG=NULL,

char *szPSW=NULL);

参数:入口*fname - 文件名称,必须带路经

ai -工作区号

*szDSN - ODBC数据源名称

*szLOG - 登录号(登录名)

*szPSW - 登录口令

出口

返回值成功返回1,失败返回0

说明:该函数判断所添加文件的类型和工作区类型,若不相同,则该函数拒绝添加文件,并返回0;若图元属性结构和工作区中已有图形属性结构不一致,该函数提问是否添加,若添加,则被添加文件的图元属性结构统一到工作区中的图元属性结构,这可能造成图元属性丢失。

将工作区内容存入文件

short _SaveFile(short ai);

参数:入口ai -工作区号

出口

返回值成功返回1,失败返回0

说明:若工作区有对应的文件名,则将工作区中的内容直接存到文件中;否则该函数弹出文件名输入窗,请求输入文件名并把工作区内容存入所输的文件中。

将工作区内容存入另一个文件

short _SaveFileAs(short ai);

参数:入口ai -工作区号

出口

返回值成功返回1,失败返回0

说明:该函数弹出文件名输入窗,请求输入新文件名,然后将工作区中的内容存到新文件中,再将新文件名设置为工作区对应的文件名。

将工作区内容存入指定文件

short _SaveAFile(short ai,char *fname,char *szDSN=NULL,char *szLOG=NULL, char *szPSW=NULL);

参数:入口ai -工作区号

*fname -文件名指针,必须带路径,该函数自动强制文件名后缀

*szDSN - ODBC数据源名称

*szLOG - 登录号(登录名)

*szPSW - 登录口令

出口

返回值成功返回1,失败返回0

将指定实例的所有工作区分别存入文件

int _SaveAll(AREA_HINST ahInst);

参数:入口ahInst - 工作区实例

出口

返回值成功返回1,失败返回0

取工作区实体个数

short _GetLinNum(short ai,long *logN,long *n);

short _GetRegNum(short ai,long *logN,long *n);

short _GetPntNum(short ai,long *logN,long *n);

short _GetNodNum(short ai,long *logN,long *n);

short _GetNetNum(short ai,long *logN,long *n);

short _GetPathNum(short ai,long *logN,long *n);

参数:入口ai - 工作区号

出口*logN - 返回逻辑数,即未被删除的图元数

*n - 返回物理数(物理数=逻辑数+被删除图元数+1)

返回值1/0 - 成功/失败

3、实体数据操作

以下介绍对工作区中的实体实施各类操作的函数,这些操作包括获取空间、图形、拓扑和属性数据,添加实体,删除实体等。

工作区中的实体都是通过实体号来标识的,所以访问实体的函数,如果是专门针对某一类实体的(如_GetLin、_GetLinTop、_GetLinAtt),一般都以工作区号、实体号作为第一个和第二个参数;如果函数可以处理多种实体类型(如_GetAtt),则一般以工作区号、实体类型、实体号作为头三个参数。例外的情况是往工作区中添加实体的函数,不会要求传入实体号,而是把工作区管理模块为新实体分配的实体号作为返回值。什么是实体号呢?实际上就是实体在工作区中的排序号。值得一提的是,这种排序号不一定是连续的。例如,假设一个线工作区中有五条线,线号分别是1、2、3、4、5,如果调用_DelLin函数删除了3号线,则4号、5号线的线号不会因此减一,而是保持不变。此时3号线的全部数据都还存在于工作区中,只是由于3号线已经被打上了删除标记,这些数据不再能够访问了,如果针对3号线来调用数据获取的函数,将会返回失败值。但是您可以通过调用恢复实体的函数_UnDelLin来去掉3号线的删除标记,从而恢复它的全部数据。

再来看一下工作区中的实体数目。由于被删除的实体在工作区中形成“空洞”,所以工作区中实体数目有物理数和逻辑数之分。物理数包括了被删除的实体,而逻辑数只计算未被删除、可以访问的实体。在工作区创建时,会为这个工作区中能够容纳的每一实体类型自动生成一个实体,编号为0,它只为某些内部特殊功能服务,二次开发者不应使用,但在计算物理数时,0号实体被计算在内,所以在工作区创建之初,每类实体的物理数都是1,逻辑数都是0。在上面所举线工作区的例子中,删除3号线之后,工作区中线的物理数是6,逻辑数是4。

为了彻底清除被删除的实体,避免“空洞”占据磁盘文件的空间,可以在工作区存盘之前调用函数_SetPackFlag,将工作区压缩标志设为1,存盘时将对实体号实施重排,被删除的实体被彻底丢弃。在上面线工作区的例子中,如果设了压缩标志后存盘,再重新装入工作区,线号将会发生改变。

命名惯例:

获取数据:_Get…

修改数据:_Write… _Update…

添加数据:_Append…

删除实体:_Del…

恢复实体:_UnDel…

线实体操作

取线实体

short _GetLin(short ai,long li,D_DOT **dat,long *len,LIN_INFO *inf);

参数:入口ai - 工作区号

li - 线号,线号必须大于0

出口**dat - 返回D_DOT数据块的地址(*dat所指内存空间有_GetLin申请) *len - 返回D_DOT数据项数(即线的点数)

*inf - 返回线图形信息,若不需要图形信息,则该参数可为NULL 返回值1=成功0=失败-1=该实体已被删除

C++示例:从给定的ai号工作区中读取所有线

//……

long i,linN;

long len;

LIN_INFO linf;

D_DOT *lxy;

//取线实体数,i返回逻辑数,linN返回物理数。

_GetLinNum(ai,&i,&linN);

for(i=1;i

{

if(_GetLin(ai,i,&lxy,&len,&linf)<=0)

continue;//略过被删除的线

//处理线实体代码

// ……

}

说明:您一定注意到,在上述接口中,线坐标序列所占据的内存是由工作区管理模块来申请的,也许您会有疑问:这块内存区域如何释放?实际上工作区管理模块对于自己申请的内存都提供相应的函数让您来释放它们(请参阅详细的开发文档),不过您几乎从来不需要调用这些函数。工作区管理模块在以下两种时机释放自己申请的内存:1.关闭相应工作区时;

2.调用对同一工作区操作的同一个函数,要向用户返回同样性质的内存区域时。

例如,先调用_GetLin取ai工作区的noLin0号线数据,工作区管理模块申请一块内存区域存放线坐标数据返回;之后又调用_GetLin取ai工作区的noLin1号线数据,工作区管理模块会把上次为noLin0号线申请的内存释放掉,再为noLin1号线申请一块内存区域存放线noLin1的坐标数据(内部的真实情况要复杂一点,如果后一块内存区域不大于前一块区域,工作区管理模块可能不会重新申请,而是直接占用前一块内存)。所以,下列连续调用_GetLin 取同一工作区的线数据的作法是错误的(考虑一下为什么?):

_GetLin(ai,noLin0,&lxy0,&llen0,NULL);

_GetLin(ai,noLin1,&lxy1,&llen1,NULL);

获取线图形信息

short _GetLinInfo(short ai,long li,LIN_INFO *inf);

参数:入口ai - 工作区号

li - 线号。线号必须大于0

出口*inf - 返回线图形信息

返回值1=成功; 0=失败; -1=该实体已被删除。

更新线图形信息

short _UpdateLinInfo(short ai,long li,LIN_INFO *inf);

参数:入口ai - 工作区号

li - 线号,线号必须大于0

*inf - 线图形信息变量地址

出口

返回值1=成功; 0=失败

添加线到线工作区

long _AppendLin(short ai,D_DOT *dat,long len,LIN_INFO *inf);

参数:入口ai -工作区号

*dat - D_DOT数据块

len - D_DOT数据项数

*inf - 线图形信息变量地址。该函数改变inf的rect值。

出口

返回值成功则返回线号(>0),失败则返回0。

失败原因:1.线点数太少(<2); 2.工作区不存在; 3.工作区不是普通工作区; 4.线太短(长度=0)

更新线

short _UpdateLin(short ai,long li,D_DOT *dat,long len,LIN_INFO *inf);

参数:入口ai -工作区号

li - 线号,线号必须大于0

*dat - 线坐标数据串地址

len - 数据项数(坐标点数)

*inf - 线图形信息变量地址,若为NULL,则表示不更新线图形信息。若inf不等于NULL,该函数改变inf的rect值。

出口

返回值1=成功; 0=失败。

失败原因:1.线点数太少(<2); 2.工作区不存在; 3.工作区不是普通工作区; 4.线太短(长度=0); 5.线号超界。

删除线实体

short _DelLin(short ai,long li);

参数:入口ai -工作区号

li - 线号,线号必须大于0

出口

返回值1=成功; 0=失败

说明:该函数仅仅从逻辑上删除指定的线实体。若再取被删除的线,则返回-1。

失败原因:1.工作区不存在; 2.工作区不是普通工作区; 3.线号超界。

恢复被删除的线

short _UnDelLin(short ai,long li);

参数:参照_DelLin

取线拓扑结构数据

short _GetLinT op(short ai,long li,LIN_TOP *top);

参数:入口ai -工作区号

li - 线号

出口*top - 返回线拓扑数据

返回值1=成功; 0=失败

写线拓扑结构数据

short _WriteLinTop(short ai,long li,LIN_TOP *top);

参数:入口ai -工作区号

li - 线号

*top - 线拓扑结构地址

出口

返回值1=成功; 0=失败.

点实体操作

取点

short _GetPnt(short ai,long pi,D_DOT *xy,char **dat,short *len,PNT_INFO *inf);

参数:入口ai - 工作区号

pi - 点号,点号必须大于0

出口*xy - 返回点位置

**dat - 返回点内容(*dat所指内存空间由MAPGIS申请,若dat=NULL 则不返回点内容)

*len - 返回dat数据长度(字节为单位)

*inf - 返回点图形信息参数,若不需要图形信息,则该参数可为NULL 返回值1=成功, 0=失败, -1=该图元已被删除

取点图形信息

short _GetPntInfo(short ai,long pi,PNT_INFO *inf);

参数:入口ai - 工作区号

pi - 点号,点号必须大于0

出口*inf - 返回点图形信息

返回值1=成功, 0=失败, -1=该图元已被删除

取点位置

short _GetPntPos(short ai,long pi,D_DOT *xy);

参数:入口ai - 工作区号。

pi - 点号。

出口*xy-返回点坐标。

返回值1/0/-1:成功/失败/被删除。

更新点图形信息

short _UpdatePntInfo(short ai,long pi,PNT_INFO *inf);

参数:入口ai - 工作区号

pi - 点号,点号必须大于0

*inf - 点图形信息

出口无

返回值1=成功, 0=失败, -1=该图元已被删除

获取点的类型

short _GetPntType(short ai,long pi,short *pntType);

参数:入口ai - 工作区号

pi - 点号,点号必须大于0

出口*pntType - 返回点类型

返回值1=成功, 0=失败, -1=该图元已被删除

添加点

long _AppendPnt(short ai,D_DOT *xy,char *dat,short len,PNT_INFO *inf);

参数:入口ai - 工作区号

xy - 点坐标位置

*dat - 点内容

len - dat数据长度(字节为单位)

*inf - 点图形信息

出口无

返回值成功返回点号(>0),失败返回0

更新点

short _UpdatePnt(short ai,long pi,D_DOT *xy,char *dat,short len,PNT_INFO *inf);

参数:入口ai - 工作区号

pi - 点号

*xy - 点坐标位置

*dat - 点内容

len - dat数据长度(字节为单位)

*inf - 点图形信息,若为NULL,则表示不更新点图形信息出口无

返回值1=成功,0=失败

更新点位置

short _UpdatePntPos(short ai,long pi,D_DOT *xy);

参数:入口ai - 工作区号

pi - 点号

*xy - 点坐标位置

出口无

返回值1=成功,0=失败

删除点

short _DelPnt(short ai,long pi);

参数:入口ai - 工作区号

pi - 点号

出口

返回值1=成功,0=失败

说明:该函数从逻辑上删除第pi号点实体。

恢复被删除的点

short _UnDelPnt(short ai,long pi);

参数:入口ai - 工作区号

ri - 点号

出口

返回值成功返回1,失败返回0。

说明:该函数恢复第pi号点实体,该点被_DelPnt函数删除。

区实体操作

取区域

short _GetReg(short ai,long ri,long **rdat,short *len,REG_INFO *inf);

参数:入口ai - 工作区号

ri - 区号,区号必须大于0

出口**rdat- 返回long数据块的地址(*rdat所指内存空间由函数内部申请) *len - 返回rdat数据项数

*inf - 返回区图形信息,若不需要图形信息,则该参数可为NULL 返回值1=成功, 0=失败, -1=该图元已被删除

说明:rdat结构为:

rdat[0] : 区边界弧段封闭所需总点数。若有n条弧段,m圈边界,n条弧段上一共有d个点,则rdat[0]=d+m。

rdat[i] : i>0,其绝对值为区域边界弧段号,rdat[i]>0表示弧段正向,rdat[i]<0表示反向。每一圈边界的弧段连续记录,圈与圈之间用0隔开。如:

表示rdat长度len为7,区边界封闭总点数为1053个点,该区由两圈边界构成,其中第一圈边界由1、10、15号弧段组成,第二圈边界由33和12号弧段组成,第10和第33号弧段反向。

获取区实体图形信息

short _GetRegInfo(short ai,long ri,REG_INFO *inf);

参数:入口ai - 工作区号

ri - 区号,区号必须大于0

出口*inf - 返回区图形信息

返回值1=成功, 0=失败, -1=该图元已被删除

更新区实体图形信息

short _UpdateRegInfo(short ai,long ri,REG_INFO *inf);

参数:入口ai - 工作区号

ri - 区号,区号必须大于0

*inf - 区图形信息参数

出口

返回值1=成功, 0=失败

添加区实体

long _AppendReg(short ai,long *rdat,short len,REG_INFO *inf);

参数:入口ai - 工作区号

*rdat - 区数据地址

len - 区数据项数

*inf - 区图形信息,该函数修改inf的rect值。

出口

返回值成功返回区号,失败返回0

说明:该函数自动计算封闭边界总点数,并填入rdat[0]。该函数设置dat中各弧段的拓扑信息中的左,右多边形。但不检查拓扑的正确性。

更新区实体

short _UpdateReg(short ai,long ri,long *rdat,short len,REG_INFO *inf);

参数:入口ai - 工作区号

ri - 区号

*rdat - 区域数据地址

len - 区域数据项数

*inf - 区图形信息参数,若为NULL,则表示不更新区图形信息出口

返回值1=成功,0=失败

说明:该函数自动计算封闭边界总点数,并填入rdat[0], 该函数设置dat中各弧段的拓扑信息中的左,右多边形。但不检查拓扑的正确性。

删除区实体

short _DelReg(short ai,long ri);

参数:入口ai - 工作区号

ri - 区号

出口

返回值成功返回1,失败返回0。

说明:该函数从逻辑上删除第ri号区实体。该函数删除ri区与各弧段的联系。

恢复被删除的区实体

short _UnDelReg(short ai,long ri);

参数:入口ai - 工作区号

ri - 区号

出口

返回值成功返回1,失败返回0。

说明:该函数恢复第ri号区实体,该区被_DelReg函数删除。该函数恢复ri区与各弧段的联系。但不检查正确性。

网实体操作

取网络

short _GetNet(short ai,long ni,long **hdat,long *len,NET_INFO *inf);

参数:入口ai - 工作区号。

ni - 网络号,网络号必须大于0。

出口**hdat- 返回long数据块的地址(*hdat所指内存空间由MAPGIS申请) *len - 返回hdat数据项数

*inf - 返回网络图形信息,若不需要图形信息,则该参数可为NULL 返回值1=成功, 0=失败, -1=该图元已被删除

说明:hdat结构为:

hdat[0] : 网段总点数。

hdat[i] : i>0,其绝对值为网段号,hdat[i]>0表示网段正向,hdat[i]<0表示反向。hdat[i]=0为非法网段号,可用于分隔网络的不同级别。

表示hdat长度len为7,网络总点数为1053个点,该网络分成两部分,其中第一部分由1、10、15号网段组成,第二部分由33和12号网段组成,第10和第33号网段反向。一个网络通常由相互连通的网段组成,一个网络分成几部分,系统无明确规定。

获取网络实体图形信息

short _GetNetInfo(short ai,long ni,NET_INFO *inf);

参数:入口ai - 工作区号

ni - 网络号,网络号必须大于0

出口*inf - 返回网络图形信息

返回值1=成功, 0=失败, -1=该图元已被删除

更新网络实体图形信息

short _UpdateNetInfo(short ai,long ni,NET_INFO *inf);

参数:入口ai - 工作区号

ni - 网络号,网络号必须大于0

*inf - 网络图形信息参数

出口

返回值1=成功, 0=失败

添加网络实体

long _AppendNet(short ai,long *hdat,long len,NET_INFO *inf);

参数:入口ai - 工作区号。

*hdat - 网络数据地址。

len - 网络数据项数。

*inf - 网络图形信息。

出口无

返回值成功返回网络号,失败返回0。

说明:该函数自动计算网段总点数,并填入hdat[0]

更新网络实体

short _UpdateNet(short ai,long ni,long *hdat,long len,NET_INFO *inf);

参数:入口ai - 工作区号。

ni - 网络号。

*hdat - 网络数据地址。

len - 网络数据项数。

*inf - 网络图形信息参数,若为NULL,则表示不更新网络图形信息。

出口无

返回值1=成功,0=失败。

说明:该函数自动计算网段总点数,并填入hdat[0]。

删除网络实体

short _DelNet(short ai,long ni);

参数:入口ai - 工作区号

ni - 网络号

出口

返回值成功返回1,失败返回0。

说明:该函数从逻辑上删除第ni号网络实体。

恢复被删除的网络实体

MAPGIS67教程(制图详细步骤讲解)

第1章概述与安装 1.1 概述 MAPGIS 是中国地质大学(武汉)开发的、通用的工具型地理信息系统软件。它是在享有盛誉的地图编辑出版系统MAPCAD 基础上发展起来的,可对空间数据进行采集,存储,检索,分析和图形表示的计算机系统。MAPGIS 包括了MAPCAD的全部基本制图功能,可以制作具有出版精度的十分复杂的地形图、地质图,同时它能对图形数据与各种专业数据进行一体化管理和空间分析查询,从而为多源地学信息的综合分析提供了一个理想的平台。 MAPGIS 地理信息系统适用于地质、矿产、地理、测绘、水利、石油、煤炭、铁道、交通、城建、规划及土地管理专业,在该系统的基础上目前已完成了城市综合管网系统、地籍管理系统、土地利用数据库管理系统、供水管网系统、煤气管道系统、城市规划系统、电力配网系统、通信管网及自动配线系统、环保与监测系统、警用电子地图系统、作战指挥系统、GPS 导航监控系统、旅游系统等一系列应用系统的开发。 1.2安装 1)系统要求: 硬件:CPU 486 以上、16M RAM、200M 硬盘、256 色以上显示器; 操作系统:Win9x、Win2000、WinNT 、WinXP或Win7系统; 输入设备:本单位主要使用的是GRAPHTEC—RS200Pro型扫描仪; 输出设备:本单位主要使用的是Canon—IPF700型出图打印机。 2) 硬件的安装: MAPGIS 硬件部分有加密狗,ISA 卡、PCI 卡三种,本单位主要为MAPGIS USB 软件狗,在确保机器BIOS 设置中USB 设备未被禁止的条件下,Windows 98 和Windows2000 自带的标准USB 驱动程序均可支持MAPGIS USB 软件狗工作。 3)软件的安装: MAPGIS 安装程序的安装过程为:找到MAPGIS 系统安装软件,双击SETUP 图标,系统自动安装软件,在WIN2000/NT/XP 下安装时,应先运行WINNT_DRV,提示成功后才可选择SETUP 开始MAPGIS 程序的安装; 对于MAPGIS6.1 及MAPGIS6.5,则无关键字和安装选择,但须根据实际需要选择安装组件。 从上述组件中选择实际运用中需要的选项,根据提示即可完成安装。

利用VB和MAPGIS基本控件做二次开发

利用VB和MAPGIS基本控件学做二次开发 摘要:本文介绍了利用VB进行MAPGIS二次开发的原理、方法和实现技术,为用户进行复杂的应用开发提供了技术基础。 关键词:VB,MAPGIS,二次开发 微软公司的Visual Basic是一个简单易学的可视化开发工具,MAPGIS提供了很多功能强大的图形和属性管理控件,并为二次开发提供了许多完备的功能接口。利用VB和MAPGIS 基本控件可以做一些基本的开发,满足用户的一些特殊需要。本文将以区文件操作开发为例,讲解二次开发的原理、方法、要点和实现技术。 第一步:首先建立VB开发环境。 安装MAPGIS SDK软件到MAPGIS安装路径下。 添加声明模块vbW60_Area.bas,该模块包含MAPGIS基本参数及结构定义、消息与版本定义等。添加的方法是:在VB程序中点取"Project"菜单下的"Add Module",添加vbW60_Area.bas文件,该文件在MAPGIS安装程序的Basic子目录下。 添加参照引用文件。这些文件是MAPGIS控件功能实现的外部参照。添加的方法是:在VB程序中点取"Project"菜单下的“References”,将MapGisBasCtl1 1.0 Type Library、MapGisBasCtl2 1.0 Type Library、MapGisBasCom 1.0 Type Library、MapGisBasCtl 1.0 Type Library四个参照文件打钩,如下图所示。 设置可执行文件输出目录。生成的可执行文件必须放在与MAPGIS安装目录的动态库和控件相同的目录中才能执行。设置的方法是:点取"File"菜单下的"Make *.exe..",选择

mapgis新手教程3

山西地信数码科技公司
MAPGIS 教程
8、系统弹出(如下图)对话框。在此对话框中选择我们新建好的空白文件夹。
此文件夹即为 新建好的空白 文件夹
9、选择要裁剪的文件。这儿有两种情况: ①如果(左面窗口中)所有的文件都需要进行裁剪时,我们直接点击“添加全部”即可。 ②如果(左面窗口中)只有一部分文件需裁剪时,我们要将所需裁剪的文件全部选中(即将 其选为蓝色) 。然后点击“添加”→选择全部→设置“参数” (参数的设置参照下图即可)→ →单击“参数应用” (此时左下角的窗口中会显示出我们将要进行裁剪的图形文件)→单击 “装入裁剪框” (即我们在“输入编辑”中新建好的区文件)→单击“开始裁剪”→在右下 角窗口中的任意位置单击右键,在弹出的下拉菜单中选择“复位窗口” 。这时裁剪后新的图 形文件就显示在此窗口中→退出。
5

山西地信数码科技公司
MAPGIS 教程
此处为裁剪 范围。 此图为裁剪 后的新文件。
10、最后,我们可以在“输入编辑”中打开裁剪后的文件。 (如下图)
6

山西地信数码科技公司
MAPGIS 教程
本次操作结束,如发现有不清或不对的地方请与我们联系(sxmapgis@https://www.doczj.com/doc/4a15109191.html,) ,我们 会及时改正,谢谢! 这里只是讲一些快速的入门法, 如果想更深入的了解 MAPGIS 知识, 请看 MAPGIS 相关书 籍。
7

山西地信数码科技公司
MAPGIS 教程
MAPGIS 打

(作者:sxmapgis) 功能:打印出图. 当一张图绘制完后,我们需要把它打印出来,具体步骤如下:
如果在准备出图的过程中,如果还要进行一些修改,在菜单栏上单击“返回编辑” 。
1

(推荐下载)MAPGIS67教程(制图详细步骤讲解)

(完整word版)MAPGIS67教程(制图详细步骤讲解) 编辑整理: 尊敬的读者朋友们: 这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整word 版)MAPGIS67教程(制图详细步骤讲解))的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。 本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整word版)MAPGIS67教程(制图详细步骤讲解)的全部内容。

第1章概述与安装 1.1 概述 MAPGIS 是中国地质大学(武汉)开发的、通用的工具型地理信息系统软件。它是在享有盛誉的地图编辑出版系统 MAPCAD 基础上发展起来的,可对空间数据进行采集,存储,检索,分析和图形表示的计算机系统。MAPGIS 包括了 MAPCAD的全部基本制图功能,可以制作具有出版精度的十分复杂的地形图、地质图,同时它能对图形数据与各种专业数据进行一体化管理和空间分析查询,从而为多源地学信息的综合分析提供了一个理想的平台。 MAPGIS 地理信息系统适用于地质、矿产、地理、测绘、水利、石油、煤炭、铁道、交通、城建、规划及土地管理专业,在该系统的基础上目前已完成了城市综合管网系统、地籍管理系统、土地利用数据库管理系统、供水管网系统、煤气管道系统、城市规划系统、电力配网系统、通信管网及自动配线系统、环保与监测系统、警用电子地图系统、作战指挥系统、GPS 导航监控系统、旅游系统等一系列应用系统的开发。 1。2安装 1)系统要求: 硬件:CPU 486 以上、16M RAM、200M 硬盘、256 色以上显示器; 操作系统:Win9x、Win2000、WinNT 、WinXP或Win7系统; 输入设备:本单位主要使用的是GRAPHTEC—RS200Pro型扫描仪; 输出设备:本单位主要使用的是Canon—IPF700型出图打印机。 2)硬件的安装: MAPGIS 硬件部分有加密狗,ISA 卡、PCI 卡三种,本单位主要为 MAPGIS USB 软件狗,在确保机器 BIOS 设置中 USB 设备未被禁止的条件下,Windows 98 和 Windows2000 自带的标准 USB 驱动程序均可支持 MAPGIS USB 软件狗工作。 3)软件的安装: MAPGIS 安装程序的安装过程为:找到 MAPGIS 系统安装软件,双击SETUP 图标,系统自动安装软件,在 WIN2000/NT/XP 下安装时,应先运行 WINNT_DRV,提示成功后才可选择 SETUP 开始 MAPGIS 程序的安装; 对于 MAPGIS6。1 及 MAPGIS6。5,则无关键字和安装选择,但须根据实际需要选择安装组件。 从上述组件中选择实际运用中需要的选项,根据提示即可完成安装。

mapgis二次开发教程

mapgis二次开发教程 默认分类 2009-09-08 10:18:14 阅读898 评论1 字号:大中小订阅 目前MAPGIS二次开发库主要以API函数、MFC(Microsof t Foundation Class)类库、Com组件、Activ eX 控件四种方式提供。开发库被封装在若干动态链接库(DLL)中。 API函数在使用方法上与Windows的API函数完全一样,因此是独立于开发工具的。无论您使用VC++、VB还是BC++、Dephi…,您在这些工具中如何调用Windows的API函数,您就可以怎么调用这些二次开发函数。 MAPGIS类库是为基于MFC类库的C++开发者提供的多个可重用基类,它将应用程序所需的常见基本功能作了封装,使用便利,改动灵活。开发者只需从类库派生即可使自己的程序获得从窗口显示控制到图形查询编辑的各项功能。 MAPGIS COM组件是MAPGIS新一代体系结构的表现,功能更加强大,使用更加便利。具有二次开发方便、易于集成、无限 扩展等特点。支持多种开发软件,包括Visual C++、Visual Basic、Delphi、script、InterDev、Power Builder等,开发者可以多层次的 访问MAPGIS组件的数据层、功能层和界面层。 Activ eX 控件是MAPGIS完成组件化改造的成果之一,它们使得二次开发更为快捷便利,代码的可复用性更高。 上述各类开发接口提供了从最基本数据单元的读取、保存、更新和维护到MAPGIS地图库的建立和漫游,以及空间分析,图象 处理等一系列功能。其中,API函数是基础,使用上最灵活,但技巧性要求也最高。所以本书大量篇幅用于介绍C++ API函数。MAPGIS将不断丰富完善各类二次开发接口,以多种开发手段满足不同层次、不同应用的需求。这些函数所 在的C++头文件表4-1所示:

新手学习mapgis教程

------------------- 时磊5说----- - ---- ------- 新手学习mapgis教程 一、几个术语 图层:按照一定的需要或标准把某些相关物体组合在一起。可以把图层理解为一张透明薄膜, 每一层的图元在同一薄膜上,如水系力图层、铁路图层、地质界限图层、断层图层等。图层的分层有利于地图图元的管理,提高成图速度。 栅格图:即扫描的图像。 矢量图:即进行了数字化的图像,图中的每一个点都有相对的X和Y座标。 图元:图面上表示空间信息特征的基本单位,分为点、线(孤段)、多边形等三种类型。 点元:点图元的简称,有时称点。指其位置只有一组X和Y座标来控制。 它包括字符串(注释)、子图(专用符号)等。所有点保存在点文件中(*.wt)结点:指某线或孤段的端点或数条线或孤段的交点。 结点平差:使几条线或孤段成为共用一个结点的过程 线图元:地图中线状物的总称。如划线、省界、国界、地质界线、断层、水系、公路等。所有线图元都保存在线文件中(*.wl) 区图元(面图元):由线或孤段组的封闭区域,可以以颜色和花纹图案填充。如湖泊、地层、岩体分布区等。所有区图元都保存在区文件中(*.wp )。 工程:对一系列的点、线、面文件进行管理的描述性文件。 二、MAPGIS几种主要文件类型及后缀 .wp区(面)文件.pnt控制点文件 .wl线文件 .wt点文件 ?tif栅格文件 .rbm光栅求反后文件 .mpj工程文件 ?cln图例板文件 点文件(.wt):包括文字注记、符号等。即在输入时,文字和符号都存在点 文件中。在机助制图时,文字注记称为注释(如各种标注等),符号称为子图(矿 点符号,泉符号等)。 线文件(.wl):是由境界线、河流、航空线、海岸线等线状地物组成的图元。 面文件(.wp):将各个行政区进行普染色后,就得到了区文件。在理论上,区是封闭的线组成的区域,因此区是基于线生成的。 工程(.mpj):对一系列的点、线、面文件进行管理的描述性文件。其主要记录了各个文件的信息,如存放地、可编辑性等。(如何建立工程,见以后) 图形处理一输入编辑 一、输入编辑步聚 主要步骤为: 1将图件进件进行扫描,成灰度、或彩色、或二值。 2、建立相应的工作目录,即建立自已的工作文件夹。女口mapgis学习 3、将扫描的图像拷入到工作文件夹中, 4、将系统库(相当于\mapgis65\slib文件夹)拷到工作文件夹中。

03.MapGIS VirtualEarth二次开发技术篇

MAPGIS VirtualEarth 二次开发技术篇

目录 目录..............................................................................................................................................- 2 - 1 概述..............................................................................................................................- 3 - 2 开发环境介绍..............................................................................................................- 3 - 2.1开发环境................................................................................................................- 3 - 2.2开发软件---Eclipse................................................................................................- 4 - 3 MAPGIS VirtualEarth二次开发技术........................................................................- 1 4 - 3.1 JavaScript脚本语言.............................................................................................- 14 - 3.2 Java语言...............................................................................................................- 16 - 3.3 HTML语言..........................................................................................................- 18 - 3.4 JSP技术................................................................................................................- 19 - 3.5 数据库(SQL Server/Oracle)..........................................................................- 20 - 3.6 XML语言.............................................................................................................- 21 -

MAPGIS教程(基础篇)

MAPGIS教程(基础篇)

基础篇 (MAPGIS) 广东友元国土信息工程有限公司编制 2009年7月 2

目录 第一讲MAPGIS 简介 (4) 一、几个术语 (4) 二、MAPGIS 几种主要文件类型及后缀 (5) 三、MAPGIS 总体结构 (5) 四、MAPGIS 安装 (6) 第二讲图形处理—输入编辑 (8) 一、输入编辑步聚 (8) 第三讲线、点的输入及编辑操作错误!未定义书签。 第四讲造区 (12) 一、检查线是否有错误 (12) 二、造区 (12) 三、需熟知的几种区操作 (13) 第五讲误差校正 (16) 第一步:采集较正控制点 (17) 第二步:数据较正 (18) 第六讲数据转换 (19) 第七讲标准图框-投影变换 (21) 一、投影系统及坐标系简介 (22) (一)、常用的投影类型 (22) (二)、坐标系(椭球参数) (22) (三)、高斯—克吕格投影 (22) 二、投影变换需注意问题: (23) 三、标准图框生成 (23) (一)已知图的四个角的经、纬度,生成 3

标准图框。 (23) (二)已知图的四个角的大地坐标,生成 标准图框 (27) 第八讲图形裁剪 (28) 第九讲建立工程 (29) 第十讲系统库编辑 (32) 符号拷贝 (34) 第十一讲图例板 (35) 第十一讲属性库 (40) 第一讲MAPGIS 简介 一、几个术语 图层:按照一定的需要或标准把某些相关物体组合在一起。可以把图层理解 为一张透明薄膜,每一层的图元在同一薄膜上,如水系力图层、铁路 图层、地质界限图层、断层图层等。图层的分层有利于地图图元的管 理,提高成图速度。 栅格图:即扫描的图像。 矢量图:即进行了数字化的图像,图中的每一个点都有相对的X 和Y 座标。 图元:图面上表示空间信息特征的基本单位,分为点、线(孤段)、多边形等三种类型。 点元:点图元的简称,有时称点。指其位置只有一组X 和Y 座标来控制。 它包括字符串(注释)、子图(专用符号)等。所有点保存在点文件中(*.wt)结点:指某线或孤段的端点或数条线或孤段的交点。 4

用C实现混合使用MAPGIS的多种二次开发方式

用C++实现混合使用MAPGIS的多种二次开发方式(一) 一、MAPGIS及其二次开发 1、MAPGIS简介 MAPGIS微机地理信息系统是武汉中地信息工程有限公司开发的GIS基础平台软件系统。集地图输入编辑、数据库管理及空间分析为一体GIS基础平台。可应用于建立基础地理信息系统,能应用于需要地理信息的相关行业和应用系统。作为一个GIS基础平台软件,提供了多种二次开发方式,用户可以在MAPGIS 上进行二次开发,开发出适合自己需要的应用系统。 2、MAPGIS二次开发方式 MAPGIS的二次开发方式主要有API函数、MFC类库、ActiveX控件三种方式,MAPGIS二次开发库封装在若干动态链接库(DLL文件)中。MAPGIS提供的二次开发方式采用的开发接口独立于开发工具(MFC 类库开发方式除外),用户无需学习新的开发工具就可以进行MAPGIS二次开发,无需像某些有自己二次开发语言(工具)的GIS系统,要学习其开发语言(工具)。下面介绍一下MAPGIS的三种二次开发方式:API函数:MAPGIS的API函数开发方式与Windows的API开发方式一样。 MFC类库:MAPGIS类库是基于MFC库的开发方式。用面向对象的思想把一些API功能进行封装,形成多个派生于MFC中CView类的可重用基类,用户利用基于MFC的MAPGIS类库,可构建符合面向对象软件工程的MAPGIS应用系统。 ActiveX控件:它是基于COM(组件对象模型)标准的一种程序组件,能够嵌入程序中运行完成一定功能,在软件开发中实现了功能重用。开发中只需简单调用功能接口就行了,开发更为简单、可靠、便利。 3、C++开发工具 C++语言是最符合面向对象软件工程思想的开发工具,C++支持结构化软件工程、面向对象工程、组件软件工程开发模式。事实上C++也是应用最广泛的开发语言,在当今最先进的组件软件开发模式中,C++是支持得最好的,尽管组件的使用不依赖特定的语言,但开发符合COM规范的软件组件的最佳开发语言还是C++。Visual C++ 是微软公司推出的C++开发工具,它与Windows系统有很好的兼容性,自Visual C++5.0推出以来,它已成为开发Windows应用程序的最流行的C++开发工具。我们就以Visual C++ 为例介绍怎样用C++实现混合使用MAPGIS的多种二次开发方式。 二、用C++实现混合使用MAPGIS的多种二次开发方式 使用C++进行API、MAPGIS类库方式开发MAPGIS应用程序,大家都很熟悉。这里主要是讲怎样用C++实现混合使用MAPGIS的三种二次开发方式。对于C++使用MAPGIS控件开发MAPGIS应用程序,可能有些用户还不太熟悉。所以先讲怎样用ActiveX控件开发MAPGIS应用程序,再讲怎样用C++实现混合使用MAPGIS的三种二次开发方式。 1、Visual C++中使用ActiveX控件开发方式 MAPGIS推出的ActiveX控件二次开发方式,主要是对于那些使用基于对象语言开发工具的用户,如Visual Basic,Delphi等,用这些开发工具的用户就可以使用MAPGIS控件对象来快速构建MAPGIS应用程序。事实上这种基于COM(组件对象模型)标准的MAPGIS控件是用C++开发出来的,但是这种用C++做出来的好东东,被他人所用,总感觉不爽。其实C++可以使用ActiveX控件开发,经常往对话框中放的一些编辑框之类的东西就是一些ActiveX控件,但是MAPGIS是要在视图中显示大量的图形的,并要进行操作,怎么办呢?你不要担心,对话框、视窗都是派生于CWnd类的,它们都能支持嵌入ActiveX控件。下面分别介绍

mapgis教程

mapgis软件是中国具有完全自主知识版权的地理信息系统,是全球唯一的搭建式GIS数据中心集成开发平台。软件立足行业,深入具体业务细节,以强大的数据中心集成技术,整合各行业运行系统的各关键信息,实现了灵活、可靠、高效的数据集成与管理。本站这里提供的是mapgis6.7破解版下载,附带了详细图文教程和mapgis6.7破解狗,可以完美破解软件,更详细的安装如下文所示。 基本介绍: mapgis6.7版本继承了以前的界面友好,使用方便等特点,主要对数字测图、高程库系统、电子沙盘系统和DTM系统作了重大改进,功能不断增强,数据精度更高,性能更趋稳定,多种算法进行了优化,能够更好的为用户提供服务。 mapgis6.7安装破解教程如下: 特别说明: 1、安装之前打开软件狗; 2、mapgis软件的使用在任何情况都需要软件狗的支持,软件狗包含mapgis的服务; 开始安装: 1、下载解压,双击“Setup67.EXE”依提示安装;

2、一般选择默认的组件安装即可; 3、软件显示正在注册控件; 4、设置三维绘制引擎,一般按默认操作即可;

5、打开桌面上生成的mapgis软件图标,点击设置,软件运行环境已经设置成功; 6、依次选择图形处理--输入编辑--点击打开,软件成功破解。

mapgis快捷键如下: F4键(高程递加) 这个功能是供进行高程线矢量化时,为各条线的高程属性进行赋值时使用的。在设置了高程矢量化参数后,每按一次F4键,当前高程值就递加一个增量。 F5键(放大屏幕) 以当前光标为中心放大屏幕内容。 F6键(移动屏幕) 以当前光标为中心移动屏幕。 F7键(缩小屏幕) 以当前光标为中心缩小屏幕内容。 F8键(加点): 用来控制在矢量跟踪过程中需要加点的操作。按一次F8键,就在当前光标处加一点。 F9键(退点): 用来控制在矢量跟踪过程中需要退点的操作,每按一次F9键,就退一点。有时在手动跟踪过程中,由于注释等的影响,使跟踪发生错误,这时通过按F9键,进行退点操作,消去跟踪错误的点,再通过手动加点跟踪,即可解决。 F11键(改向): 用来控制在矢量跟踪过程中改变跟踪方向的操作。按一次F11键,就转到矢量线的另一端进行跟踪。 F12键(抓线头): 在矢量化一条线开始或结束时,可用F12功能键来捕捉需相连接的线头。 “A”键---输入线时:锁定线头或线尾(输入弧段:锁定弧段头或弧段尾) “S”键---锁定线中点(锁定弧段中点)

mapgis二次开发培训教程

前言 MAPGIS 是武汉中地信息工程有限公司研制的具有自主版权的大型基础地理信息系统平台。它是一个集当代最先进的图形、图像、地质、地理、遥感、测绘、人工智能、计算机科学于一体的大型智能软件系统,是集数字制图、数据库管理及空间分析为一体的空间信息系统,是进行现代化管理和决策的先进工具。MAPGIS 连续四年在全国GIS 测评中名列第一,并成为唯一连续四年获得国家科技部向社会推荐的国产GIS 软件平台。 中地软件丛书之MAPGIS 二次开发培训教程是根据最新推出的MAPGIS 软件平台编写而成,主要介绍进行MAPGIS 二次开发必须具备的基础知识、主流开发工具以及MAPGIS 系统的基本概念、结构体系和操作方法。该教程分为三个部分,共十一讲。其中: 第一部分(即第一讲的内容):介绍Windows 编程的概念。包括类与数据封装、继承、重载、虚拟函数与多态性以及内存管理。该部分为可视化编程的基础,有可视化编程经验的读者可以略过此讲,直接进入下一部分的学习。 第二部分(即第二讲的内容):编程工具VC 。对于在VC 这样一个编程环境中开发应用程序所应熟悉的概念,术语和最基本的框架、构件实现过程等知识做了一个简明扼要的介绍。已掌握一定VC 编程基础知识的读者可以略过该部分。 第三部分(即第三讲至第十一讲的内容):详细讲述了地理信息系统的基本概念(包括GIS 原理概述、空间数据类型、空间数据库、空间数据结构与数据管理等内容);MAPGIS 的基本概念和体系结构(简要描述了MAPGIS 二次开发的基本概念、术语、工作区、空间实体及其数据、C++类组织和开发环境介绍的内容);MAPGIS 空间数据存取和属性编辑(包括工作区、空间实体和属性的操作及其网络介绍);图形显示输出及窗口操作、图形编辑、类库和控件开发;矢量空间分析和属性查询;投影变换、图框生成和工程管理;图库管理和查询系统(包括基于图库的应用程序开发、MAPGIS 图库介绍、开发的一般步骤以及结合图库显示说明图库主要函数的功能等方面的内容)以及图象分析与处理。这一部分为本教程的主要部分,能使大家从了解到熟练掌握这个部分的内容也是我们编制本书的主要目的,同时它还可被作为MAPGIS 二次开发过程中的参考来使用。 参加本书编写的人员主要是本系统的软件开发人员以及长期从事MAPCAD 和MAPGIS 培训的教师。由于时间仓促,书中难免存在错误和不当之处,敬请广大用户及读者提出宝贵意见和建议,以利改进。 中地软件丛书编委会 2001年10月 M A P G I S 二次开发培教程

新手学习mapgis教程

新手学习mapgis教程 一、几个术语 图层:按照一定的需要或标准把某些相关物体组合在一起。可以把图层理解为一张透明薄膜,每一层的图元在同一薄膜上,如水系力图层、铁路图层、地质界限图层、断层图层等。图层的分层有利于地图图元的管理,提高成图速度。 栅格图:即扫描的图像。 矢量图:即进行了数字化的图像,图中的每一个点都有相对的X 和Y 座标。 图元:图面上表示空间信息特征的基本单位,分为点、线(孤段)、多边形等三种类型。 点元:点图元的简称,有时称点。指其位置只有一组X 和Y 座标来控制。 它包括字符串(注释)、子图(专用符号)等。所有点保存在点文件中(*.wt) 结点:指某线或孤段的端点或数条线或孤段的交点。 结点平差:使几条线或孤段成为共用一个结点的过程 线图元:地图中线状物的总称。如划线、省界、国界、地质界线、断层、水系、公路等。所有线图元都保存在线文件中(*.wl) 区图元(面图元):由线或孤段组的封闭区域,可以以颜色和花纹图案填充。 如湖泊、地层、岩体分布区等。所有区图元都保存在区文件中(*.wp)。 工程:对一系列的点、线、面文件进行管理的描述性文件。 二、MAPGIS 几种主要文件类型及后缀 .wp 区(面)文件.pnt 控制点文件 .wl 线文件 .wt 点文件 .tif 栅格文件 .rbm 光栅求反后文件 .mpj 工程文件 .cln 图例板文件 点文件(.wt):包括文字注记、符号等。即在输入时,文字和符号都存在点 文件中。在机助制图时,文字注记称为注释(如各种标注等),符号称为子图(矿 点符号,泉符号等)。 线文件(.wl):是由境界线、河流、航空线、海岸线等线状地物组成的图元。 面文件(.wp):将各个行政区进行普染色后,就得到了区文件。在理论上,区是封闭的线组成的区域,因此区是基于线生成的。 工程(.mpj):对一系列的点、线、面文件进行管理的描述性文件。其主要记录了各个文件的信息,如存放地、可编辑性等。(如何建立工程,见以后) 图形处理—输入编辑 一、输入编辑步聚 主要步骤为: 1、将图件进件进行扫描,成灰度、或彩色、或二值。 2、建立相应的工作目录,即建立自已的工作文件夹。如mapgis 学习 3、将扫描的图像拷入到工作文件夹中, 4、将系统库(相当于\mapgis65\slib 文件夹)拷到工作文件夹中。 5、进行读图分析,看分几层。如水系层(河流、水库、泉等),交通层(铁 路、公路、小路、航空线等),断层层(各种断层),地层层(地层界线,地层区,

MAPGIS教程

目录 第一讲 MAPGIS地理信息系统的基本功能 (1) 第二讲图形输入..............................................................................10第三讲图形编辑..............................................................................15第四讲拓扑处理及实用工具...............................................................28第五讲系统库编辑...........................................................................32第六讲误差校正..............................................................................36第七讲图型裁剪..............................................................................38第八讲数字高程模型(DTM分析) (41) 第九讲图形输出..............................................................................44第十讲数据接口转换 (47)

第一讲MAPGIS地理信息系统的基本功能 (四)MAPGIS的主要功能 l.数据输入 在建立数据库时,我们需要将各种类型的空间数据转换为数字数据,数据输入是GIS 的关键之一。MAPGIS提供的数据输入有数字化仪输入、扫描矢量化输入、GPS输入和其它数据源的直接转换。 (1) 数字化输入 数字化输入也就是实现数字化过程,即实现空间信息从模拟式到数字式的转换,一般数字化输入常用的仪器为数字化仪。 (2)扫描矢量化输入 扫描矢量化子系统,通过扫描仪输入扫描图象,然后通过矢量追踪,确定实体的空间位置。对于高质量的原资料,扫描是一种省时、高效的数据输入方式。 (3)GPS输入 GPS是确定地球表面精确位置的新工具,它根据一系列卫星的接收信号,快速地计算地球表面特征的位置。由于GPS测定的三维空间位置以数字坐标表示,因此不需作任何转换,可直接输入数据库。 (4)其他数据源输入 MAPGIS升级子系统可接收低版本数据,实现6.X与5.X版本数据的相互转换,即数据可升可降,供MAPGIS使用。MAPGIS还可以接收AUTOCAD、ARC/INFO、MAPINFO等软件的公开格式文件。同时提供了外业测量数据直接成图功能,从而实现了数据采集、录入、成图一体化,大大提高了数据精度和作业流程。 2. 数据处理 输入计算机后的数据及分析、统计等生成的数据在入库、输出的过程中常常要进行数据校正、编辑、图形整饰、误差消除、坐标变换等工作。MAPGIS通过图形编辑子系统及投影变换、误差校正等系统来完成,下面分别介绍之。 (1) 图形编辑 该系统用来编辑修改矢量结构的点、线、区域的空间位置及其图形属性、增加或删除点、线、区域边界,并适时自动校正拓扑关系。图形编辑子系统是对图形数据库中的图形进行编辑、修改、检索、造区等,从而使输入的图形更准确、更丰富、更漂亮。 (2) 投影变换 地图投影的基本问题是如何将地球表面(椭球面或圆球面)表示在地图平面上。这种表示方法有多种,而不同的投影方法实现不同图件的需要,因此在进行图形数据处理中很可能要从一个地图投影坐标系统转换到另一个投影坐标系统,该系统就是为实现这一功能服务的,本系统共提供了20种不同投影间的相互转换及经纬网生成功能。通过图框生成功能可自动生成不同比例尺的标准图框。 (3) 误差校正 在图件数字化输入过程中,通常的输入法有:扫描矢量化、数字化仪跟踪数字化、标准

相关主题
文本预览
相关文档 最新文档