《地理信息系统设计与开发》实验指导书.docx
- 文档编号:29031911
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:38
- 大小:260.88KB
《地理信息系统设计与开发》实验指导书.docx
《《地理信息系统设计与开发》实验指导书.docx》由会员分享,可在线阅读,更多相关《《地理信息系统设计与开发》实验指导书.docx(38页珍藏版)》请在冰豆网上搜索。
《地理信息系统设计与开发》实验指导书
《地理信息系统设计与开发》实验指导书(黑体,小3号)
课程编号:
地理信息系统设计与开发
课程英文名称:
DesignandDevelopmentofGeographicInformationSystem
学时数:
36学分数:
3
适用层次和专业:
地理信息系统及测绘工程本科
实验一安装MO和VB
1.实验目的
学习安装MO
学习安装VB6
熟悉VB6开发环境
2.实验内容
安装VB6.0
安装MO2.3或更高版本
在VB窗体中添加MO组件
为MO组件添加数据china.shp
实验二视图缩放和全图操作
1.实验目的
掌握MO控件的一般使用方式
2.实验内容
添加地图控件,通过设置地图控件的属性添加数据
在窗体上增加一个按钮,双击这个按钮,在代码窗口中输入以下代码
PrivateSubCommand1_Click()
SetMap1.Extent=Map1.FullExtent
EndSub
双击地图控件为他的事件MouseDown增加以下代码
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=vbLeftButtonThen
SetMap1.Extent=Map1.TrackRectangle
EndIf
EndSub
进一步操作PopUpMenu(右键菜单)
使用菜单编辑器生成一个右键菜单Popup1,为Popup1建立以下几个子菜单项“显示全图”“放大”“缩小”编写代码实现“显示全图”的功能;
PrivateSubpop1Full_Click()
Map1.Extent=Map1.FullExtent
EndSub
修改Mouse事件中的代码,显示右键菜单
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=vbLeftButtonThen
SetMap1.Extent=Map1.TrackRectangle
Else:
Button=vbRightButton
PopupMenupop1
EndIf
EndSub
进一步操作:
工具栏ToolBar
在窗体上放置ImageList控件
设置ImageList1的属性,增加图片ZoomIn.bmp;ZoomOut.bmp;Pan.bmp;Globe.bmp(这些文件在光盘目录BitMaps下)
在窗体上放置ToolBar控件
设置ToolBar1的属性,将ToolBar1的图像列表设置为ImageList1;增加按钮ZoomIn,ZoomOut,Pan,设置样式为2-tbrButtonGroup,并设置相应的显示图片;增加第4个按钮设置样式为4-tbrPlaceholder;增加第5个按钮btnFullExtent设置图片为Globe.bmp
注意:
VB控件库MicrosoftWindowsCommonControls6.0中包含ToolBar和ImageList控件
实验三动态加载图层
1.实验目的
掌握CommandDialog组件添加图层的方法
练习VB中添加按钮的一般方法
2.实验内容
导入CommandDialog组件,这一组件在对象库MicrosoftCommonDialogControl6.0中。
添加Map控件,ConmonDialog控件,并将其名称改为cDlg1,添加一个按钮.
程序代码:
PrivateSubCommand1_Click()
DimshpLayerAsNewMapObjects2.MapLayer
DimDCAsNewMapObjects2.DataConnection
DimgdsAsMapObjects2.GeoDataset
DimFNameAsString
cDlg1.Filter="ESRIShape文件(*.shp)|*.shp"
cDlg1.CancelError=True
OnErrorGoToeTrap
cDlg1.ShowOpen
IfLen(cDlg1.FileName)=0ThenExitSub
DC.Database=CurDir
IfNotDC.ConnectThenExitSub
FName=Left(cDlg1.FileTitle,Len(cDlg1.FileTitle)-4)
Setgds=DC.FindGeoDataset(FName)
IfgdsIsNothingThenExitSub
SetshpLayer.GeoDataset=gds
Map1.Layers.AddshpLayer
ExitSub
eTrap:
IfErr.Number<>cdlCancelThen
MsgBoxErr.Description,vbCritical
EndIf
EndSub
实验四调整图层顺序
1.实验目的
掌握在MO当中如何调整图层顺序
2.实验内容
‘置顶当前图层
PrivateSublstLayers_DblClick()
DimlyrAsMapObjects2.MapLayer
IflstLayers.ListIndex<>-1Then
Map1.Layers.MoveToToplstLayers.ListIndex
Map1.Refresh
lstLayers.Clear
ForEachlyrInMap1.Layers
lstLayers.AddItemlyr.Name
Nextlyr
EndIf
EndSub
‘上移图层
PrivateSubCommand2_Click()
DimiAsInteger
DimlyrAsMapObjects2.MapLayer
IflstLayers.ListIndex<>-1AndlstLayers.ListIndex>0Then
i=lstLayers.ListIndex-1
Map1.Layers.MoveTolstLayers.ListIndex,i
Map1.Refresh
lstLayers.Clear
ForEachlyrInMap1.Layers
lstLayers.AddItemlyr.Name
Nextlyr
lstLayers.Selected(i)=True
EndIf
EndSub
‘下移图层
PrivateSubCommand4_Click()
DimiAsInteger
DimlyrAsMapObjects2.MapLayer
IflstLayers.ListIndex<>-1AndlstLayers.ListIndex i=lstLayers.ListIndex+1 Map1.Layers.MoveTolstLayers.ListIndex,i Map1.Refresh lstLayers.Clear ForEachlyrInMap1.Layers lstLayers.AddItemlyr.Name Nextlyr lstLayers.Selected(i)=True EndIf EndSub 实验五取消图层调入和动态跟踪层 1.实验目的 掌握取消图层调入 掌握动态跟踪层的使用 2.实验内容 ‘取消图层调入,运行时设置Map.CancelAction=moCancelMap 添加一个command1按钮。 增加事件Command1_Click()。 添加在运行时添加图层的代码 添加事件Map1_DrawingCanceled() PrivateSubMap1_DrawingCanceled() MsgBox"thelayer(orlayers)hasbeencanceled! " EndSub ‘TrackingLayer动态跟踪 DimptAsNewMapObjects2.Point 'convertthepointtomapcoordinates Setpt=Map1.ToMapPoint(X,Y) 'addanewevent Map1.TrackingLayer.AddEventpt,symIndex 实验六缓冲区 1.实验目的 掌握使用缓冲区功能 2.实验内容 PrivateSubForm_Load() Map1.TrackingLayer.SymbolCount=2 WithMap1.TrackingLayer.Symbol(0) .SymbolType=moPointSymbol .Style=moCircleMarker .Color=moRed .Size=3 EndWith WithMap1.TrackingLayer.Symbol (1) .SymbolType=moFillSymbol .Style=moGrayFill .Color=moRed .OutlineColor=moRed EndWith EndSub PrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE) Dimsym1AsNewMapObjects2.Symbol sym1.SymbolType=moFillSymbol sym1.Style=moTransparentFill sym1.OutlineColor=moBlack Map1.DrawShapeMap1.FullExtent,sym1 EndSub 查看各顶点的M属性 地图数据: ynroadsm.shp DimlineAsNewMapObjects2.line DimrecsAsNewMapObjects2.Recordset DimrecCountAsInteger DimiAsInteger List1.Clear Setrecs=Map1.Layers(0).Records recCount=recs.Count Fori=0TorecCount-1 List1.AddItem"线段: "&i+1 Setline=recs("Shape").Value outputMeasuresline Nexti PrivateSuboutputMeasures(aLineAsMapObjects2.line) DimitemCountAsInteger DimpartLineAsMapObjects2.Points DimiAsInteger ForEachpartLineInaLine.Parts Fori=0TopartLine.Count-1Step1 'Noofverticesintotal itemCount=itemCount+1 WithpartLine.Item(i) List1.AddItem"Item: "&i&","&itemCount&Chr(9)&"X: "&Format(.X, "##.00")&Chr(9)&"Y: "&Format(.Y,"#.00")&Chr(9)&"M: "&Format(.Measure, "##.00") EndWith Nexti NextpartLine EndSub 实验七控件坐标和地图坐标 1.实验目的 掌握控件坐标和地图坐标转化的一般方法 学习地图距离获取的一般方法 2.实验内容 1.控件坐标与地图坐标 添加数据Chinaprj.shp PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle) Form1.Refresh Form1.CurrentX=0 Form1.CurrentY=200 Print"当前鼠标坐标X: "&X&vbTab&vbTab&"Y: "&Y Print DimptAsMapObjects2.Point Setpt=Map1.ToMapPoint(X,Y) Print"当前地图坐标X: "&pt.X&vbTab&"Y: "&pt.Y Print PrintMap1.Height&vbTab&vbTab&Map1.Width EndSub 2.控件距离与地图距离 PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle) DimmyplAsNewMapObjects2.Line Setmypl=Map1.TrackLine Map1.TrackingLayer.AddEventmypl,0 Print"地图距离为: "&mypl.Length Print"控件距离为: "&Map1.FromMapDistance(mypl.Length) EndSub 3.Projection China.shp PrivateSubCommand1_Click() DimmycsAsNewMapObjects2.GeoCoordSys mycs.Type=moGeoCS_Beijing1954 DimmypjcsAsNewMapObjects2.ProjCoordSys mypjcs.Type=moProjCS_Beijing1954GK_13 SetMap1.Layers(0).CoordinateSystem=mycs SetMap1.CoordinateSystem=mypjcs EndSub PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle) DimmyptAsMapObjects2.Point Setmypt=Map1.ToMapPoint(X,Y) Text1.Text="Xis"&mypt.X&"Yis"&mypt.Y EndSub 实验八地图投影 1.实验目的 掌握如何判断地图是否投影 掌握如何更改地图投影 2.实验内容 判断有没有投影 添加数据china和chinaprj调整顺序观察结果 PrivateSubCommand1_Click() DimmycorsysAsObject DimmymaplayerAsMapObjects2.MapLayer Setmymaplayer=Map1.Layers(0) Setmycorsys=mymaplayer.CoordinateSystem IfmycorsysIsNothingThen MsgBox"图形为地理坐标系或地图参数未设置" Else Ifmycorsys.IsProjectedThen MsgBox"图形为投影坐标系" Printmymaplayer.CoordinateSystem.Type Printmymaplayer.CoordinateSystem.Name Printmymaplayer.CoordinateSystem.ReturnDescription Text1.Text=mymaplayer.CoordinateSystem.ReturnDescription EndIf EndIf EndSub 2.更改投影 添加数据country和world30 PrivateSubCommand1_Click() DimCSMapAsNewMapObjects2.ProjCoordSys CSMap.Type=moProjCS_World_WinkelI DimCSMapLayerAsNewMapObjects2.GeoCoordSys CSMapLayer.Type=moGeoCS_WGS1984 SetMap1.Layers(0).CoordinateSystem=CSMapLayer SetMap1.Layers (1).CoordinateSystem=CSMapLayer SetMap1.CoordinateSystem=CSMap Map1.Extent=Map1.FullExtent EndSub PrivateSubCommand2_Click() DimCSMapAsNewMapObjects2.GeoCoordSys CSMap.Type=moGeoCS_WGS1984 SetMap1.CoordinateSystem=CSMap Map1.Extent=Map1.FullExtent EndSub PrivateSubCommand3_Click() DimCSMapAsNewMapObjects2.ProjCoordSys CSMap.Type=moProjCS_World_Robinson SetMap1.CoordinateSystem=CSMap Map1.Extent=Map1.FullExtent EndSub 3.投影转换,坐标转换 第一个图添加数据countryworld30china第二个图添加数据china DimmyGTAsNewMapObjects2.GeoTransformation DimgcsBJ54AsNewMapObjects2.GeoCoordSys DimmyprjBJ54AsNewMapObjects2.ProjCoordSys DimgcsWGS84AsNewMapObjects2.GeoCoordSys DimmyPt1,myPt2AsNewMapObjects2.Point PrivateSubForm_Load() 'beginsomepredeclear myprjBJ54.Type=moProjCS_Beijing1954GK_17 gcsBJ54.Type=moGeoCS_Beijing1954 gcsWGS84.Type=moGeoCS_WGS1984 SetmyGT.FromGeoCoordSys=gcsBJ54 SetmyGT.ToGeoCoordSys=gcsWGS84 myGT.Direction=moDirection_Forward myGT.Name="BJ54_To_WGS1984" myGT.Method=moMethod_PositionVector myGT.SetParametermoParm_DeltaX,24 myGT.SetParametermoParm_DeltaY,-123 myGT.SetParametermoParm_DeltaZ,-94 myGT.SetParametermoParm_RotationX,-0.02 myGT.SetParametermoParm_RotationY,-0.25 myGT.SetParametermoParm_RotationZ,-0.13 myGT.SetParametermoParm_DeltaScale,1 'beginmap1 SetMap1.Layers(0).CoordinateSystem=gcsWGS84 SetMap1.Layers (1).CoordinateSystem=gcsWGS84 SetMap1.Layers (2).CoordinateSystem=gcsWGS84 IfMap1.CoordinateSystemIsNothingThen SetMap1.CoordinateSystem=gcsWGS84 EndIf 'beginmap2 SetMap2.Layers(0).CoordinateSystem=gcsWGS84 IfMap2.CoordinateSystemIsNothingThen SetMap2.CoordinateSystem=myprjBJ54 EndIf EndSub PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle) SetmyPt1=Map1.ToMapPoint(X,Y) Map1.TrackingLayer.AddEventmyPt1,0 SetmyPt2=Map2.CoordinateSystem.Transform(Map1.CoordinateSystem,myPt1,,myGT) Map2.TrackingLayer.AddEventmyPt2,0 PrintmyPt1.X&"";myPt1.Y PrintmyPt2.X&"";myPt2.Y EndSub 实验九文件状态的查询 1.实验目的 掌握文件状态的查询的一般方法 2.实验内容 1.显示文件状态、复习动态加载数据 加载数据world30,拷贝china到程序运行目录 PrivateSubCommand1_Click() DimmyrcsAsNewMapObjects2.Recordset DimmygeodsAsNewMapObjects2.GeoDataset DimmydcAsNewMapObjects2.DataConnection mydc.Dat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地理信息系统设计与开发 地理信息系统 设计 开发 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)