1、地理信息系统设计与开发实验指导书地理信息系统设计与开发实验指导书(黑体,小3号)课程编号:地理信息系统设计与开发课程英文名称:Design and Development of Geographic Information System学时数: 36 学分数:3适用层次和专业: 地理信息系统及测绘工程本科 实验一 安装MO和VB1.实验目的 学习安装MO学习安装VB6熟悉VB6开发环境2.实验内容安装VB6.0安装MO2.3或更高版本在VB窗体中添加MO组件为MO组件添加数据china.shp实验二 视图缩放和全图操作1.实验目的 掌握MO控件的一般使用方式2.实验内容添加地图控件,通过设置地
2、图控件的属性添加数据在窗体上增加一个按钮,双击这个按钮,在代码窗口中输入以下代码Private Sub Command1_Click() Set Map1.Extent = Map1.FullExtentEnd Sub双击地图控件为他的事件 MouseDown 增加以下代码Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then Set Map1.Extent = Map1.TrackRectangle End I
3、fEnd Sub进一步操作PopUp Menu(右键菜单)使用菜单编辑器生成一个右键菜单Popup1,为Popup1建立以下几个子菜单项“显示全图”“放大”“缩小”编写代码实现“显示全图”的功能;Private Sub pop1Full_Click() Map1.Extent = Map1.FullExtentEnd Sub修改Mouse事件中的代码,显示右键菜单Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = vbLeftButton The
4、n Set Map1.Extent = Map1.TrackRectangleElse: Button = vbRightButton PopupMenu pop1 End IfEnd Sub进一步操作:工具栏ToolBar在窗体上放置ImageList控件设置ImageList1的属性,增加图片 ZoomIn.bmp;ZoomOut.bmp;Pan.bmp;Globe.bmp(这些文件在光盘目录BitMaps下)在窗体上放置ToolBar控件设置ToolBar1的属性,将ToolBar1的图像列表设置为ImageList1;增加按钮ZoomIn,ZoomOut,Pan,设置样式为2-tbrB
5、uttonGroup,并设置相应的显示图片;增加第4个按钮设置样式为4-tbrPlaceholder;增加第5个按钮btnFullExtent设置图片为Globe.bmp注意:VB控件库 Microsoft Windows Common Controls 6.0 中包含ToolBar 和ImageList控件实验三 动态加载图层1.实验目的 掌握CommandDialog 组件添加图层的方法练习VB中添加按钮的一般方法2.实验内容导入CommandDialog 组件,这一组件在对象库Microsoft Common Dialog Control 6.0 中。添加Map控件,Conmon Dia
6、log 控件,并将其名称改为cDlg1,添加一个按钮.程序代码:Private Sub Command1_Click() Dim shpLayer As New MapObjects2.MapLayer Dim DC As New MapObjects2.DataConnection Dim gds As MapObjects2.GeoDataset Dim FName As String cDlg1.Filter = ESRI Shape文件(*.shp)|*.shp cDlg1.CancelError = True On Error GoTo eTrap cDlg1.ShowOpen If
7、 Len(cDlg1.FileName) = 0 Then Exit Sub DC.Database = CurDir If Not DC.Connect Then Exit Sub FName = Left(cDlg1.FileTitle, Len(cDlg1.FileTitle) - 4) Set gds = DC.FindGeoDataset(FName) If gds Is Nothing Then Exit Sub Set shpLayer.GeoDataset = gds Map1.Layers.Add shpLayer Exit Sub eTrap: If Err.Number
8、cdlCancel Then MsgBox Err.Description, vbCritical End If End Sub实验四 调整图层顺序1.实验目的 掌握在MO当中如何调整图层顺序2.实验内容置顶当前图层Private Sub lstLayers_DblClick() Dim lyr As MapObjects2.MapLayer If lstLayers.ListIndex -1 Then Map1.Layers.MoveToTop lstLayers.ListIndex Map1.Refresh lstLayers.Clear For Each lyr In Map1.Laye
9、rs lstLayers.AddItem lyr.Name Next lyr End IfEnd Sub上移图层Private Sub Command2_Click() Dim i As Integer Dim lyr As MapObjects2.MapLayer If lstLayers.ListIndex -1 And lstLayers.ListIndex 0 Then i = lstLayers.ListIndex - 1 Map1.Layers.MoveTo lstLayers.ListIndex, i Map1.Refresh lstLayers.Clear For Each l
10、yr In Map1.Layers lstLayers.AddItem lyr.Name Next lyr lstLayers.Selected(i) = True End IfEnd Sub下移图层Private Sub Command4_Click() Dim i As Integer Dim lyr As MapObjects2.MapLayer If lstLayers.ListIndex -1 And lstLayers.ListIndex lstLayers.ListCount - 1 Then i = lstLayers.ListIndex + 1 Map1.Layers.Mov
11、eTo lstLayers.ListIndex, i Map1.Refresh lstLayers.Clear For Each lyr In Map1.Layers lstLayers.AddItem lyr.Name Next lyr lstLayers.Selected(i) = True End IfEnd Sub实验五 取消图层调入和动态跟踪层1.实验目的 掌握取消图层调入掌握动态跟踪层的使用2.实验内容取消图层调入,运行时设置Map.CancelAction = moCancelMap添加一个command1按钮。增加事件Command1_Click()。添加在运行时添加图层的代码
12、添加事件Map1_DrawingCanceled()Private Sub Map1_DrawingCanceled() MsgBox the layer(or layers) has been canceled!End SubTrackingLayer动态跟踪Dim pt As New MapObjects2.Point convert the point to map coordinatesSet pt = Map1.ToMapPoint(X, Y) add a new eventMap1.TrackingLayer.AddEvent pt, symIndex实验六 缓冲区1.实验目的 掌
13、握使用缓冲区功能2.实验内容Private Sub Form_Load()Map1.TrackingLayer.SymbolCount = 2With Map1.TrackingLayer.Symbol(0).SymbolType = moPointSymbol.Style = moCircleMarker.Color = moRed.Size = 3End WithWith Map1.TrackingLayer.Symbol(1).SymbolType = moFillSymbol.Style = moGrayFill.Color = moRed.OutlineColor = moRedEn
14、d WithEnd SubPrivate Sub Map1_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE)Dim sym1 As New MapObjects2.Symbolsym1.SymbolType = moFillSymbolsym1.Style = moTransparentFillsym1.OutlineColor = moBlackMap1.DrawShape Map1.FullExtent, sym1End Sub查看各顶点的M属性 地图数据:ynroadsm.shpDim line As New MapObject
15、s2.lineDim recs As New MapObjects2.RecordsetDim recCount As IntegerDim i As IntegerList1.ClearSet recs = Map1.Layers(0).RecordsrecCount = recs.CountFor i = 0 To recCount - 1List1.AddItem 线段: & i + 1Set line = recs(Shape).ValueoutputMeasures lineNext iPrivate Sub outputMeasures(aLine As MapObjects2.l
16、ine)Dim itemCount As IntegerDim partLine As MapObjects2.PointsDim i As IntegerFor Each partLine In aLine.PartsFor i = 0 To partLine.Count - 1 Step 1No of vertices in totalitemCount = itemCount + 1With partLine.Item(i)List1.AddItem Item: & i & , & itemCount & Chr(9) & X: & Format(.X,#.00) & Chr(9) &
17、Y: & Format(.Y, #.00) & Chr(9) & M: & Format(.Measure,#.00)End WithNext iNext partLineEnd Sub实验七 控件坐标和地图坐标1.实验目的 掌握控件坐标和地图坐标转化的一般方法学习地图距离获取的一般方法2.实验内容1. 控件坐标与地图坐标添加数据Chinaprj.shpPrivate Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Form1.RefreshForm1.CurrentX = 0Fo
18、rm1.CurrentY = 200Print 当前鼠标坐标 X: & X & vbTab & vbTab & Y: & YPrintDim pt As MapObjects2.PointSet pt = Map1.ToMapPoint(X, Y)Print 当前地图坐标 X: & pt.X & vbTab & Y: & pt.YPrintPrint Map1.Height & vbTab & vbTab & Map1.WidthEnd Sub2. 控件距离与地图距离Private Sub Map1_MouseDown(Button As Integer, Shift As Integer,
19、X As Single, Y As Single)Dim mypl As New MapObjects2.LineSet mypl = Map1.TrackLineMap1.TrackingLayer.AddEvent mypl, 0Print 地图距离为: & mypl.LengthPrint 控件距离为: & Map1.FromMapDistance(mypl.Length)End Sub3. Projection China.shpPrivate Sub Command1_Click()Dim mycs As New MapObjects2.GeoCoordSysmycs.Type =
20、moGeoCS_Beijing1954Dim mypjcs As New MapObjects2.ProjCoordSysmypjcs.Type = moProjCS_Beijing1954GK_13Set Map1.Layers(0).CoordinateSystem = mycsSet Map1.CoordinateSystem = mypjcsEnd SubPrivate Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Dim mypt As MapObjects2.Poin
21、tSet mypt = Map1.ToMapPoint(X, Y)Text1.Text = X is & mypt.X & Y is & mypt.YEnd Sub实验八 地图投影1.实验目的 掌握如何判断地图是否投影掌握如何更改地图投影2.实验内容判断有没有投影添加数据 china 和 chinaprj 调整顺序观察结果Private Sub Command1_Click()Dim mycorsys As ObjectDim mymaplayer As MapObjects2.MapLayerSet mymaplayer = Map1.Layers(0)Set mycorsys = myma
22、player.CoordinateSystemIf mycorsys Is Nothing Then MsgBox 图形为地理坐标系 或 地图参数未设置Else If mycorsys.IsProjected Then MsgBox 图形为投影坐标系 Print mymaplayer.CoordinateSystem.Type Print mymaplayer.CoordinateSystem.Name Print mymaplayer.CoordinateSystem.ReturnDescription Text1.Text = mymaplayer.CoordinateSystem.Ret
23、urnDescription End IfEnd IfEnd Sub2更改投影 添加数据 country 和 world30Private Sub Command1_Click()Dim CSMap As New MapObjects2.ProjCoordSysCSMap.Type = moProjCS_World_WinkelIDim CSMapLayer As New MapObjects2.GeoCoordSysCSMapLayer.Type = moGeoCS_WGS1984Set Map1.Layers(0).CoordinateSystem = CSMapLayerSet Map1
24、.Layers(1).CoordinateSystem = CSMapLayerSet Map1.CoordinateSystem = CSMapMap1.Extent = Map1.FullExtentEnd SubPrivate Sub Command2_Click()Dim CSMap As New MapObjects2.GeoCoordSysCSMap.Type = moGeoCS_WGS1984Set Map1.CoordinateSystem = CSMapMap1.Extent = Map1.FullExtentEnd SubPrivate Sub Command3_Click
25、()Dim CSMap As New MapObjects2.ProjCoordSysCSMap.Type = moProjCS_World_RobinsonSet Map1.CoordinateSystem = CSMapMap1.Extent = Map1.FullExtentEnd Sub3.投影转换,坐标转换第一个图添加数据 country world30 china 第二个图添加数据chinaDim myGT As New MapObjects2.GeoTransformationDim gcsBJ54 As New MapObjects2.GeoCoordSysDim myprjB
26、J54 As New MapObjects2.ProjCoordSysDim gcsWGS84 As New MapObjects2.GeoCoordSysDim myPt1, myPt2 As New MapObjects2.PointPrivate Sub Form_Load()begin some pre declear myprjBJ54.Type = moProjCS_Beijing1954GK_17 gcsBJ54.Type = moGeoCS_Beijing1954 gcsWGS84.Type = moGeoCS_WGS1984 Set myGT.FromGeoCoordSys
27、= gcsBJ54 Set myGT.ToGeoCoordSys = gcsWGS84 myGT.Direction = moDirection_Forward myGT.Name = BJ54_To_WGS1984 myGT.Method = moMethod_PositionVector myGT.SetParameter moParm_DeltaX, 24 myGT.SetParameter moParm_DeltaY, -123 myGT.SetParameter moParm_DeltaZ, -94 myGT.SetParameter moParm_RotationX, -0.02
28、myGT.SetParameter moParm_RotationY, -0.25 myGT.SetParameter moParm_RotationZ, -0.13 myGT.SetParameter moParm_DeltaScale, 1begin map1Set Map1.Layers(0).CoordinateSystem = gcsWGS84Set Map1.Layers(1).CoordinateSystem = gcsWGS84Set Map1.Layers(2).CoordinateSystem = gcsWGS84If Map1.CoordinateSystem Is No
29、thing Then Set Map1.CoordinateSystem = gcsWGS84End Ifbegin map2Set Map2.Layers(0).CoordinateSystem = gcsWGS84If Map2.CoordinateSystem Is Nothing Then Set Map2.CoordinateSystem = myprjBJ54End IfEnd SubPrivate Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Set myPt1 =
30、 Map1.ToMapPoint(X, Y)Map1.TrackingLayer.AddEvent myPt1, 0Set myPt2 = Map2.CoordinateSystem.Transform(Map1.CoordinateSystem, myPt1, , myGT)Map2.TrackingLayer.AddEvent myPt2, 0Print myPt1.X & ; myPt1.YPrint myPt2.X & ; myPt2.YEnd Sub实验九 文件状态的查询1.实验目的 掌握文件状态的查询的一般方法2.实验内容1. 显示文件状态、复习动态加载数据加载数据world30,拷贝china到程序运行目录Private Sub Command1_Click()Dim myrcs As New MapObjects2.RecordsetDim mygeods As New MapObjects2.GeoDatasetDim mydc As New MapObjects2.DataConnectionmydc.Databas
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1