《地理信息系统设计与开发》实验指导书.docx

上传人:b****3 文档编号:3938113 上传时间:2022-11-26 格式:DOCX 页数:30 大小:376.02KB
下载 相关 举报
《地理信息系统设计与开发》实验指导书.docx_第1页
第1页 / 共30页
《地理信息系统设计与开发》实验指导书.docx_第2页
第2页 / 共30页
《地理信息系统设计与开发》实验指导书.docx_第3页
第3页 / 共30页
《地理信息系统设计与开发》实验指导书.docx_第4页
第4页 / 共30页
《地理信息系统设计与开发》实验指导书.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

《地理信息系统设计与开发》实验指导书.docx

《《地理信息系统设计与开发》实验指导书.docx》由会员分享,可在线阅读,更多相关《《地理信息系统设计与开发》实验指导书.docx(30页珍藏版)》请在冰豆网上搜索。

《地理信息系统设计与开发》实验指导书.docx

《地理信息系统设计与开发》实验指导书

《地理信息系统设计与开发》实验指导书(黑体,小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.Databas

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电子电路

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1