Page 1
MapInfo概论
?第一讲 MapInfo简介及基本概念
?第二讲 MapInfo基本操作 —表
?第三讲 MapInfo查询及分析
?第四讲 空间分析及属性信息图形化
?第五讲 OLE 嵌入与 MapBasic 简介
?第六讲 MapInfo集成地图开发
?第七讲 组件式 GIS与 MapX基础
?第八讲 MapX应用开发
Page 2
?第七讲 组件式 GIS与 MapX基础
一、组件式 GIS与 MapX
1.1 GIS开发的三种实现方式
1.2 ActiveX技术及 GIS组件
1.3 MapX简介
二,MapX详解
2.1 Layers 集合属性
2.2 Features 和 Selections
2.3 MapX工具
Page 3
?一、组件式 GIS与 MapX
1.1 GIS开发的三种实现方式
地理信息系统( GIS) 根据其内容可分为两大基本类型:
一是 工具型地理信息系统,也就是 GIS工具软件包,如
MapInfo,ARC/INFO等,具有空间数据输入、存储、处理、
分析和输出等 GIS基本功能;二是 应用型地理信息系统,以
某一专业、领域或工作为主要内容,包括专题地理信息系统
和区域综合地理信息系统。随着地理信息系统应用领域的扩
展,应用型 GIS的开发工作日显重要。
应用型地理信息系统的开发方式主要有以下三种:
? 独立开发,所有的算法都由开发者 独立设计 ;
? 单纯二次开发,完全借助于 GIS工具软件提供的开发语言
进行应用系统开发,如 ArcView提供了 Avenue语言,MapInfo
提供了 MapBasic语言等;
Page 4
? 集成二次开发,利用专业的 GIS工具软件,如 ArcView、
MapInfo等,实现 GIS的 基本功能 ;以通用软件开发工具尤其是可
视化开发工具,如 Delphi,Visual C++,Visual Basic等为开发
平台,进行 二者的集成开发 。集成开发有两种方式:
( 1) OLE/DDE,采用 OLE Automation技术或 DDE技术,用软件
开发工具开发前台可执行应用程序,以 OLE自动化方式 或 DDE方
式 启动 GIS工具软件在后台执行,利用 回调( CallBacks) 技术动
态获取其返回信息,实现应用程序中的地理信息处理功能;
( 2) GIS控件,利用 GIS工具软件生产厂家提供的建立在 OCX技
术 基础上的 GIS功能控件,如 ESRI的 MapObjects,MapInfo公司的
MapX等,在 Delphi,Visual Basic等编程工具编制的应用程序
中,直接将 GIS功能嵌入其中,实现地理信息系统的各种功能。
Page 5
由于独立开发难度太大,单纯二次开发受 GIS工具提供的编程语言的
限制差强人意,因此结合 GIS工具软件与当今可视化开发语言的集成二
次开发方式就成为 GIS应用开发的主流。
优点,既可以充分利用 GIS工具软件对空间数据库的 管理、分析 功
能,又可以利用其它可视化开发语言具有的高效、方便等 编程优点,集
二者之所长,大大提高应用系统的开发效率,且具有更好的外观效果,
更强大的数据库功能,可靠性好、易于移植、便于维护。尤其是使用
OCX技术利用 GIS组件进行集成开发,更能表现出这些优势。
缺点,前期投入较大,需同时购买 GIS工具软件和可视化编程软件。
与 OLE技术相比,利用 ActiveX控件 开发速度快,可使开发者 避开某
些应用的具体编程, 直接调用控件,实现这些具体应用,从而使编程
过程更简洁;而且占用资源少,易实现许多底层的编程和开发功能 。
集成二次开发的优缺点
Page 6
1.2 ActiveX技术及 GIS组件
?一、组件式 GIS与 MapX
1,ActiveX 技术
ActiveX是 Microsoft为了使开发人员能够把计算机桌面环
境与构成 Internet及其大量资源的环境集成起来,同时保护在
Windows中现有的开发投资而提供的一种技术。 ActiveX包括对
两个现有 Microsoft技术的一系列扩充和增强,这两个技术是:
Win32 API和 组件对象模型( COM) 。 由于 ActiveX控件是被 封装
起来的,它适合于各种编程语言(如 VB,VC++等),因此 只需
知道控件支持的属性、方法和事件,就可使用控件。
所谓 ActiveX组件 是指一些 可执行的代码,比如一个,exe,
.dll或,ocx文件,它们在提供对象时遵循 ActiveX的规范。通过
ActiveX技术,程序员就能够把这些可复用的软件 组装 到应用程
序或者服务程序中去。
Page 7
2,组件式 GIS
是把 GIS的各大功能模块划分为几个控件,每个控件完成不同的功
能。各个 GIS控件之间,以及 GIS控件与其它非 GIS控件之间,可以方便
地通过可视化的软件开发工具集成起来,形成最终的 GIS应用。控件如
同一堆各式各样的积木,它们分别实现不同的功能 (包括 GIS和非 GIS功
能 ),根据需要把实现各种功能的, 积木, 搭建起来,就构成应用系统。
( 1) 组件式 GIS开发平台的结构
? 基础组件,面向空间数据管理,提供基本的交互过程,并能以灵活
的方式与数据库系统连接;
? 高级通用组件,由基础组件构造而成,面向通用功能,简化用户开
发过程,如显示工具组件、选择工具组件、编辑工具组件、属性浏览器
组件等等。它们之间的协同控制消息都被封装起来。这级组件经过 封装
后,使二次开发更为简单;
Page 8
? 行业性组件,抽象出 行业应用的特定算法,固化到组件中,进一
步加速开发过程。以 GPS监控为例。对于 GPS应用,除了需要地图显示、
信息查询等一般的 GIS功能外,还需要特定的应用功能,如动态目标
显示、目标锁定、轨迹显示等。这些 GPS行业性应用功能组件被封装
起来后,开发者的工作就可简化为设置显示目标的图例、轨迹显示的
颜色、锁定的目标,以及调用、接受数据的方法等。
缺点,效率相对低下;支持的空间数据量有限;支持的功能有限,
只覆盖了 GIS系统的部分功能;系统的可靠性、容错性有待提高。开
发及使用过程中必须 时刻注意 Windows系统 OLE系统注册表的正确 。
GIS构件的 设计主要遵循应用领域的需求 。例如 ESRI地 MapObjects
就是以空间数据访问、查询、制图为主要目标的 GIS构件。 GIS组件的
代表作应 首推 MapObjects以及 MapX等。
Page 9
MapObjects和 MapX的主要功能对比
Page 10
?一、组件式 GIS与 MapX
1.3 MapX简介
1,MapX— 地图化的 ActivX
MapX是 MapInfo公司向用户提供的具有强大地图分析功能的 ActiveX
控件 产品。由于它是一种基于 Windows操作系统的标准控件,因而能支
持绝大多数标准的可视化开发环境如 Visual C++,Visual Basic、
Delphi,PowerBuilder等。编程人员在开发过程中可以选用自己最熟
悉的开发语言,轻松地将地图功能嵌入到应用中,并且 可以脱离
MapInfo的软件平台 运行。利用 MapX能够简单快速地在企业应用中嵌入
地图化功能,增强企业应用的空间分析能力,实现企业应用的增值。
MapX采用基于 MapInfo Professional的相同的地图化技术,可以实现
MapInfo Professional具有的 绝大部分地图编辑和空间分析功能 。而
且 MapX提供了各种工具、属性和方法,实现这些功能是非常容易的。
Page 11
? 工具箱是一个控件集, 里面包括在程序中可以被用到
的控件 。 用户自定义的控件也可以增加到工具箱里 。
? 把 MapX增加到工具箱中去,
? 工程 菜单 ? 部件
? 选中 MapInfo MapX V5项
? 确定 OK
? 现在就可以在程序中增加地图了
? 在工具箱中选择 MapX的 控制图标
? 在窗体中放置 MapX控件, 就可以看到一个缺省的 (
美国 )地图显示在应用程序窗体上了 。
? 属性页
在 VB中加入 MapX组件
Page 12
2,MapX的空间数据结构
从 横向 分析,MapX采取的空间数据结构是基于 空间实体 和 空间索引
相结合的一种结构。空间实体是地理图形的抽象模型,主要包括 点、线、
面 三种类型。任何点、线、面实体都可以用直角坐标点 x,y来表示。点
可以表示成一组坐标( x,y),对于线和面,则均被表示成多组坐标
( x1,y1; x2,y2; xn,yn)。 空间索引 是查询空间实体的一种机制,
通过空间索引,就能够以尽量快的速度查询到给定坐标范围内的空间实
体及其所对应的数据。
从 纵向 分析,MapX的空间数据结构是一种 分层存放 的结构。用户可
以通过 图形分层 技术,根据自己的需求或一定的标准对各种空间实体进
行分层组合,将一张地图分成不同图层。采用这种分层存放的结构,可
以提高图形的搜索速度,便于各种不同数据的灵活调用、更新和管理。
MapX模型结构
Page 13
3,MapX的基本属性
( 1) Map,每个 Map对象主要包括 Datasets,Layers,Annotations三
个对象集合。主要的属性,Zoom用来设置放大级别(在地图上显示的大
小),Rotation控制地图的旋转角度,CenterX和 CenterY用于设置 x
和 y的坐标系,这要取决于地图的投影。 Map对象的许多属性本身又是一
个对象,比如说 一幅地图由多个图层组成,则在一个 Map对象中存在一
个单独的 layers集合,其中包含所有图层的信息。
( 2) Layers,在 MapX中,每张单独的地图都被表示成单独的一个图层,
所有的图层存储在 layers集合中。 Layers集合 由 Layer对象 组成,按顺
序编号为 0到 n。 Layer对象由 features对象 组成,features对象又是由
Feature对象 组成,对应于地图中的 点、线、区域或符号。最下面的图
层最先绘制,最上面的图层最后绘制;选择工具总是从可选择图层中的
最上层开始选择。
Page 14
( 3) GeoSets,GeoSet是在 GeoSet Manager中建立好的,GST文件,类
似 MapInfo中的 WorkSpace概念,是 图层及其设置的集合,控制程序中显
示的地图。也可以在运行阶段设置 GeoSet,此时将导致已经加载的所有
图层和 DataSet被删除而由 GeoSet中定义的图层所代替。如果单纯地想
删除所有图层,只需给 GeoSet赋一个空字符串即可。
当打开 GeoSet文件时,所有的地图图层和设置都将以保存值返回。
使用 geosetmanager的时候,所有的,gst文件要放在 C:\Program
Files\MapInfo\MapX 5.0\Maps>目录下。可以调用 GeoDictionary
Manager程序进行修改,指向用户程序数据所在的位置。
( 4) Datasets,Datasets用于 实现地图与数据的绑定 。
建立地图信息与属性数据之间联系 的过程称之为 自动绑定 或自动匹配
( autobinding /automatching)。 要实现这一过程,必须 首先将地图
在 GeoDictionaryMananger中注册 。属性数据表示的可视化使得创建专
题地图( Theme) 成为可能。
Page 15
( 5) Annotations,Annotations集合提供了 操纵地图中文字和符号
的简单方法。 Annotations位于所有其它图层的上方并且不与任何数据
连接,类似于 MapInfo中的装饰图层 。 Annotations包括以下主要的属性
与方法,AddSymbol,AddText,Remove
Annotations还有一个非常重要的属性 Graphic,其定义为 Graphic
对象,在该对象中 包含了符号或文本的样式、位置等信息,即 Graphic
的 Caption,Position,Style, X,Y属性。如 Annotations的 Type属
性定义为 miTextAnnotation,则可以定义 Graphic的 Caption属性设置
标注的字符串。
( 6) 可创建对象,在 MapX对象模型中,以下对象是可以被创建的:
AffineTransform,BindLayer,BitmapSymbols,CoordSys,Datum、
Feature,Fields,LayerInfo,Map,ODBCQueryInfo,Parts,Point、
Points,Rectangle,RowValue,RowValues,Style,Variables、
NotesQueryInfo,NotesViewInfo
Page 16
( 7) GeoDictionary,利用 MapX作 数据绑定 或 创建专题地图 时,
可以用 GeoDictionary来匹配数据源与地图图层,实际上是一个文件
包含有数据绑定信息的 geodict.dct。 GeoDictionary是一个 保存了关
于哪个地图图层可以匹配、哪个字段可以用作匹配字段的信息文件
(一般命名为 geodict.dct)。 如果想运用自动匹配 /自动绑定,则
必须在 GeoDictionaryManager中注册 MapInfo文件。在 MapX GeoSet
Manager的, Tools”菜单下选择, Run GeoDictionary Manager”选项 。
MapX GeoDictionaryManager程序允许把新的 MapInfo表注册到
GeoDictionary中。在 GeoDictionaryManager中,单击, 注册表 …,
按钮,然后 选择要注册的表,设置表属性并为其输入描述 。如果要想
自动地把这张表加载到 GeoSet中,单击添加按钮然后选择要把表添加
进的 GeoSet。
用作数据绑定的图层 至少要有一个索引字段。
Page 17
? 对象 object 包含代码和数据 。 一个对象可以是一个应用的一部
分, 如一个放在窗体上的控件或窗体 。 一个应用也可是一个对象
。
? 属性 property 描述对象的变量 。
? 方法 method 描述对象行为 。
? 事件 event 描述对象动作, 以及这个工作将如何响应 。
? 集合 collection 包含一组对象 。
? 主要的集合对象,Geosets,Layers,Features,Parts,
Points,Annotatons,Datasets,Fields,SourceRows,Themes
? 集合对象的共性:
? 属性,Count, Item
方法,Add,Remove, RemoveAll
术语说明:
Page 18
?二,MapX详解
2.1 Layers 集合属性
用户的数据反映在地图上通常根据点、线、面的层次结构进行归类。
每一个独立的图层都可以作为一个独立的地图。 MapX中调用的是一个由
多个独立地图图层组成的地图集合。 Layers集合由 Layer对象组成。
Layers集合具有用来从集合添加和删除 Layer对象的方法和属性。
1,Layers 集合的方法
( 1)图层控制对话框,Map1.Layers.LayersDlg
( 2)创建新层,Dim lyr as layer Set lyr = Map1.Layers.CreateLayer (“Temporary”)
( 3)加入图层,Map1.Layers.Add,C:\Data\Ireland.tab”
( 4)删除图层,Map1.Layers.Remove 3
( 5)重定位图层,Map1.Layers.Move 1,2
Page 19
( 6)用户 绘制图层,Map1.AddUserDrawLayer
当需要绘制图层时,它与激活的 DrawUserLayer事件 结合在一起使
用。该方法返回新创建的 Layer对象。
2,Layers 集合的属性:
? Bounds,返回代表集合中所有地图图层的地理范围
? Count,获得集合中的图层数目
? Item,从集合中获得特定的 Layer 对象 名称或者索引
3,Layer对象的属性:
Layer 对象代表具有主要图元类型(如区域、线条和符号)的地图窗
体中的矢量地图化数据,对应于一张 MapInfo 表中的地理对象 。 Layers
集合中的每一个 Layer 对象的行为独立于其他对象。它们的样式更改、
图层缩放的更改都基于单个图层,而不会影响其他图层。
Page 20
? Name,图层的名称
? AutoLabel,控制图层是否自动标注
? OverrideStyle,是否替代该图层的默认显示特性
? Selectable,Editable,Visible:
? Style,如果 OverrideStyle 为真时图层样式将应用
? ZoomLayer,ZoomMax,ZoomMin,设置图层缩放打开或关闭及缩放级别
? Type,图层类型 miLayerTypeNormal
? FeatureType,每一图层的图元类型 miFeatureTypeRegion
? LabelProperties,控制自动标注的位置、显示和外观(多种属性)
? 交互式标注,可设置 Map1.CurrentTool 属性为 miLabelTool(1010)
用户将可通过单击图元进行标注。
Page 21
( 1) LabelProperties
? 控制标注显示:
要为图层自动生成标注,可以设置图层的 AutoLabel属性为 True。
每个图层对象都有 LabelProperties对象,用来控制标注的许多方面:
Visible; LabelMax; Duplicate; Overlap
? 缩放图层标注,设置 LabelZoom,LabelZoomMax和 LabelZoomMin属性。
? 标注位置,设置 Position,Offset,Parallel属性。
? 创建引注,为想要标注的图层设置 LabelProperties.LineType属性为
miLineTypeSimple (1) 或 miLineTypeArrow (2)。
? 标注样式,要更改所有标注的样式,可设置 Style。
( 2)注释 (Annotations)
可添加文本或符号注释到地图,绘制在地图的顶层。
? 不同于标注的是,文本注释不与数据连接,且没有任何属性来设置位
置、符号样式或文本,使用 Graphic属性获取 Graphic对象后修改
Page 22
4,动态图层 (Animation):
Animation图层在 地图图元需要经常更新 ( 例如在实时应用时 ) 时很有
用 。 例如, 可以开发一套舰队管理应用程序, 将每一艘舰船用一个点对
象来代表 。 可以通过使用 GPS( 全球卫星定位 ) 技术获取舰船的当前位
置, 然后更新点对象以显示舰船在地图上的更新位置 。 在这类应用程序
中, 如果被更新的对象存储在动态图层而不是常规图层, 那么在地图对
象经常改变的地方, 地图可以更快地重新绘制 。
最初,AnimationLayer设置为 null。 可以向 Layer对象分派属性以使图
层成为动态图层(它可以是常规图层或是用户绘制图层)。当图层被分
派了 AnimationLayer属性,它就会 绘制在所有图层的上方,包括
Annotations注释 图层和选择结果。该图层仍然在 Layers 集合中的同样位
置。浮动对象如图标符号仍然显示在动态图层的顶端。如果普通的图层
被用作动态图层,其选择结果和标注会依然有效。
Page 23
?二,MapX详解
2.2 Features 和 Selections
1,基本概念:
? 地图图元 是地图上的地理对象,例如点、线或区域。在 MapX 中,地
图图元表示为 Feature对象 。
? 在 MapX中地图图层中的所有图元及其所有子集表示为 Features集合 。
许多 Layer对象方法都返回图层的 Features集合,可以是空的。
? 和 Features集合类似,Selection集合 也是 Feature对象的集合。但是,
Selection 集合表示 当前已选中的 Feature对象 。 MapX 自动 高亮显示 在
Selection 集合中的所有图元。
? Features 集合与 Selection 集合各有一组不同的方法和属性集,而且两
个集合类型的行为也不同。在 Selections 集合中自动高亮显示选中的图元
,而在 Features 集合中不会突出显示图元。
Page 24
2,使用 Features集合,
? 取得图层中的图元,在使用 Features 集合前必须先创建集合。可以用
Layer 对象方法创建 Feature 对象的集合。
? 操纵 Features集合:
? Feature对象,Features 集合由 Feature 对象集合组成。 Feature 对象对
应于地图上的图元,例如符号、线或区域。 Feature 对象方法可以创建和
操作独立图元对象。 在创建独立图元对象后,必须将该图元对象附加到
地图上后才能引用对象的所有方法和属性。 把图元附加到地图时地图的
坐标系与图元相关联。
Page 25
3,使用 Selection集合,
? MapX 的一个基本功能是在地图上选择图元,要检查所选图元列表,
使用 Selection集合,它是 Feature对象的集合。每个图层都有所选图元对
象的集合( Layer.Selection)。 Selection集合具有在集合中添加和删除图
元的方法。同时,如果已经具有 Selection或 Features集合,那么可以追加
、删除、复制或查找两个集合的交集。
? MiSelectionNew MiSelectionAppend MiSelectionRemove
? SelectionChanged 事件,当更改选择时调用该事件 。该事件使容器可
以重新与建立在地图上的选择发生作用。使用选择工具或使用 Layer对象
的某一 Selection方法可以将选择更改为用户结果。
Page 26
4,Feature图元编辑,
? 创建新的地图图元:
( 1) 通过分配新 Feature对象创建独立图元:
设置 Type为 miFeatureTypeSymbol,miFeatureTypeRegion、
miFeatureTypeLine 或 miFeatureTypeText,如:
set obj = map1.Layers(1).AddFeature(newobj)
( 2) 使用 Map 对象的 FeatureFactory属性 方法对现有图元执行操作(例如缓
冲区)来创建图元:
创建一个地图元素有两个重要的步骤:首先是 创建点集,对象将由此来创建;
然后 使用点集,类似于, 连点游戏, 。如果只有一个点,只能创建一个符号对象
。如果有两个点,可以创建一条直线。如果有三个或更多的点,就或者可以创建
一条折线(由多个段组成的线,但仍被当作一个元素),或者可以创建一个区域
(有封闭的边界)。样式在设置新对象的 Type属性时决定。
Set f = Map1.Layers(1).AddFeature(Map1.FeatureFactory.CreateText(p,
,Some Text” )) 这些图元对象自动附加到地图上 独立图元
Page 27
? 修改现有图元,一旦通过设置样式、点或位置开始修改图元后,必须
,更新, 图元才能使更改生效。 图层图元
( 1)如果已经修改图元并希望提交更改,使用 Feature.Update方法。
( 2)如果希望将图元替换为另一图元,使用 Layer.UpdateFeature方法。
( 4)在更新图元时,原有 MBR和新 MBR都失效,使屏幕可正确重画。
如果选择不调用 Update并释放对象,那么下次从图层中检索图元时,
它仍将使用最初值。
? 删除现有图元,Layer.DeleteFeature 图元及表示它的行立即从
MapInfo 表中删除。
? 取得要编辑的图元,可以允许用户单击选择图元。此后,程序可以使
用图层的 Selection集合访问选择。 Selection集合也提供各种方法(例如
SelectByPoint) 可以将图元添加到集合。
可以使用 Find.Search方法执行能够返回 FindFeature对象( Feature对象
的超类)的查询。
Page 28
?区域或线的局部,MapX 中的线图元或区域图元包含许多 Point 对象 的
集合。可通过图元的 Feature.Parts 集合 访问这些 Points 集合 的集合。
检查组成图元的节点
Page 29
5,查找图元,
? Find对象:
Find 对象可以定位地图中的图元。可以查找到线、符号或区域图元。
为了能使用 Find 方法,所搜索的图层应包含 索引字段 。
? SearchEx方法,返回 FindResult对象
[FindResult]=object.SearchEx(Address[,Boundary])
? FindFeature对象:
FindFeature对象:返回 匹配了最精确字符串 (附加上结果代码 FindRC)
的 Feature对象的 超类 。该对象把 Find.Search方法查找到的 Feature对象
的属性存储起来作为自身的属性。此外,FindFeature包含 FindRC属性,
该属性存储 Find操作的结果代码。 FindRC属性是表明因何查找到或未查
找到图元的原因的数字值。
object.Search(Address[,Boundary])
Page 30
6、属性查询:
Layer对象的 Search方法,where子句。例如
ftrs=layer.search(,Character_Name like,,%市,“” )
ftrs=layer.search(,Area(obj)>10000000” )
注意,要首先将图层加入 Datasets
7、属性数据读取:
? 设置 Layer对象的 keyfield属性确定字段,设置 feature对象的
keyvalue属性 读取 /设置值,更改后调用 update方法;
? 用 dataset对象的 value(i,j)属性 读取值 pop=dataset.value(10,9)
? Rowvalues集合,Rowvalue对象,按行读取,要求将图层加入数据集
[RowValues=]OBJECT.RowValues(Row)
Row Variant:FeatureID(integer),FeatureKey(String)或 Feature
object.
? 使用开发工具提供的控件如 MsFlexGrid装载属性数据 。
Page 31
8,Style:
? Map.defaultstyle,适用于 Annotation中创建的符号和文本
? layer.style,替代图层中所有图元的外观
? feature.style,返回图元样式的可读写属性
9,坐标:
? Map.DisplayCoordSys
代表显示地图的坐标系统,默认设置由 geoset控制
? Map.NumericCoordSys
代表用于处理数字地图坐标的坐标系
不影响地图的外观,默认为 Longitude/Latitude WGS84
? Layer.CoordSys
指出所保存图层所在的坐标系
设置,Coordsys.set
Page 32
?二,MapX详解
2.3 MapX工具
1,MapX工具概述:
? 内置工具,用户更改地图的比例或位置的导航工具(放大、缩小、漫
游、居中);用户单击地图图元来进行标注的标注工具; 给予用户不同
的方式来选择地图图元的选择工具集合。
? 自定义工具,Map.CreateCustomTool方法
? 控制当前工具,设置 Map对象的 CurrentTool属性
要激活一个标准工具,把该属性设为某个 ToolConstants常量。
要激活自定义工具,使用在运用 CreateCustomTool方法时指定的
ToolNumber值( 1-999)。
? 对象编辑工具,添加点, 添加线、添加折线 和 添加区域 。添加到
InsertionLayer中;要编辑图元,必须把 Layer.Editable属性设为 True。
? 可用的标准工具:
Page 33
2,创建自定义工具:
? 创建工具:
CreateCustomTool (ToolNumber,Type,Cursor,[ShiftCursor],
[CtrlCursor],[Infotips])
ToolNumber,代表 工具号
Type,描述决定工具行为的 ToolTypeConstants值
Cursor,使用时的光标形状
ShiftCursor,CtrlCursor,按住 Shift,Ctrl时的光标形状
InfoTips,True/False
? 编写工具的处理过程 (反映工具实际上所做的代码 ):
使用过程工具,例如要画一条长线,这时需要在地图上使用工具记录移动的状
况。由此,在地图对象上使用 MouseMove事件。 MouseDown事件
使用工具,例如用鼠标画出一个圆,以便计算圆内的用户数。由此,需要使用
功能性工具,在地图对象上使用 ToolUsed事件。
? 把工具交付给用户,把 Map对象的 CurrentTool属性值设置成该工具
Map1.CurrentTool = miCenterTool
Page 34
欢迎多提宝贵意见!
谢谢!
MapInfo概论
?第一讲 MapInfo简介及基本概念
?第二讲 MapInfo基本操作 —表
?第三讲 MapInfo查询及分析
?第四讲 空间分析及属性信息图形化
?第五讲 OLE 嵌入与 MapBasic 简介
?第六讲 MapInfo集成地图开发
?第七讲 组件式 GIS与 MapX基础
?第八讲 MapX应用开发
Page 2
?第七讲 组件式 GIS与 MapX基础
一、组件式 GIS与 MapX
1.1 GIS开发的三种实现方式
1.2 ActiveX技术及 GIS组件
1.3 MapX简介
二,MapX详解
2.1 Layers 集合属性
2.2 Features 和 Selections
2.3 MapX工具
Page 3
?一、组件式 GIS与 MapX
1.1 GIS开发的三种实现方式
地理信息系统( GIS) 根据其内容可分为两大基本类型:
一是 工具型地理信息系统,也就是 GIS工具软件包,如
MapInfo,ARC/INFO等,具有空间数据输入、存储、处理、
分析和输出等 GIS基本功能;二是 应用型地理信息系统,以
某一专业、领域或工作为主要内容,包括专题地理信息系统
和区域综合地理信息系统。随着地理信息系统应用领域的扩
展,应用型 GIS的开发工作日显重要。
应用型地理信息系统的开发方式主要有以下三种:
? 独立开发,所有的算法都由开发者 独立设计 ;
? 单纯二次开发,完全借助于 GIS工具软件提供的开发语言
进行应用系统开发,如 ArcView提供了 Avenue语言,MapInfo
提供了 MapBasic语言等;
Page 4
? 集成二次开发,利用专业的 GIS工具软件,如 ArcView、
MapInfo等,实现 GIS的 基本功能 ;以通用软件开发工具尤其是可
视化开发工具,如 Delphi,Visual C++,Visual Basic等为开发
平台,进行 二者的集成开发 。集成开发有两种方式:
( 1) OLE/DDE,采用 OLE Automation技术或 DDE技术,用软件
开发工具开发前台可执行应用程序,以 OLE自动化方式 或 DDE方
式 启动 GIS工具软件在后台执行,利用 回调( CallBacks) 技术动
态获取其返回信息,实现应用程序中的地理信息处理功能;
( 2) GIS控件,利用 GIS工具软件生产厂家提供的建立在 OCX技
术 基础上的 GIS功能控件,如 ESRI的 MapObjects,MapInfo公司的
MapX等,在 Delphi,Visual Basic等编程工具编制的应用程序
中,直接将 GIS功能嵌入其中,实现地理信息系统的各种功能。
Page 5
由于独立开发难度太大,单纯二次开发受 GIS工具提供的编程语言的
限制差强人意,因此结合 GIS工具软件与当今可视化开发语言的集成二
次开发方式就成为 GIS应用开发的主流。
优点,既可以充分利用 GIS工具软件对空间数据库的 管理、分析 功
能,又可以利用其它可视化开发语言具有的高效、方便等 编程优点,集
二者之所长,大大提高应用系统的开发效率,且具有更好的外观效果,
更强大的数据库功能,可靠性好、易于移植、便于维护。尤其是使用
OCX技术利用 GIS组件进行集成开发,更能表现出这些优势。
缺点,前期投入较大,需同时购买 GIS工具软件和可视化编程软件。
与 OLE技术相比,利用 ActiveX控件 开发速度快,可使开发者 避开某
些应用的具体编程, 直接调用控件,实现这些具体应用,从而使编程
过程更简洁;而且占用资源少,易实现许多底层的编程和开发功能 。
集成二次开发的优缺点
Page 6
1.2 ActiveX技术及 GIS组件
?一、组件式 GIS与 MapX
1,ActiveX 技术
ActiveX是 Microsoft为了使开发人员能够把计算机桌面环
境与构成 Internet及其大量资源的环境集成起来,同时保护在
Windows中现有的开发投资而提供的一种技术。 ActiveX包括对
两个现有 Microsoft技术的一系列扩充和增强,这两个技术是:
Win32 API和 组件对象模型( COM) 。 由于 ActiveX控件是被 封装
起来的,它适合于各种编程语言(如 VB,VC++等),因此 只需
知道控件支持的属性、方法和事件,就可使用控件。
所谓 ActiveX组件 是指一些 可执行的代码,比如一个,exe,
.dll或,ocx文件,它们在提供对象时遵循 ActiveX的规范。通过
ActiveX技术,程序员就能够把这些可复用的软件 组装 到应用程
序或者服务程序中去。
Page 7
2,组件式 GIS
是把 GIS的各大功能模块划分为几个控件,每个控件完成不同的功
能。各个 GIS控件之间,以及 GIS控件与其它非 GIS控件之间,可以方便
地通过可视化的软件开发工具集成起来,形成最终的 GIS应用。控件如
同一堆各式各样的积木,它们分别实现不同的功能 (包括 GIS和非 GIS功
能 ),根据需要把实现各种功能的, 积木, 搭建起来,就构成应用系统。
( 1) 组件式 GIS开发平台的结构
? 基础组件,面向空间数据管理,提供基本的交互过程,并能以灵活
的方式与数据库系统连接;
? 高级通用组件,由基础组件构造而成,面向通用功能,简化用户开
发过程,如显示工具组件、选择工具组件、编辑工具组件、属性浏览器
组件等等。它们之间的协同控制消息都被封装起来。这级组件经过 封装
后,使二次开发更为简单;
Page 8
? 行业性组件,抽象出 行业应用的特定算法,固化到组件中,进一
步加速开发过程。以 GPS监控为例。对于 GPS应用,除了需要地图显示、
信息查询等一般的 GIS功能外,还需要特定的应用功能,如动态目标
显示、目标锁定、轨迹显示等。这些 GPS行业性应用功能组件被封装
起来后,开发者的工作就可简化为设置显示目标的图例、轨迹显示的
颜色、锁定的目标,以及调用、接受数据的方法等。
缺点,效率相对低下;支持的空间数据量有限;支持的功能有限,
只覆盖了 GIS系统的部分功能;系统的可靠性、容错性有待提高。开
发及使用过程中必须 时刻注意 Windows系统 OLE系统注册表的正确 。
GIS构件的 设计主要遵循应用领域的需求 。例如 ESRI地 MapObjects
就是以空间数据访问、查询、制图为主要目标的 GIS构件。 GIS组件的
代表作应 首推 MapObjects以及 MapX等。
Page 9
MapObjects和 MapX的主要功能对比
Page 10
?一、组件式 GIS与 MapX
1.3 MapX简介
1,MapX— 地图化的 ActivX
MapX是 MapInfo公司向用户提供的具有强大地图分析功能的 ActiveX
控件 产品。由于它是一种基于 Windows操作系统的标准控件,因而能支
持绝大多数标准的可视化开发环境如 Visual C++,Visual Basic、
Delphi,PowerBuilder等。编程人员在开发过程中可以选用自己最熟
悉的开发语言,轻松地将地图功能嵌入到应用中,并且 可以脱离
MapInfo的软件平台 运行。利用 MapX能够简单快速地在企业应用中嵌入
地图化功能,增强企业应用的空间分析能力,实现企业应用的增值。
MapX采用基于 MapInfo Professional的相同的地图化技术,可以实现
MapInfo Professional具有的 绝大部分地图编辑和空间分析功能 。而
且 MapX提供了各种工具、属性和方法,实现这些功能是非常容易的。
Page 11
? 工具箱是一个控件集, 里面包括在程序中可以被用到
的控件 。 用户自定义的控件也可以增加到工具箱里 。
? 把 MapX增加到工具箱中去,
? 工程 菜单 ? 部件
? 选中 MapInfo MapX V5项
? 确定 OK
? 现在就可以在程序中增加地图了
? 在工具箱中选择 MapX的 控制图标
? 在窗体中放置 MapX控件, 就可以看到一个缺省的 (
美国 )地图显示在应用程序窗体上了 。
? 属性页
在 VB中加入 MapX组件
Page 12
2,MapX的空间数据结构
从 横向 分析,MapX采取的空间数据结构是基于 空间实体 和 空间索引
相结合的一种结构。空间实体是地理图形的抽象模型,主要包括 点、线、
面 三种类型。任何点、线、面实体都可以用直角坐标点 x,y来表示。点
可以表示成一组坐标( x,y),对于线和面,则均被表示成多组坐标
( x1,y1; x2,y2; xn,yn)。 空间索引 是查询空间实体的一种机制,
通过空间索引,就能够以尽量快的速度查询到给定坐标范围内的空间实
体及其所对应的数据。
从 纵向 分析,MapX的空间数据结构是一种 分层存放 的结构。用户可
以通过 图形分层 技术,根据自己的需求或一定的标准对各种空间实体进
行分层组合,将一张地图分成不同图层。采用这种分层存放的结构,可
以提高图形的搜索速度,便于各种不同数据的灵活调用、更新和管理。
MapX模型结构
Page 13
3,MapX的基本属性
( 1) Map,每个 Map对象主要包括 Datasets,Layers,Annotations三
个对象集合。主要的属性,Zoom用来设置放大级别(在地图上显示的大
小),Rotation控制地图的旋转角度,CenterX和 CenterY用于设置 x
和 y的坐标系,这要取决于地图的投影。 Map对象的许多属性本身又是一
个对象,比如说 一幅地图由多个图层组成,则在一个 Map对象中存在一
个单独的 layers集合,其中包含所有图层的信息。
( 2) Layers,在 MapX中,每张单独的地图都被表示成单独的一个图层,
所有的图层存储在 layers集合中。 Layers集合 由 Layer对象 组成,按顺
序编号为 0到 n。 Layer对象由 features对象 组成,features对象又是由
Feature对象 组成,对应于地图中的 点、线、区域或符号。最下面的图
层最先绘制,最上面的图层最后绘制;选择工具总是从可选择图层中的
最上层开始选择。
Page 14
( 3) GeoSets,GeoSet是在 GeoSet Manager中建立好的,GST文件,类
似 MapInfo中的 WorkSpace概念,是 图层及其设置的集合,控制程序中显
示的地图。也可以在运行阶段设置 GeoSet,此时将导致已经加载的所有
图层和 DataSet被删除而由 GeoSet中定义的图层所代替。如果单纯地想
删除所有图层,只需给 GeoSet赋一个空字符串即可。
当打开 GeoSet文件时,所有的地图图层和设置都将以保存值返回。
使用 geosetmanager的时候,所有的,gst文件要放在 C:\Program
Files\MapInfo\MapX 5.0\Maps>目录下。可以调用 GeoDictionary
Manager程序进行修改,指向用户程序数据所在的位置。
( 4) Datasets,Datasets用于 实现地图与数据的绑定 。
建立地图信息与属性数据之间联系 的过程称之为 自动绑定 或自动匹配
( autobinding /automatching)。 要实现这一过程,必须 首先将地图
在 GeoDictionaryMananger中注册 。属性数据表示的可视化使得创建专
题地图( Theme) 成为可能。
Page 15
( 5) Annotations,Annotations集合提供了 操纵地图中文字和符号
的简单方法。 Annotations位于所有其它图层的上方并且不与任何数据
连接,类似于 MapInfo中的装饰图层 。 Annotations包括以下主要的属性
与方法,AddSymbol,AddText,Remove
Annotations还有一个非常重要的属性 Graphic,其定义为 Graphic
对象,在该对象中 包含了符号或文本的样式、位置等信息,即 Graphic
的 Caption,Position,Style, X,Y属性。如 Annotations的 Type属
性定义为 miTextAnnotation,则可以定义 Graphic的 Caption属性设置
标注的字符串。
( 6) 可创建对象,在 MapX对象模型中,以下对象是可以被创建的:
AffineTransform,BindLayer,BitmapSymbols,CoordSys,Datum、
Feature,Fields,LayerInfo,Map,ODBCQueryInfo,Parts,Point、
Points,Rectangle,RowValue,RowValues,Style,Variables、
NotesQueryInfo,NotesViewInfo
Page 16
( 7) GeoDictionary,利用 MapX作 数据绑定 或 创建专题地图 时,
可以用 GeoDictionary来匹配数据源与地图图层,实际上是一个文件
包含有数据绑定信息的 geodict.dct。 GeoDictionary是一个 保存了关
于哪个地图图层可以匹配、哪个字段可以用作匹配字段的信息文件
(一般命名为 geodict.dct)。 如果想运用自动匹配 /自动绑定,则
必须在 GeoDictionaryManager中注册 MapInfo文件。在 MapX GeoSet
Manager的, Tools”菜单下选择, Run GeoDictionary Manager”选项 。
MapX GeoDictionaryManager程序允许把新的 MapInfo表注册到
GeoDictionary中。在 GeoDictionaryManager中,单击, 注册表 …,
按钮,然后 选择要注册的表,设置表属性并为其输入描述 。如果要想
自动地把这张表加载到 GeoSet中,单击添加按钮然后选择要把表添加
进的 GeoSet。
用作数据绑定的图层 至少要有一个索引字段。
Page 17
? 对象 object 包含代码和数据 。 一个对象可以是一个应用的一部
分, 如一个放在窗体上的控件或窗体 。 一个应用也可是一个对象
。
? 属性 property 描述对象的变量 。
? 方法 method 描述对象行为 。
? 事件 event 描述对象动作, 以及这个工作将如何响应 。
? 集合 collection 包含一组对象 。
? 主要的集合对象,Geosets,Layers,Features,Parts,
Points,Annotatons,Datasets,Fields,SourceRows,Themes
? 集合对象的共性:
? 属性,Count, Item
方法,Add,Remove, RemoveAll
术语说明:
Page 18
?二,MapX详解
2.1 Layers 集合属性
用户的数据反映在地图上通常根据点、线、面的层次结构进行归类。
每一个独立的图层都可以作为一个独立的地图。 MapX中调用的是一个由
多个独立地图图层组成的地图集合。 Layers集合由 Layer对象组成。
Layers集合具有用来从集合添加和删除 Layer对象的方法和属性。
1,Layers 集合的方法
( 1)图层控制对话框,Map1.Layers.LayersDlg
( 2)创建新层,Dim lyr as layer Set lyr = Map1.Layers.CreateLayer (“Temporary”)
( 3)加入图层,Map1.Layers.Add,C:\Data\Ireland.tab”
( 4)删除图层,Map1.Layers.Remove 3
( 5)重定位图层,Map1.Layers.Move 1,2
Page 19
( 6)用户 绘制图层,Map1.AddUserDrawLayer
当需要绘制图层时,它与激活的 DrawUserLayer事件 结合在一起使
用。该方法返回新创建的 Layer对象。
2,Layers 集合的属性:
? Bounds,返回代表集合中所有地图图层的地理范围
? Count,获得集合中的图层数目
? Item,从集合中获得特定的 Layer 对象 名称或者索引
3,Layer对象的属性:
Layer 对象代表具有主要图元类型(如区域、线条和符号)的地图窗
体中的矢量地图化数据,对应于一张 MapInfo 表中的地理对象 。 Layers
集合中的每一个 Layer 对象的行为独立于其他对象。它们的样式更改、
图层缩放的更改都基于单个图层,而不会影响其他图层。
Page 20
? Name,图层的名称
? AutoLabel,控制图层是否自动标注
? OverrideStyle,是否替代该图层的默认显示特性
? Selectable,Editable,Visible:
? Style,如果 OverrideStyle 为真时图层样式将应用
? ZoomLayer,ZoomMax,ZoomMin,设置图层缩放打开或关闭及缩放级别
? Type,图层类型 miLayerTypeNormal
? FeatureType,每一图层的图元类型 miFeatureTypeRegion
? LabelProperties,控制自动标注的位置、显示和外观(多种属性)
? 交互式标注,可设置 Map1.CurrentTool 属性为 miLabelTool(1010)
用户将可通过单击图元进行标注。
Page 21
( 1) LabelProperties
? 控制标注显示:
要为图层自动生成标注,可以设置图层的 AutoLabel属性为 True。
每个图层对象都有 LabelProperties对象,用来控制标注的许多方面:
Visible; LabelMax; Duplicate; Overlap
? 缩放图层标注,设置 LabelZoom,LabelZoomMax和 LabelZoomMin属性。
? 标注位置,设置 Position,Offset,Parallel属性。
? 创建引注,为想要标注的图层设置 LabelProperties.LineType属性为
miLineTypeSimple (1) 或 miLineTypeArrow (2)。
? 标注样式,要更改所有标注的样式,可设置 Style。
( 2)注释 (Annotations)
可添加文本或符号注释到地图,绘制在地图的顶层。
? 不同于标注的是,文本注释不与数据连接,且没有任何属性来设置位
置、符号样式或文本,使用 Graphic属性获取 Graphic对象后修改
Page 22
4,动态图层 (Animation):
Animation图层在 地图图元需要经常更新 ( 例如在实时应用时 ) 时很有
用 。 例如, 可以开发一套舰队管理应用程序, 将每一艘舰船用一个点对
象来代表 。 可以通过使用 GPS( 全球卫星定位 ) 技术获取舰船的当前位
置, 然后更新点对象以显示舰船在地图上的更新位置 。 在这类应用程序
中, 如果被更新的对象存储在动态图层而不是常规图层, 那么在地图对
象经常改变的地方, 地图可以更快地重新绘制 。
最初,AnimationLayer设置为 null。 可以向 Layer对象分派属性以使图
层成为动态图层(它可以是常规图层或是用户绘制图层)。当图层被分
派了 AnimationLayer属性,它就会 绘制在所有图层的上方,包括
Annotations注释 图层和选择结果。该图层仍然在 Layers 集合中的同样位
置。浮动对象如图标符号仍然显示在动态图层的顶端。如果普通的图层
被用作动态图层,其选择结果和标注会依然有效。
Page 23
?二,MapX详解
2.2 Features 和 Selections
1,基本概念:
? 地图图元 是地图上的地理对象,例如点、线或区域。在 MapX 中,地
图图元表示为 Feature对象 。
? 在 MapX中地图图层中的所有图元及其所有子集表示为 Features集合 。
许多 Layer对象方法都返回图层的 Features集合,可以是空的。
? 和 Features集合类似,Selection集合 也是 Feature对象的集合。但是,
Selection 集合表示 当前已选中的 Feature对象 。 MapX 自动 高亮显示 在
Selection 集合中的所有图元。
? Features 集合与 Selection 集合各有一组不同的方法和属性集,而且两
个集合类型的行为也不同。在 Selections 集合中自动高亮显示选中的图元
,而在 Features 集合中不会突出显示图元。
Page 24
2,使用 Features集合,
? 取得图层中的图元,在使用 Features 集合前必须先创建集合。可以用
Layer 对象方法创建 Feature 对象的集合。
? 操纵 Features集合:
? Feature对象,Features 集合由 Feature 对象集合组成。 Feature 对象对
应于地图上的图元,例如符号、线或区域。 Feature 对象方法可以创建和
操作独立图元对象。 在创建独立图元对象后,必须将该图元对象附加到
地图上后才能引用对象的所有方法和属性。 把图元附加到地图时地图的
坐标系与图元相关联。
Page 25
3,使用 Selection集合,
? MapX 的一个基本功能是在地图上选择图元,要检查所选图元列表,
使用 Selection集合,它是 Feature对象的集合。每个图层都有所选图元对
象的集合( Layer.Selection)。 Selection集合具有在集合中添加和删除图
元的方法。同时,如果已经具有 Selection或 Features集合,那么可以追加
、删除、复制或查找两个集合的交集。
? MiSelectionNew MiSelectionAppend MiSelectionRemove
? SelectionChanged 事件,当更改选择时调用该事件 。该事件使容器可
以重新与建立在地图上的选择发生作用。使用选择工具或使用 Layer对象
的某一 Selection方法可以将选择更改为用户结果。
Page 26
4,Feature图元编辑,
? 创建新的地图图元:
( 1) 通过分配新 Feature对象创建独立图元:
设置 Type为 miFeatureTypeSymbol,miFeatureTypeRegion、
miFeatureTypeLine 或 miFeatureTypeText,如:
set obj = map1.Layers(1).AddFeature(newobj)
( 2) 使用 Map 对象的 FeatureFactory属性 方法对现有图元执行操作(例如缓
冲区)来创建图元:
创建一个地图元素有两个重要的步骤:首先是 创建点集,对象将由此来创建;
然后 使用点集,类似于, 连点游戏, 。如果只有一个点,只能创建一个符号对象
。如果有两个点,可以创建一条直线。如果有三个或更多的点,就或者可以创建
一条折线(由多个段组成的线,但仍被当作一个元素),或者可以创建一个区域
(有封闭的边界)。样式在设置新对象的 Type属性时决定。
Set f = Map1.Layers(1).AddFeature(Map1.FeatureFactory.CreateText(p,
,Some Text” )) 这些图元对象自动附加到地图上 独立图元
Page 27
? 修改现有图元,一旦通过设置样式、点或位置开始修改图元后,必须
,更新, 图元才能使更改生效。 图层图元
( 1)如果已经修改图元并希望提交更改,使用 Feature.Update方法。
( 2)如果希望将图元替换为另一图元,使用 Layer.UpdateFeature方法。
( 4)在更新图元时,原有 MBR和新 MBR都失效,使屏幕可正确重画。
如果选择不调用 Update并释放对象,那么下次从图层中检索图元时,
它仍将使用最初值。
? 删除现有图元,Layer.DeleteFeature 图元及表示它的行立即从
MapInfo 表中删除。
? 取得要编辑的图元,可以允许用户单击选择图元。此后,程序可以使
用图层的 Selection集合访问选择。 Selection集合也提供各种方法(例如
SelectByPoint) 可以将图元添加到集合。
可以使用 Find.Search方法执行能够返回 FindFeature对象( Feature对象
的超类)的查询。
Page 28
?区域或线的局部,MapX 中的线图元或区域图元包含许多 Point 对象 的
集合。可通过图元的 Feature.Parts 集合 访问这些 Points 集合 的集合。
检查组成图元的节点
Page 29
5,查找图元,
? Find对象:
Find 对象可以定位地图中的图元。可以查找到线、符号或区域图元。
为了能使用 Find 方法,所搜索的图层应包含 索引字段 。
? SearchEx方法,返回 FindResult对象
[FindResult]=object.SearchEx(Address[,Boundary])
? FindFeature对象:
FindFeature对象:返回 匹配了最精确字符串 (附加上结果代码 FindRC)
的 Feature对象的 超类 。该对象把 Find.Search方法查找到的 Feature对象
的属性存储起来作为自身的属性。此外,FindFeature包含 FindRC属性,
该属性存储 Find操作的结果代码。 FindRC属性是表明因何查找到或未查
找到图元的原因的数字值。
object.Search(Address[,Boundary])
Page 30
6、属性查询:
Layer对象的 Search方法,where子句。例如
ftrs=layer.search(,Character_Name like,,%市,“” )
ftrs=layer.search(,Area(obj)>10000000” )
注意,要首先将图层加入 Datasets
7、属性数据读取:
? 设置 Layer对象的 keyfield属性确定字段,设置 feature对象的
keyvalue属性 读取 /设置值,更改后调用 update方法;
? 用 dataset对象的 value(i,j)属性 读取值 pop=dataset.value(10,9)
? Rowvalues集合,Rowvalue对象,按行读取,要求将图层加入数据集
[RowValues=]OBJECT.RowValues(Row)
Row Variant:FeatureID(integer),FeatureKey(String)或 Feature
object.
? 使用开发工具提供的控件如 MsFlexGrid装载属性数据 。
Page 31
8,Style:
? Map.defaultstyle,适用于 Annotation中创建的符号和文本
? layer.style,替代图层中所有图元的外观
? feature.style,返回图元样式的可读写属性
9,坐标:
? Map.DisplayCoordSys
代表显示地图的坐标系统,默认设置由 geoset控制
? Map.NumericCoordSys
代表用于处理数字地图坐标的坐标系
不影响地图的外观,默认为 Longitude/Latitude WGS84
? Layer.CoordSys
指出所保存图层所在的坐标系
设置,Coordsys.set
Page 32
?二,MapX详解
2.3 MapX工具
1,MapX工具概述:
? 内置工具,用户更改地图的比例或位置的导航工具(放大、缩小、漫
游、居中);用户单击地图图元来进行标注的标注工具; 给予用户不同
的方式来选择地图图元的选择工具集合。
? 自定义工具,Map.CreateCustomTool方法
? 控制当前工具,设置 Map对象的 CurrentTool属性
要激活一个标准工具,把该属性设为某个 ToolConstants常量。
要激活自定义工具,使用在运用 CreateCustomTool方法时指定的
ToolNumber值( 1-999)。
? 对象编辑工具,添加点, 添加线、添加折线 和 添加区域 。添加到
InsertionLayer中;要编辑图元,必须把 Layer.Editable属性设为 True。
? 可用的标准工具:
Page 33
2,创建自定义工具:
? 创建工具:
CreateCustomTool (ToolNumber,Type,Cursor,[ShiftCursor],
[CtrlCursor],[Infotips])
ToolNumber,代表 工具号
Type,描述决定工具行为的 ToolTypeConstants值
Cursor,使用时的光标形状
ShiftCursor,CtrlCursor,按住 Shift,Ctrl时的光标形状
InfoTips,True/False
? 编写工具的处理过程 (反映工具实际上所做的代码 ):
使用过程工具,例如要画一条长线,这时需要在地图上使用工具记录移动的状
况。由此,在地图对象上使用 MouseMove事件。 MouseDown事件
使用工具,例如用鼠标画出一个圆,以便计算圆内的用户数。由此,需要使用
功能性工具,在地图对象上使用 ToolUsed事件。
? 把工具交付给用户,把 Map对象的 CurrentTool属性值设置成该工具
Map1.CurrentTool = miCenterTool
Page 34
欢迎多提宝贵意见!
谢谢!