中科大《MapInfo概论》课件第7讲 组件式GIS与MapX基础_第1页
中科大《MapInfo概论》课件第7讲 组件式GIS与MapX基础_第2页
中科大《MapInfo概论》课件第7讲 组件式GIS与MapX基础_第3页
中科大《MapInfo概论》课件第7讲 组件式GIS与MapX基础_第4页
中科大《MapInfo概论》课件第7讲 组件式GIS与MapX基础_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MapInfo概论第一讲MapInfo简介及基本概念第二讲MapInfo基本操作—表第三讲

MapInfo查询及分析第四讲

空间分析及属性信息图形化第五讲

OLE嵌入与MapBasic

简介第六讲

MapInfo集成地图开发第七讲组件式GIS与MapX基础第八讲MapX应用开发第七讲组件式GIS与MapX基础一、组件式GIS与MapX

1.1GIS开发的三种实现方式

1.2

ActiveX技术及GIS组件

1.3

MapX简介二、MapX详解

2.1Layers集合属性

2.2

Features和Selections

2.3

MapX工具

一、组件式GIS与MapX

1.1GIS开发的三种实现方式

地理信息系统(GIS)根据其内容可分为两大基本类型:一是工具型地理信息系统,也就是GIS工具软件包,如MapInfo、ARC/INFO等,具有空间数据输入、存储、处理、分析和输出等GIS基本功能;二是应用型地理信息系统,以某一专业、领域或工作为主要内容,包括专题地理信息系统和区域综合地理信息系统。随着地理信息系统应用领域的扩展,应用型GIS的开发工作日显重要。应用型地理信息系统的开发方式主要有以下三种:

独立开发:所有的算法都由开发者独立设计;单纯二次开发:完全借助于GIS工具软件提供的开发语言进行应用系统开发,如ArcView提供了Avenue语言,MapInfo提供了MapBasic语言等;集成二次开发:利用专业的GIS工具软件,如ArcView、MapInfo等,实现GIS的基本功能;以通用软件开发工具尤其是可视化开发工具,如Delphi、VisualC++、VisualBasic等为开发平台,进行二者的集成开发。集成开发有两种方式:(1)

OLE/DDE:采用OLEAutomation技术或DDE技术,用软件开发工具开发前台可执行应用程序,以OLE自动化方式或DDE方式启动GIS工具软件在后台执行,利用回调(CallBacks)技术动态获取其返回信息,实现应用程序中的地理信息处理功能;(2)

GIS控件:利用GIS工具软件生产厂家提供的建立在OCX技术基础上的GIS功能控件,如ESRI的MapObjects、MapInfo公司的MapX等,在Delphi、VisualBasic等编程工具编制的应用程序中,直接将GIS功能嵌入其中,实现地理信息系统的各种功能。

由于独立开发难度太大,单纯二次开发受GIS工具提供的编程语言的限制差强人意,因此结合GIS工具软件与当今可视化开发语言的集成二次开发方式就成为GIS应用开发的主流。

优点:既可以充分利用GIS工具软件对空间数据库的管理、分析功能,又可以利用其它可视化开发语言具有的高效、方便等编程优点,集二者之所长,大大提高应用系统的开发效率,且具有更好的外观效果,更强大的数据库功能,可靠性好、易于移植、便于维护。尤其是使用OCX技术利用GIS组件进行集成开发,更能表现出这些优势。

缺点:前期投入较大,需同时购买GIS工具软件和可视化编程软件。

与OLE技术相比,利用ActiveX控件开发速度快,可使开发者避开某些应用的具体编程,直接调用控件,实现这些具体应用,从而使编程过程更简洁;而且占用资源少,易实现许多底层的编程和开发功能。集成二次开发的优缺点1.2ActiveX技术及GIS组件一、组件式GIS与MapX

1、ActiveX技术ActiveX是Microsoft为了使开发人员能够把计算机桌面环境与构成Internet及其大量资源的环境集成起来,同时保护在Windows中现有的开发投资而提供的一种技术。ActiveX包括对两个现有Microsoft技术的一系列扩充和增强,这两个技术是:Win32API和组件对象模型(COM)。由于ActiveX控件是被封装起来的,它适合于各种编程语言(如VB、VC++等),因此只需知道控件支持的属性、方法和事件,就可使用控件。

所谓ActiveX组件是指一些可执行的代码,比如一个.exe,.dll或.ocx文件,它们在提供对象时遵循ActiveX的规范。通过ActiveX技术,程序员就能够把这些可复用的软件组装到应用程序或者服务程序中去。2、组件式GIS

是把GIS的各大功能模块划分为几个控件,每个控件完成不同的功能。各个GIS控件之间,以及GIS控件与其它非GIS控件之间,可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS应用。控件如同一堆各式各样的积木,它们分别实现不同的功能(包括GIS和非GIS功能),根据需要把实现各种功能的“积木”搭建起来,就构成应用系统。

(1)组件式GIS开发平台的结构

基础组件:面向空间数据管理,提供基本的交互过程,并能以灵活的方式与数据库系统连接;高级通用组件:由基础组件构造而成,面向通用功能,简化用户开发过程,如显示工具组件、选择工具组件、编辑工具组件、属性浏览器组件等等。它们之间的协同控制消息都被封装起来。这级组件经过封装后,使二次开发更为简单;行业性组件:抽象出行业应用的特定算法,固化到组件中,进一步加速开发过程。以GPS监控为例。对于GPS应用,除了需要地图显示、信息查询等一般的GIS功能外,还需要特定的应用功能,如动态目标显示、目标锁定、轨迹显示等。这些GPS行业性应用功能组件被封装起来后,开发者的工作就可简化为设置显示目标的图例、轨迹显示的颜色、锁定的目标,以及调用、接受数据的方法等。缺点:效率相对低下;支持的空间数据量有限;支持的功能有限,只覆盖了GIS系统的部分功能;系统的可靠性、容错性有待提高。开发及使用过程中必须时刻注意Windows系统OLE系统注册表的正确。GIS构件的设计主要遵循应用领域的需求。例如ESRI地MapObjects就是以空间数据访问、查询、制图为主要目标的GIS构件。GIS组件的代表作应首推MapObjects以及MapX等。MapObjects和MapX的主要功能对比

一、组件式GIS与MapX1.3MapX简介1、MapX—地图化的ActivX

MapX是MapInfo公司向用户提供的具有强大地图分析功能的ActiveX控件产品。由于它是一种基于Windows操作系统的标准控件,因而能支持绝大多数标准的可视化开发环境如VisualC++、VisualBasic、Delphi、PowerBuilder等。编程人员在开发过程中可以选用自己最熟悉的开发语言,轻松地将地图功能嵌入到应用中,并且可以脱离MapInfo的软件平台运行。利用MapX能够简单快速地在企业应用中嵌入地图化功能,增强企业应用的空间分析能力,实现企业应用的增值。MapX采用基于MapInfoProfessional的相同的地图化技术,可以实现MapInfoProfessional具有的绝大部分地图编辑和空间分析功能。而且MapX提供了各种工具、属性和方法,实现这些功能是非常容易的。

工具箱是一个控件集,里面包括在程序中可以被用到的控件。用户自定义的控件也可以增加到工具箱里。

把MapX增加到工具箱中去:工程菜单

部件选中MapInfoMapXV5项确定OK

现在就可以在程序中增加地图了在工具箱中选择MapX的控制图标在窗体中放置MapX控件,就可以看到一个缺省的(美国)地图显示在应用程序窗体上了。

属性页在VB中加入MapX组件

2、MapX的空间数据结构

从横向分析,MapX采取的空间数据结构是基于空间实体和空间索引相结合的一种结构。空间实体是地理图形的抽象模型,主要包括点、线、面三种类型。任何点、线、面实体都可以用直角坐标点x、y来表示。点可以表示成一组坐标(x,y),对于线和面,则均被表示成多组坐标(x1,y1;x2,y2;xn,yn)。空间索引是查询空间实体的一种机制,通过空间索引,就能够以尽量快的速度查询到给定坐标范围内的空间实体及其所对应的数据。从纵向分析,MapX的空间数据结构是一种分层存放的结构。用户可以通过图形分层技术,根据自己的需求或一定的标准对各种空间实体进行分层组合,将一张地图分成不同图层。采用这种分层存放的结构,可以提高图形的搜索速度,便于各种不同数据的灵活调用、更新和管理。

MapX模型结构

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对象组成,对应于地图中的点、线、区域或符号。最下面的图层最先绘制,最上面的图层最后绘制;选择工具总是从可选择图层中的最上层开始选择。

(3)GeoSets:GeoSet是在GeoSetManager中建立好的.GST文件,类似MapInfo中的WorkSpace概念,是图层及其设置的集合,控制程序中显示的地图。也可以在运行阶段设置GeoSet,此时将导致已经加载的所有图层和DataSet被删除而由GeoSet中定义的图层所代替。如果单纯地想删除所有图层,只需给GeoSet赋一个空字符串即可。当打开GeoSet文件时,所有的地图图层和设置都将以保存值返回。使用geosetmanager的时候,所有的.gst文件要放在C:\ProgramFiles\MapInfo\MapX5.0\Maps>目录下。可以调用GeoDictionaryManager程序进行修改,指向用户程序数据所在的位置。(4)Datasets:Datasets用于实现地图与数据的绑定。

建立地图信息与属性数据之间联系的过程称之为自动绑定或自动匹配(autobinding/automatching)。要实现这一过程,必须首先将地图在GeoDictionaryMananger中注册。属性数据表示的可视化使得创建专题地图(Theme)成为可能。(5)Annotations:Annotations集合提供了操纵地图中文字和符号的简单方法。Annotations位于所有其它图层的上方并且不与任何数据连接,类似于MapInfo中的装饰图层。Annotations包括以下主要的属性与方法:AddSymbol、AddText、RemoveAnnotations还有一个非常重要的属性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(7)GeoDictionary:利用MapX作数据绑定或创建专题地图时,可以用GeoDictionary来匹配数据源与地图图层,实际上是一个文件包含有数据绑定信息的geodict.dct。GeoDictionary是一个保存了关于哪个地图图层可以匹配、哪个字段可以用作匹配字段的信息文件(一般命名为geodict.dct)。如果想运用自动匹配/自动绑定,则必须在GeoDictionaryManager中注册MapInfo文件。在MapX

GeoSetManager的“Tools”菜单下选择“RunGeoDictionaryManager”选项。MapX

GeoDictionaryManager程序允许把新的MapInfo表注册到GeoDictionary中。在GeoDictionaryManager中,单击“注册表…”按钮,然后选择要注册的表,设置表属性并为其输入描述。如果要想自动地把这张表加载到GeoSet中,单击添加按钮然后选择要把表添加进的GeoSet。用作数据绑定的图层至少要有一个索引字段。对象object

包含代码和数据。一个对象可以是一个应用的一部分,如一个放在窗体上的控件或窗体。一个应用也可是一个对象。属性property

描述对象的变量。方法method

描述对象行为。事件event

描述对象动作,以及这个工作将如何响应。集合collection

包含一组对象。主要的集合对象:Geosets,Layers,Features,Parts,Points,Annotatons,Datasets,Fields,SourceRows,Themes集合对象的共性:属性:Count、Item

方法:Add、Remove、RemoveAll术语说明:二、MapX详解2.1Layers集合属性

用户的数据反映在地图上通常根据点、线、面的层次结构进行归类。每一个独立的图层都可以作为一个独立的地图。MapX中调用的是一个由多个独立地图图层组成的地图集合。Layers集合由Layer对象组成。Layers集合具有用来从集合添加和删除Layer对象的方法和属性。1、Layers集合的方法

(1)图层控制对话框:Map1.Layers.LayersDlg

(2)创建新层:DimlyraslayerSetlyr=Map1.Layers.CreateLayer(“Temporary”)(3)加入图层:Map1.Layers.Add“C:\Data\Ireland.tab”(4)删除图层:Map1.Layers.Remove3(5)重定位图层:Map1.Layers.Move1,2

(6)用户绘制图层:Map1.AddUserDrawLayer

当需要绘制图层时,它与激活的DrawUserLayer事件结合在一起使用。该方法返回新创建的Layer对象。2、Layers集合的属性:

Bounds:返回代表集合中所有地图图层的地理范围

Count:获得集合中的图层数目

Item:从集合中获得特定的

Layer对象

名称或者索引3、Layer对象的属性:Layer对象代表具有主要图元类型(如区域、线条和符号)的地图窗体中的矢量地图化数据,对应于一张

MapInfo表中的地理对象。Layers集合中的每一个

Layer对象的行为独立于其他对象。它们的样式更改、图层缩放的更改都基于单个图层,而不会影响其他图层。

Name:图层的名称

AutoLabel:控制图层是否自动标注

OverrideStyle:是否替代该图层的默认显示特性

Selectable,Editable,Visible:

Style:如果OverrideStyle

为真时图层样式将应用

ZoomLayer,ZoomMax,ZoomMin:设置图层缩放打开或关闭及缩放级别

Type:图层类型miLayerTypeNormal

FeatureType:每一图层的图元类型miFeatureTypeRegion

LabelProperties:控制自动标注的位置、显示和外观(多种属性)

交互式标注:可设置Map1.CurrentTool属性为miLabelTool(1010)用户将可通过单击图元进行标注。(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对象后修改4、动态图层(Animation):Animation图层在地图图元需要经常更新(例如在实时应用时)时很有用。例如,可以开发一套舰队管理应用程序,将每一艘舰船用一个点对象来代表。可以通过使用GPS(全球卫星定位)技术获取舰船的当前位置,然后更新点对象以显示舰船在地图上的更新位置。在这类应用程序中,如果被更新的对象存储在动态图层而不是常规图层,那么在地图对象经常改变的地方,地图可以更快地重新绘制。最初,AnimationLayer设置为null。可以向Layer对象分派属性以使图层成为动态图层(它可以是常规图层或是用户绘制图层)。当图层被分派了AnimationLayer属性,它就会绘制在所有图层的上方,包括Annotations注释图层和选择结果。该图层仍然在

Layers集合中的同样位置。浮动对象如图标符号仍然显示在动态图层的顶端。如果普通的图层被用作动态图层,其选择结果和标注会依然有效。

二、MapX详解2.2Features和Selections1、基本概念:

地图图元是地图上的地理对象,例如点、线或区域。在MapX中,地图图元表示为Feature对象。

在MapX中地图图层中的所有图元及其所有子集表示为Features集合。许多Layer对象方法都返回图层的Features集合,可以是空的。和Features集合类似,Selection集合也是Feature对象的集合。但是,Selection集合表示当前已选中的Feature对象。MapX

自动高亮显示在

Selection集合中的所有图元。

Features集合与

Selection集合各有一组不同的方法和属性集,而且两个集合类型的行为也不同。在

Selections集合中自动高亮显示选中的图元,而在

Features集合中不会突出显示图元。

2、使用Features集合:

取得图层中的图元:在使用

Features集合前必须先创建集合。可以用

Layer对象方法创建

Feature对象的集合。

操纵Features集合:

Feature对象:Features集合由

Feature对象集合组成。Feature对象对应于地图上的图元,例如符号、线或区域。Feature对象方法可以创建和操作独立图元对象。在创建独立图元对象后,必须将该图元对象附加到地图上后才能引用对象的所有方法和属性。把图元附加到地图时地图的坐标系与图元相关联。3、使用Selection集合:

MapX的一个基本功能是在地图上选择图元,要检查所选图元列表,使用Selection集合,它是Feature对象的集合。每个图层都有所选图元对象的集合(Layer.Selection)。Selection集合具有在集合中添加和删除图元的方法。同时,如果已经具有Selection或

Features集合,那么可以追加、删除、复制或查找两个集合的交集。

MiSelectionNew

MiSelectionAppend

MiSelectionRemove

SelectionChanged

事件:当更改选择时调用该事件。该事件使容器可以重新与建立在地图上的选择发生作用。使用选择工具或使用Layer对象的某一Selection方法可以将选择更改为用户结果。

4、Feature图元编辑:

创建新的地图图元:(1)通过分配新Feature对象创建独立图元:设置Type为miFeatureTypeSymbol、miFeatureTypeRegion、miFeatureTypeLine

或miFeatureTypeText,如:

setobj=map1.Layers(1).AddFeature(newobj)

(2)使用

Map对象的FeatureFactory属性方法对现有图元执行操作(例如缓冲区)来创建图元:创建一个地图元素有两个重要的步骤:首先是创建点集,对象将由此来创建;然后使用点集,类似于“连点游戏”。如果只有一个点,只能创建一个符号对象。如果有两个点,可以创建一条直线。如果有三个或更多的点,就或者可以创建一条折线(由多个段组成的线,但仍被当作一个元素),或者可以创建一个区域(有封闭的边界)。样式在设置新对象的Type属性时决定。Setf=Map1.Layers(1).AddFeature(Map1.FeatureFactory.CreateText(p,“SomeText”))这些图元对象自动附加到地图上独立图元

修改现有图元:一旦通过设置样式、点或位置开始修改图元后,必须“更新”图元才能使更改生效。图层图元(1)如果已经修改图元并希望提交更改,使用Feature.Update方法。(2)如果希望将图元替换为另一图元,使用Layer.UpdateFeature方法。(4)在更新图元时,原有MBR和新MBR都失效,使屏幕可正确重画。如果选择不调用Update并释放对象,那么下次从图层中检索图元时,它仍将使用最初值。

删除现有图元:

Layer.DeleteFeature

图元及表示它的行立即从MapInfo表中删除。

取得要编辑的图元:可以允许用户单击选择图元。此后,程序可以使用图层的Selection集合访问选择。Selection集合也提供各种方法(例如

SelectByPoint)可以将图元添加到集合。可以使用Find.Search方法执行能够返回FindFeature对象(Feature对象的超类)的查询。区域或线的局部:MapX中的线图元或区域图元包含许多

Point对象的集合。可通过图元的

Feature.Parts集合访问这些

Points集合的集合。检查组成图元的节点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])6、属性查询:

Layer对象的Search方法,where子句。例如ftrs=layer.search(“Character_Namelike”“%市”“”)ftrs=layer.search(“Area(obj)>10000000”)

注意:要首先将图层加入Datasets7、属性数据读取:设置Layer对象的keyfield属性确定字段,设置feature对象的keyvalue属性读取/设置值,更改后调用update方法;用dataset对象的value(i,j)属性读取值pop=dataset.value(10,9)Rowvalues集合,Rowvalue对象,按行读取,要求将图层加入数据集[RowValues=]OBJECT.RowValues(Row)

RowVariant:FeatureID(integer),FeatureKey

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论