mo+vb开发 doc(3)

2020-02-20 17:56

个坐标值组成。

通过“Extent”设置地图的显示范围,有如下几种方法: 1) 通过坐标赋值设置地图范围

With Map1.Extent .Left = 20000 .Bottom = 45000 .Right = 32000

.Top = 57000 End With

2)设置为所有图层的最大范围

Set Map1.Extent = Map1.FullExtent

3)对目前的范围乘以一个比例因子,改变范围的大小 Set Map1.Extent = Map1.Extent.ScaleRectangle(.5) 4)通过地图交互改变显示范围的位置(地图漫游) Set Map1.Extent = Map1.Pan

5)使地图的中心点定位在某一位置

Set Map1.Extent = Map1.CenterAt(55000,65000)

改变显示范围的大小实际上改变地图的显示比例尺。地图比例尺是Map控件的屏幕范围(长度或高度)与实际范围(长度或高度)的比值。在VB中,窗体的缺省单位是twips,是1英寸的1/1440。通过Map控件的Width和height属性可得到Map控件的宽度和高度(屏幕范围,单位是twips),通过换算并与地图实际的宽度或高度比较即可得到地图比例尺(利用宽度或高度结果一致)。

2、地图的放大、缩小和全图显示(按钮方式)

地图的放大、缩小和全图显示实际上是改变地图的显示范围。在同一Map控件中,显示范围越大,则比例尺越小;反之,比例尺越大。即:地图放大是通过缩小地图范围;地图缩小是通过扩大地图范围。

定义地图范围的Rectangle对象可以利用ScaleRectangle (ScaleFactor)方法来改变,如比例因子为2,则Rectangle的高度和宽度都乘以2,地图缩小1倍。如地图放大1倍,则比例因子为0.5。

在Form上增加三个按钮(command1、command2和command3),功能分别为放大、缩小和全图。针对按钮的点击事件执行如下相应的程序。 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 = Rect

End Sub

Private Sub command2_Click()

Map1.Extent = Map1.FullExtent

End Sub

3、 地图的放大、缩小、漫游(工具方式)

利用工具方式进行地图操作包括两个事件,第一个事件是工具栏上的按钮点击事件;第二个事件是Map控件上的操作事件(MouseDown事件)。

对第一个事件的响应通常是改变鼠标指针的形状(表4—1),同时记录按钮的功能。

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Index

Case 1

Map1.MousePointer = moZoomIn bfunction = \ Case 2

Map1.MousePointer = moZoomOut bfunction = \ Case 3

Map1.MousePointer = moPan bfunction = \ End Select End Sub

表4—1 鼠标指针

常数 MoDefault MoArrow MoCross MoIbeam moIconPointer MoSizePointer MoSizeNESW MoSizeNS MoSizeNWSE MoSizeWE MoUpArrow MoHourglass MoNoDrop moArrowHourglass moArrowQuestion MoSizeAll MoZoom MoZoomIn MoZoomOut MoPan MoPanning MoIdentify MoLabel MoHotLink MoPencil 值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 50 51 52 53 54 55 56 57 58 描述 Default cursor. Arrow Cross hair. I beam. Icon. (Available on Windows NT only) Size Size NE, SW Size N, S. Size NW, SE Size W, E Up arrow. Hourglass No drop. Arrow and hourglass Arrow and question mark Size in all directions Zoom Zoom in Zoom out Pan Panning Identify Label Hot Link Pencil

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

Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case bfunction Case \

Set r = Map1.TrackRectangle Map1.Extent = r

Case \

Set r = Map1.TrackRectangle

r.ScaleRectangle (Map1.Extent.Width / r.Width) Map1.Extent = r Case \ Map1.Pan End Select End Sub

当r.Width = 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,计算与其他地理对象的交点的方法GetCrossings。

Points对象是点对象的集合,通过Add方法可以把一个新的点增加到Points对象中。 Line对象至少有两个点,一个线对象可以一条线,也可以是多条线,利用Parts属性可以获得线的集合。

Polygon,Rectangle,Ellipse都是广义上的多边形对象,一个多边形对象可以由多个多边形对象组成,利用Parts属性可以获得多边形的集合。

Parts对象是Points对象的集合,每一个Points对象表示了组成一条线或一个多边形的顶点。

图形对象只能增加到TrackingLayer中,利用AddEvent方法可以把图形对象增加到TrackingLayer中。

Map1.TrackingLayer.AddEvent(shape, SymbolIndex) 1、 在程序中产生图形 1.1产生点

Dim pt As New MapObjects2.Point

pt.X = 0.5 pt.Y = 0.5 1.2 产生线

Dim pt As New MapObjects2.Point Dim pts As New MapObjects2.Points Dim ln As New MapObjects2.Line pt.X = 0.2 pt.Y = 0.7 pts.Add pt pt.X = 0.6 pt.Y = 0.5 pts.Add pt

ln.Parts.Add pts

1.3产生多边形(多Part)

Dim pt As New MapObjects2.Point Dim 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.Add 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, 0 1.4 产生矩形

矩形有Bottom、Top、Left、Right、Height、Width、Depth、Center等属性。利用Bottom、Top、Left、Right值可以构建一个矩形。

Dim rect as New MapObjects2.Rectangle rect.Bottom = 0.1: rect.Left = 0.1

rect.Top = 0.6: rect.Right = 0.6

Map1.TrackingLayer.AddEvent rect, 0

1.5产生椭圆

椭圆同样有Bottom、Top、Left、Right、Height、Width、Center等属性。利用Bottom、Top、Left、Right值可以构建一个椭圆。

Dim ellipse As New MapObjects2.ellipse ellipse.Bottom = 0.1: ellipse.Left = 0.1 ellipse.Top = 0.6: ellipse.Right = 0.9

Map1.TrackingLayer.AddEvent ellipse, 0

2、 利用鼠标在地图控件上产生图形

可以利用鼠标在地图控件上产生点、线、圆、多边形和矩形。语法如下:

Set shape = Map1.ToMapPoint(x, y)

Set shape = Map1.TrackLine

Set shape = Map1.TrackCircle Set shape = Map1.TrackPolygon Set shape = Map1.TrackRectangle

执行语句时,用户可以在地图控件上数字化点(或线、圆、多边形、矩形),同时返回一个图形对象(数字化结果)。

Select Case bfunction

case \

Dim pt As New MapObjects2.Point Set pt = Map1.ToMapPoint(X, Y) Map1.TrackingLayer.AddEvent pt, 0 case \

Dim line As New MapObjects2.line Set line = Map1.TrackLine

Map1.TrackingLayer.AddEvent line, 0 case \

Dim poly As New MapObjects2.Polygon Set poly = Map1.TrackPolygon Map1.TrackingLayer.AddEvent poly,0 End Select

3、图形对象操作

图形操作包括图形的交、并、差、异或以及缓冲等操作,这些操作的语法如下:

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) 缓冲操作 Set resultShape = object.Buffer(bufferDistance [,extent])

其中,extent是一个可选参数,表示一个矩阵范围。

以下的例子是对动态图层上的两个多边形进行交操作,并显示交操作得到的图形(图6—1)。

Set poly1 = Map1.TrackingLayer.Event(0).Shape

Set poly2 = Map1.TrackingLayer.Event(1).Shape Set resultshape = poly1.Intersect(poly2) Map1.TrackingLayer.ClearEvents

Set ge = Map1.TrackingLayer.AddEvent(resultshape, 0)


mo+vb开发 doc(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:青岛版数学一年级上册第六单元过关检测卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: