基于组件的GIS开发Visual Basic和MapObjects实现(终稿_第1页
基于组件的GIS开发Visual Basic和MapObjects实现(终稿_第2页
基于组件的GIS开发Visual Basic和MapObjects实现(终稿_第3页
基于组件的GIS开发Visual Basic和MapObjects实现(终稿_第4页
基于组件的GIS开发Visual Basic和MapObjects实现(终稿_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、基于组件的GIS开发Visual Basic和MapObjects实现一、MapObjects介绍1、 基于组件的GIS开发技术利用GIS支撑软件进行二次开发可以充分利用支撑软件所具有的强大功能,开发比较容易,但开发的系统要在支撑软件的环境中运行,系统往往比较庞大,相应成本也高,对某些地图和空间分析只是部分功能的系统来说,二次开发就不太适合。此外二次开发受到原有软件的限制,灵活性没有底层开发大。 基于上述原因,用户希望GIS支撑软件能组件化,在开发系统时,根据需要利用功能组件。为此,一些GIS公司相继开发了供开发人员使用的制图与GIS功能组件,如ESRI公司的MapObjects、MapInf

2、o公司的MapX等。2、MapObjects产品MapObjects简称MO,是ESRI公司开发的一组供开发人员使用的制图与GIS功能组件,目前的版本是2.2。它是建立在微软的对象链结和嵌入(ActiveX,原先称OLE)基础之上的。ActiveX是当今得到最广泛支持的面向目标的软件集成技术。用户象用砖块盖房子一样利用ActiveX 组件开发和集成Windows应用。 一个ActiveX控件是一个可重复使用的软件组件。ActiveX 控件可以将许多其他ActiveX 对象包装在一个包中。这个包可以反映某些特定的功能,如统计图和多媒体等,并可以直接嵌入支持ActiveX 的应用中。ActiveX

3、 对象具有特性和方法,可以通过对它们的编程来控制对象的外观、行为以及相互作用。MO目前使用的主要版本为2.0、2.1和2.2。MO2.0于1999年发布;MO2.1于2001年3月,增加了CAD、ArcSDE、StreetMap等文件格式的支持功能;MO2.2发布于2003年1月,主要增加直接读取GIF和TIFF文件等功能。MapObjects2.2由一个ActiveX 控件(Map控件)和46个可编程ActiveX对象(包括Map控件,可见的对象)所组成。MapObjects控件可以直接插入到许多标准开发环境的工具集中,包括VB、Delphi、Visual C+、Microsoft Acce

4、ss、Visual Foxpro等流行的程序设计环境。3、利用MapObjects可以实现的功能利用MapObjects,开发人员可以在熟悉和喜欢开发环境中开发出系统开销小的GIS系统,或在已有的系统中添加GIS功能。利用MapObjects,可以进行如下的操作: 1)显示具有多个图层的地图 2)地图的放大、缩小和漫游 3)增加点、线、圆和多边形等各种图形 4)增加文本 5)显示特征的属性 6)利用图形选择特征 7)利用邻近分析选择特征 8)利用SQL表达式选择特征 9)选择特征的统计 10)查询和更新选择特征的属性数据 11)各种专题制图 12)按字段的高程或测量值显示 13)按字段值对特征

5、进行标号 14)显示遥感图像 15)实时或时间序列数据的动态显示 16)地理编码 17)利用特征的测量值显示点和线事件 18)地图坐标转换 19)地图的空间操作 20)地图的旋转4、在Visual Basic下使用MapObjects 安装MapObjcts之后,打开Visual Basic的程序开发环境,在左边的控件面板上点击右键将弹出控件选择框,选择ERSI MapObjcts2.2,控件中将增加一个名叫Map的控件。如果要在应用程序中加入地图,则在控件栏中选择Map控件,利用该控件画一个图框用于显示地图。设置Map控件属性,包括所要显示的图层、显示顺序、每一图层的显示特性等(图11)。根

6、据需要增加其他控件,并利用MO提供的对象进行编程。图11 Map控件属性和图层属性设置程序运行界面如图12所示。图12 程序运行界面5、 利用MapObjects在线帮助和实例 在地图控件处于活动状态下,按F1将打开MapObjects在线帮助。MapObjects在线帮助含有每个对象、特性、方法、事件和变量的详细文档。学习MapObjects的最好方法是在在线帮助中利用编码例子。大多数帮助条目含有可以在VB工程中执行的例子。此外,MO还有许多实例,它们的Form设计和代码可以参考。二、MO对象 MO中有46个对象,可以划分成5个大类:数据操作对象类(10个)、地图显示对象类(17个)、投影对

7、象类(8个)、图形对象类(7个)和地址匹配对象类(4个)。1、数据操作对象类数据操作对象类中各个对象的关系如图21所示。通过定义DataConnection对象可以确定连接的数据库或文件目录。利用DataConnection对象的GeoDatasets属性可以得到图层数据的集合对象(GeoDatasets)。利用GeoDatasets的Item方法可以得到其中的一个图层文件。利用Layers集合的Add方法可以把图层文件增加到地图控件中,并作为一个MapLayer对象。利用MapLayer对象的Records属性可以得到Recordset对象。通过Recordset对象的Fields属性可以得

8、到Fields集合;通过Fields集合的Item方法可以得到其中的一个Field对象。通过Recordset对象的MoveFirst、MoveNext、MovePrevious方法可以对Recordset对象中的记录进行定位。DataConnection对象GeoDatasets集合GeoDataset对象Recordset对象Fields集合Field对象Statistics对象TableDesc对象Table对象Strings集合通过GeoDatasets属性通过Item方法通过Fields属性通过Item方法通过CalculateStatistics方法通过TableDesc属性通过R

9、ecords属性通过Database等属性与数据库或文件目录建立连接MapLayer对象通过GeoDataset属性通过Records属性图21 数据操作对象类中各个对象的关系2、地图显示对象类地图显示对象类中各个对象的关系如图22所示。Map Control上的图层包括MapLayer、ImageLayer和TrackingLayer。一个Map Control只有一个TrackingLayer。MapLayer和ImageLayer的集合所对应的对象为Layers。MapLayer有不同的显示方式,通过给MapLayer的Symbol属性赋值,使MapLayer以新的符号显示;通过给Map

10、Layer的Renderer属性赋值,使MapLayer以新的显示方式显示。LabelPlacer对象Symbol对象Map控件TextSymbol对象通过Layers属性Event Renderer对象Layers集合ZRenderer对象MapLayer对象Chart Renderer对象通过Item方法ImageLayer对象ClassBreaks Renderer对象通过TrackingLayers属性ValueMap Renderer对象GeoEvent对象TrackingLayer对象 DotDensity Renderer对象通过Event属性 Label Renderer对象

11、Group Renderer对象图22 地图显示对象类中各个对象的关系3、投影对象类投影对象类中各个对象的关系如图23所示。有两种类型坐标系;地理坐标系和投影坐标系。通过Prime-Meridian、Datum和Unit三个对象可以定义一个地理坐标系,其中,Datum包括Spheroid对象的定义。通过GeoCoord、SysProjCoordSys和Unit三个对象可以定义一个投影坐标系。Map控件和MapLayer对象有CoordinateSystem属性,该属性可以用GeoCoordSys对象或ProjCoordSys对象来赋值。同时GeoCoordSys对象和ProjCoordSys对

12、象又可以通过Type属性定义具体的坐标类型。MapLayer对象有GeographicTransformation属性,该属性可以用GeoTransformation对象来赋值, GeoTransformation对象有type属性用于定义坐标变换类型。GeoTransformation对象GeoCoordSys对象ProjCoordSys对象Projection对象Prime Meridian对象Datum对象Unit对象Spheroid对象Map控件MapLayer对象图23 投影对象类中各个对象的关系4、图形对象类图形对象类中各个对象的关系如图24所示通过Point对象的x、y属性可以定

13、义一个点。通过Points对象的Add方法可以把一个点增加到Points对象中。一个线对象和一个多边形对象可以是多个部分(Parts)组成,通过Parts属性可以得到Parts集合。Parts集合的Add方法可以把Points对象增加到Parts集合。Point对象Points对象Line对象Polygon对象Rectangle对象Ellipse对象通过Item方法Parts 集合通过Parts属性通过Add方法通过Bottom、Left、Top和Right四个属性可以定义一个Rectangle对象Ellipse对象图24 投影对象类中各个对象的关系5、地址匹配对象类 地址匹配对象类共有4个对

14、象(图25)。AddressLocation对象Standardizer对象Geocoder对象PlaceLocator对象图25 地址匹配对象类三、地图与图层操作在MO中,Map Control(地图控件)是一个载体,可以在地图控件上增加一个或多个图层。Mo支持三种类型图层:矢量图层、栅格图层和动态(Tracking)图层,所对应的对象分别为MapLayer、ImageLayer和TrackingLayer。矢量图层和栅格图层分别用于显示矢量数据和栅格数据,栅格图层和动态图层的集合所对应的对象为Layers(图层集合对象)。动态图层用于显示动态数据,如通过GPS采集到的车辆移动中的位置数据。

15、在TrackingLayer层显示的对象称为GeoEvent对象。当在窗体中增加一个地图控件时,就会有一个TrackingLayer层,这时,没有GeoEvent对象,GeoEvent对象的EventCount属性为0。1、 增加矢量图层矢量图层是和具体的数据相关联,要增加矢量图层,首先要确定(连接)对应的数据。连接的方法是利用DataConnection和GeoDataset两个对象。DataConnection对象表示与包含shapefiles的文件夹或包含SDE数据库的服务器的连接。如要连接到包含shapefiles的文件夹,把DataConnection对象的Database属性设置为

16、文件夹名(字符串,包括路径),然后应用Connect方法,如果返回值为True,表明连接成功。如要连接到SDE数据库,则需要设置数据库、口令、服务器和用户特性,然后应用Connect方法检查是否连接成功。如果连接成功,就可以利用FindGeoDataset方法把文件夹中的一个shapefile文件或SDE数据库中的一个层的数据赋给新创建图层的GeoDataset。接着,在图层集合中增加该图层。以下的代码显示在地图控件中增加矢量图层。Dim dConn As New MapObjects2.DataConnection Dim mLayer As New MapObjects2.MapLayer

17、 dConn.Database = c: Set mLayer.GeoDataset = dConn.FindGeoDataset(landuse) Map1.Layers.Add mLayer2、增加栅格图层增加图像文件相对简单,只要声明一个新的Imagelayer对象,利用Imagelayer对象的File属性确定对应的图像文件,再在图层集合对象中利用Add方法增加该Imagelayer对象。Dim iLayer As New ImageLayer iLayer.File = c:p1.jpg Map1.Layers.Add iLayer3、Tracking层的操作 利用AddEvent方

18、法可在Tracking层中增加一个新的GeoEvent对象:TrackingLayer.AddEvent(shape,SymbolIndex)Shape可以是点、线、多边形等图形对象,SymbolIndex是TrackingLayer符号列表中符号索引,0表示缺省符号。下面的代码将在Tracking层中增加一个新的GeoEvent对象。Dim pt As New MapObjects2.Pointpt.X = Rnd pt.Y = RndMap1.TrackingLayer.AddEvent pt, 0下面的代码将演示动态显示图形。1)利用Timer控件的Interval属性来控制执行操作的时

19、间间隔。Interval的单位为ms,即千分之一秒。Private Sub Form_Load() Timer1.Interval = 1000End Sub Private Sub Timer1_Timer() Dim pt As New MapObjects2.Point pt.X = Rnd pt.Y = Rnd Map1.TrackingLayer.AddEvent pt, 0End SubRnd函数返回0和1之间的随机数。如要清除前面的点,增加Map1.TrackingLayer.ClearEvents在窗体上设置两个按钮,可以启动和暂停动态显示。Private Sub Comman

20、d1_Click()Timer1.Enabled = TrueEnd SubPrivate Sub Command2_Click() Timer1.Enabled = FalseEnd Sub4、利用对话框选择需要增加的图层增加Visual Basic的CommonDialog控件(Microsoft Common Dialog Control 6.0)以便确定文件的路径和文件名。双击“增加图层”按钮进行编程。增加以下的Visual Basic语句。 Private Sub Command1_Click() Dim dc As New DataConnectionDim gs As GeoDa

21、tasetDim name As StringDim layer As New MapObjects2.MapLayer CommonDialog1.Filter = Shapefiles(*.shp)|*.shp CommonDialog1.ShowOpen dc.Database = CurDir Name = CommonDialog1.FileTitle Set gs = dc.FindGeoDataset(name) layer.GeoDataset = gs Map1.Layers.Add layer End Sub 执行程序,点击增加图层按钮,并选择所要显示的Shape文件,选择

22、的图层将显示在地图中。 CurDir(Drive),指定一个存在的驱动器。如果没有指定驱动器,或drive是零长度字符串(“”),则CurDir会返回当前驱动器的路径。 5、 利用图例操作图层在工程/部件下选中ESRI MapObjects Legend Control,图例控件将显示在控件栏中。利用图例控件在Form上画图例框架。1)利用legend1.setMapSource Map1使图例与相应的地图控件关联。2)当增加图层或删除图层时,利用legend1.LoadLegend True更新图例。3)当在图例上设置图层可见或不可见时,利用Map1.Refresh刷新地图。Private

23、Sub Form_Load() legend1.setMapSource Map1End SubPrivate Sub Map1_AfterLayerDraw(ByVal index As Integer, ByVal canceled As Boolean, ByVal hDC As stdole.OLE_HANDLE) legend1.LoadLegend TrueEnd SubPrivate Sub legend1_AfterSetLayerVisible(Index As Integer, isVisible As Boolean) Map1.RefreshEnd Sub 程序运行后,

24、在图例框架上将显示各个图层,通过拖动图层可以改变图层的显示顺序,点击图层的复选框可以设置图层是否可见。删除选中图层Dim n As Integer n = legend1.getActiveLayer Map1.Layers.Remove (n)四、坐标系1、控件坐标和地图坐标地图控件的坐标系与VB窗体的坐标系一样,原点在左上角,从左到右,x坐标逐渐增加;从上到下,y坐标逐渐增加。坐标的缺省单位为twip。当我们定义了一个地图控件,该控件的坐标范围将保持不变。地图坐标系是笛卡尔坐标系,从左到右,x坐标逐渐增加;从下到上,y坐标逐渐增加。地图控件的地图坐标范围不是固定的,随着地图的放大、缩小和漫

25、游发生变化。根据地图控件的坐标范围以及地图的坐标范围,我们可以对控件坐标和地图坐标进行转换。控件坐标转为地图坐标,利用ToMapPoint方法。地图坐标转为控件坐标,利用FromMapPoint方法。Dim mapx As SingleDim mapy As Single Text1.Text = x: & X & , & y: & Y mapx = Map1.ToMapPoint(X, Y).X mapy = Map1.ToMapPoint(X, Y).Y Text2.Text = mapx: & mapx & , & mapy: & mapy2、显示矢量图层的坐标系信息矢量图层的坐标系信息

26、保存在prj文件中,它记录坐标系类型(地理坐标或投影坐标)、Datum、单位等信息。利用MapLayer的CoordinateSystem属性可得到GeoCoordSys对象或ProjCoordSys对象,可通过返回对象的IsProjected属性来判断是GeoCoordSys对象还是ProjCoordSys对象。如是GeoCoordSys对象,通过该对象的Datum属性得到Datum对象,进一步可得到Datum的详细信息;同样可以得到Unit等其它属性的详细信息。如是ProjCoordSys对象,通过该对象的GeoCoordSys属性得到投影前的地理坐标系信息;利用Projection属性得

27、到有关的投影信息,同样可以得到其它属性的详细信息。下面的代码是在文本框中显示图层的相关坐标系信息。Dim ly As MapObjects2.MapLayerDim gcs As New MapObjects2.GeoCoordSysDim pcs As New MapObjects2.ProjCoordSys Set ly = Map1.Layers(0) If ly.CoordinateSystem.IsProjected Then Set pcs = ly.CoordinateSystem Text1.Text = 投影坐标系 Text2.Text = pcs.GeoCoordSys.D

28、atum.Name Text3.Text = pcs.Unit.Name Text4.Text = pcs.Projection.Name Else Set gcs = ly.CoordinateSystem Text1.Text = 地理坐标系 Text2.Text = gcs.Datum.Name Text3.Text = gcs.Unit.Name Text4.Text = End If3、改变Map控件的坐标系改变Map控件的坐标系将使控件中的地图以新的坐标系来显示。改变Map控件坐标系的方法是先定义一个坐标系对象(GeoCoordSys对象或ProjCoordSys对象),然后赋与M

29、ap控件的CoordinateSystem属性。下面的代码是把Map控件的坐标系改变成地理坐标系(图41)。Dim gcs As New MapObjects2.GeoCoordSys gcs.Type = moGeoCS_WGS1984 Map1.CoordinateSystem = gcs Text1.Text = 地理坐标系 Text2.Text = gcs.Datum.Name Text3.Text = gcs.Unit.Name Text4.Text = 下面的代码是把Map控件的坐标系改变成投影坐标系(图42)。Dim pcs As New MapObjects2.ProjCoor

30、dSys pcs.Type = moProjCS_World_WinkelII Map1.CoordinateSystem = pcs Text1.Text = 投影坐标系 Text2.Text = pcs.GeoCoordSys.Datum.Name Text3.Text = pcs.Unit.Name Text4.Text = pcs.Projection.Name图41 Map控件的坐标系改变成地理坐标系图42 Map控件的坐标系改变成投影坐标系五、地图显示范围操作1、 地图显示范围在Map控件上显示的地图范围可以通过Map控件的Extent属性来得到和设置。Map控件的“Extent”

31、属性返回rectangle对象,反映在Map控件中显示的地图范围,由Top(左上角y坐标)、Left(左上角x坐标)、Bottom(右下角y坐标)和Right(右下角x坐标)四个坐标值组成。通过“Extent”设置地图的显示范围,有如下几种方法:1) 通过坐标赋值设置地图范围With Map1.Extent .Left = 20000 .Bottom = 45000 .Right = 32000 .Top = 57000End With2)设置为所有图层的最大范围 Set Map1.Extent = Map1.FullExtent 3)对目前的范围乘以一个比例因子,改变范围的大小 Set Ma

32、p1.Extent = Map1.Extent.ScaleRectangle(.5)4)通过地图交互改变显示范围的位置(地图漫游) Set Map1.Extent = Map1.Pan5)使地图的中心点定位在某一位置 Set Map1.Extent = Map1.CenterAt(55000,65000)改变显示范围的大小实际上改变地图的显示比例尺。地图比例尺是Map控件的屏幕范围(长度或高度)与实际范围(长度或高度)的比值。在VB中,窗体的缺省单位是twips,是1英寸的1/1440。通过Map控件的Width和height属性可得到Map控件的宽度和高度(屏幕范围,单位是twips),通过

33、换算并与地图实际的宽度或高度比较即可得到地图比例尺(利用宽度或高度结果一致)。2、地图的放大、缩小和全图显示(按钮方式)地图的放大、缩小和全图显示实际上是改变地图的显示范围。在同一Map控件中,显示范围越大,则比例尺越小;反之,比例尺越大。即:地图放大是通过缩小地图范围;地图缩小是通过扩大地图范围。定义地图范围的Rectangle对象可以利用ScaleRectangle (ScaleFactor)方法来改变,如比例因子为2,则Rectangle的高度和宽度都乘以2,地图缩小1倍。如地图放大1倍,则比例因子为0.5。 在Form上增加三个按钮(command1、command2和command3

34、),功能分别为放大、缩小和全图。针对按钮的点击事件执行如下相应的程序。 Private Sub command1_Click() Set Rect = Map1.Extent Rect.ScaleRectangle (0.25) Map1.Extent = Rect End Sub Private Sub command2_Click() Set Rect = Map1.Extent Rect.ScaleRectangle (1.25) Map1.Extent = RectEnd Sub Private Sub command2_Click() Map1.Extent = Map1.FullE

35、xtentEnd Sub3、 地图的放大、缩小、漫游(工具方式)利用工具方式进行地图操作包括两个事件,第一个事件是工具栏上的按钮点击事件;第二个事件是Map控件上的操作事件(MouseDown事件)。对第一个事件的响应通常是改变鼠标指针的形状(表41),同时记录按钮的功能。Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Index Case 1 Map1.MousePointer = moZoomIn bfunction = zoomin Case 2 Map1.Mo

36、usePointer = moZoomOut bfunction = zoomout Case 3 Map1.MousePointer = moPan bfunction = pan End SelectEnd Sub表41 鼠标指针常数值描述MoDefault0Default cursor.MoArrow1ArrowMoCross2Cross hair.MoIbeam3I beam.moIconPointer4Icon. (Available on Windows NT only)MoSizePointer5SizeMoSizeNESW6Size NE, SWMoSizeNS7Size N,

37、 S.MoSizeNWSE8Size NW, SEMoSizeWE9Size W, EMoUpArrow10Up arrow.MoHourglass11HourglassMoNoDrop12No drop.moArrowHourglass13Arrow and hourglassmoArrowQuestion14Arrow and question markMoSizeAll15Size in all directionsMoZoom50ZoomMoZoomIn51Zoom inMoZoomOut52Zoom outMoPan53PanMoPanning54PanningMoIdentify5

38、5IdentifyMoLabel56LabelMoHotLink57Hot LinkMoPencil58Pencil对第二个事件的响应是根据点击按钮的功能(为了获得点击按钮的功能,需要在声明段中定义一个模块级变量),分别执行相应的代码。如是放大事件,则利用Map控件的TrackRectangle返回用户在地图上定义的Rectangle,并作为放大后地图的范围;如是缩小事件,则根据定义的Rectangle大小确定比例,即地图控件高度(或宽度)与用户定义的Rectangle高度(或宽度)之比,Rectangle越小,缩小的比例越大;如是漫游功能,则利用Map控件的Pan方法。Private Sub

39、 Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case bfunction Case zoomin Set r = Map1.TrackRectangle Map1.Extent = r Case zoomout Set r = Map1.TrackRectangle r.ScaleRectangle (Map1.Extent.Width / r.Width) Map1.Extent = r Case pan Map1.Pan End SelectEnd Sub当r.W

40、idth = 0(即鼠标点击时),程序将出错。为了避免出错,对r.Width是否为0进行判断,如不为0, 把r.Width赋给一个变量rw,如r.Width为0,则把目前地图宽度Map1.Extent.Width赋给变量rw,即鼠标点击后,图层不发生变化。六、几何图形对象在MO中,定义了7个图形对象:Point,Points,Line,Polygon,Rectangle,Ellipse和Parts。Point对象表示一个点,通过X、Y、Z属性可以获得点的坐标,也可以产生一个点; Point对象还提供了计算到点、线、多边形和矩阵之间距离的方法DistanceTo,计算与其他地理对象的交点的方法G

41、etCrossings。Points对象是点对象的集合,通过Add方法可以把一个新的点增加到Points对象中。Line对象至少有两个点,一个线对象可以一条线,也可以是多条线,利用Parts属性可以获得线的集合。Polygon,Rectangle,Ellipse都是广义上的多边形对象,一个多边形对象可以由多个多边形对象组成,利用Parts属性可以获得多边形的集合。Parts对象是Points对象的集合,每一个Points对象表示了组成一条线或一个多边形的顶点。图形对象只能增加到TrackingLayer中,利用AddEvent方法可以把图形对象增加到TrackingLayer中。 Map1.T

42、rackingLayer.AddEvent(shape, SymbolIndex)1、 在程序中产生图形1.1产生点Dim pt As New MapObjects2.Pointpt.X = 0.5pt.Y = 0.51.2 产生线Dim pt As New MapObjects2.PointDim pts As New MapObjects2.PointsDim ln As New MapObjects2.Linept.X = 0.2pt.Y = 0.7pts.Add ptpt.X = 0.6pt.Y = 0.5pts.Add ptln.Parts.Add pts1.3产生多边形(多Part

43、)Dim pt As New MapObjects2.PointDim pts1 As New MapObjects2.Points Dim pts2 As New MapObjects2.Points Dim poly As New MapObjects2.Polygon pt.X = 0.7: pt.Y = 0.15: pts1.Add pt pt.X = 0.4: pt.Y = 0.55: pts1.Add pt pt.X = 0.3: pt.Y = 0.3: pts1.Add pt poly.Parts.Add pts1 pt.X = 0.7: pt.Y = 0.15: pts2.Ad

44、d pt pt.X = 0.1: pt.Y = 0.55: pts2.Add pt pt.X = 0.05: pt.Y = 0.3: pts2.Add pt poly.Parts.Add pts2 Map1.TrackingLayer.AddEvent poly, 01.4 产生矩形矩形有Bottom、Top、Left、Right、Height、Width、Depth、Center等属性。利用Bottom、Top、Left、Right值可以构建一个矩形。Dim rect as New MapObjects2.Rectanglerect.Bottom = 0.1: rect.Left = 0.1

45、rect.Top = 0.6: rect.Right = 0.6Map1.TrackingLayer.AddEvent rect, 01.5产生椭圆椭圆同样有Bottom、Top、Left、Right、Height、Width、Center等属性。利用Bottom、Top、Left、Right值可以构建一个椭圆。Dim ellipse As New MapObjects2.ellipseellipse.Bottom = 0.1: ellipse.Left = 0.1ellipse.Top = 0.6: ellipse.Right = 0.9Map1.TrackingLayer.AddEvent

46、 ellipse, 02、 利用鼠标在地图控件上产生图形可以利用鼠标在地图控件上产生点、线、圆、多边形和矩形。语法如下:Set shape = Map1.ToMapPoint(x, y)Set shape = Map1.TrackLineSet shape = Map1.TrackCircleSet shape = Map1.TrackPolygonSet shape = Map1.TrackRectangle执行语句时,用户可以在地图控件上数字化点(或线、圆、多边形、矩形),同时返回一个图形对象(数字化结果)。Select Case bfunctioncase drawpointDim pt

47、 As New MapObjects2.PointSet pt = Map1.ToMapPoint(X, Y)Map1.TrackingLayer.AddEvent pt, 0case drawlineDim line As New MapObjects2.lineSet line = Map1.TrackLineMap1.TrackingLayer.AddEvent line, 0case drawpolygonDim poly As New MapObjects2.PolygonSet poly = Map1.TrackPolygonMap1.TrackingLayer.AddEvent

48、poly,0End Select3、图形对象操作图形操作包括图形的交、并、差、异或以及缓冲等操作,这些操作的语法如下:1) 交操作 Set resultShape = object.Intersect(secondShape ,extent)2) 并操作 Set resultShape = object.Union(secondShape ,extent)3) 差操作 Set resultShape = object.Difference(secondShape ,extent)4) 异或操作Set resultShape = object.Xor(secondShape ,extent)5)

49、 缓冲操作 Set resultShape = object.Buffer(bufferDistance ,extent)其中,extent是一个可选参数,表示一个矩阵范围。以下的例子是对动态图层上的两个多边形进行交操作,并显示交操作得到的图形(图61)。Set poly1 = Map1.TrackingLayer.Event(0).Shape Set poly2 = Map1.TrackingLayer.Event(1).Shape Set resultshape = poly1.Intersect(poly2) Map1.TrackingLayer.ClearEvents Set ge =

50、 Map1.TrackingLayer.AddEvent(resultshape, 0) 图61 交操作七 地图表示 当我们在地图控件上增加一个图层时,该图层的所有要素以一种缺省的符号进行显示。一方面,我们可以改变显示的符号,另一方面我们可以对图层中的不同要素以不同的符号进行显示(专题制图)。1、 显示符号在MO中,Symbol是一个符号对象,它有SymbolType(符号类型)、Style(样式)、Color(颜色)、Size(尺寸)等属性。符号类型包括点(Point)、线(Line)和多边形(Fill),不同类型的符号可以设置的属性是不一样的,如轮廓线颜色只能对多边形符号进行设置。 Sty

51、le是指符号的样式,点、线和多边形三种类型符号分别有相应的样式集合(图71,图72,图73)。 图71点符号样式集合图72 线符号样式集合图73填充符号样式集合利用符号对象的Custom特性可以产生定制的点、线和填充符号。每一符号可以用不同颜色显示,颜色的定义有几种方法:利用VB颜色常数,如vbBlue,或利用MO颜色常数,如moRed。MapObjects定义了如下23种颜色常量:MoBlack,MoRed,MoGreen,moBlue,moMagenta,moCyan,moWhite,moLightGray,moDarkGray,moGray,moPaleYellow,molightYel

52、low,moyellow,moLimeGreen,moTeal,moDarkGreen,moMaroon,moPurple,moOrange,moKhaki,moOlive,moBrown,moNavy。对点符号,还可以设置符号尺寸、旋转等属性。对线符号,还可以设置线的宽度等属性。对填充符号,还可以设置多边形轮廓线的宽度、颜色等属性。利用符号对象的Custom特性可以产生定制的点、线和填充符号。 改变图层的显示符号,首先是得到图层的符号对象,然后对符号对象的属性进行赋值,地图刷新后,即以新的符号显示。下面的代码是改变MapLayer的符号为moRed。Dim ly As MapObjects2

53、.MapLayer Set ly = Map1.Layers(0)Ly.Symbol.Color = moRedMap1.Refresh如要改变符号的多个属性,可利用With语句定义 With ly.Symbol .Style = 2 .Color = moRed .Size = 20 End With2、 利用图例改变地图显示符号包括两个过程,首先是点击图例中的一个图层,打开符号编辑窗口;然后在符号编辑窗口中设置符号属性,确认后,该图层以新的符号显示。点、线、多边形三种类型图层分别用Point、Line和Fill三种符号表示。这三种符号可以设置的属性是不一样的,针对不同类型的图层,在符号编辑窗口中显示不同的界面(图)。 对话框包括五个Label控件、一个PictureBox控件、三个组合框控件、一

温馨提示

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

评论

0/150

提交评论