《地理信息系统设计与开发》实验指导书Word文件下载.docx
《《地理信息系统设计与开发》实验指导书Word文件下载.docx》由会员分享,可在线阅读,更多相关《《地理信息系统设计与开发》实验指导书Word文件下载.docx(30页珍藏版)》请在冰豆网上搜索。
EndIf
进一步操作PopUpMenu(右键菜单)
使用菜单编辑器生成一个右键菜单Popup1,为Popup1建立以下几个子菜单项“显示全图”“放大”“缩小”编写代码实现“显示全图”的功能;
PrivateSubpop1Full_Click()
Map1.Extent=Map1.FullExtent
修改Mouse事件中的代码,显示右键菜单
IfButton=vbLeftButtonThen
Else:
Button=vbRightButton
PopupMenupop1
进一步操作:
工具栏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控件
实验三动态加载图层
掌握CommandDialog组件添加图层的方法
练习VB中添加按钮的一般方法
导入CommandDialog组件,这一组件在对象库MicrosoftCommonDialogControl6.0中。
添加Map控件,ConmonDialog控件,并将其名称改为cDlg1,添加一个按钮.
程序代码:
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
实验四调整图层顺序
掌握在MO当中如何调整图层顺序
‘置顶当前图层
PrivateSublstLayers_DblClick()
DimlyrAsMapObjects2.MapLayer
IflstLayers.ListIndex<
-1Then
Map1.Layers.MoveToToplstLayers.ListIndex
Map1.Refresh
lstLayers.Clear
ForEachlyrInMap1.Layers
lstLayers.AddItemlyr.Name
Nextlyr
‘上移图层
PrivateSubCommand2_Click()
DimiAsInteger
-1AndlstLayers.ListIndex>
0Then
i=lstLayers.ListIndex-1
Map1.Layers.MoveTolstLayers.ListIndex,i
lstLayers.Selected(i)=True
‘下移图层
PrivateSubCommand4_Click()
DimiAsInteger
-1AndlstLayers.ListIndex<
lstLayers.ListCount-1Then
i=lstLayers.ListIndex+1
实验五取消图层调入和动态跟踪层
掌握取消图层调入
掌握动态跟踪层的使用
‘取消图层调入,运行时设置Map.CancelAction=moCancelMap
添加一个command1按钮。
增加事件Command1_Click()。
添加在运行时添加图层的代码
添加事件Map1_DrawingCanceled()
PrivateSubMap1_DrawingCanceled()
MsgBox"
thelayer(orlayers)hasbeencanceled!
"
‘TrackingLayer动态跟踪
DimptAsNewMapObjects2.Point
'
convertthepointtomapcoordinates
Setpt=Map1.ToMapPoint(X,Y)
addanewevent
Map1.TrackingLayer.AddEventpt,symIndex
实验六缓冲区
掌握使用缓冲区功能
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
.OutlineColor=moRed
PrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE)
Dimsym1AsNewMapObjects2.Symbol
sym1.SymbolType=moFillSymbol
sym1.Style=moTransparentFill
sym1.OutlineColor=moBlack
Map1.DrawShapeMap1.FullExtent,sym1
查看各顶点的M属性
地图数据:
ynroadsm.shp
DimlineAsNewMapObjects2.line
DimrecsAsNewMapObjects2.Recordset
DimrecCountAsInteger
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
ForEachpartLineInaLine.Parts
Fori=0TopartLine.Count-1Step1
Noofverticesintotal
itemCount=itemCount+1
WithpartLine.Item(i)
Item:
i&
"
"
itemCount&
Chr(9)&
X:
Format(.X,
##.00"
)&
Y:
Format(.Y,"
#.00"
M:
Format(.Measure,
)
NextpartLine
实验七控件坐标和地图坐标
掌握控件坐标和地图坐标转化的一般方法
学习地图距离获取的一般方法
1.控件坐标与地图坐标
添加数据Chinaprj.shp
Form1.Refresh
Form1.CurrentX=0
Form1.CurrentY=200
Print"
当前鼠标坐标X:
X&
vbTab&
Y
Print
DimptAsMapObjects2.Point
当前地图坐标X:
pt.X&
pt.Y
PrintMap1.Height&
Map1.Width
2.控件距离与地图距离
DimmyplAsNewMapObjects2.Line
Setmypl=Map1.TrackLine
Map1.TrackingLayer.AddEventmypl,0
地图距离为:
mypl.Length
控件距离为:
Map1.FromMapDistance(mypl.Length)
3.Projection
China.shp
DimmycsAsNewMapObjects2.GeoCoordSys
mycs.Type=moGeoCS_Beijing1954
DimmypjcsAsNewMapObjects2.ProjCoordSys
mypjcs.Type=moProjCS_Beijing1954GK_13
SetMap1.Layers(0).CoordinateSystem=mycs
SetMap1.CoordinateSystem=mypjcs
DimmyptAsMapObjects2.Point
Setmypt=Map1.ToMapPoint(X,Y)
Text1.Text="
Xis"
mypt.X&
Yis"
mypt.Y
实验八地图投影
掌握如何判断地图是否投影
掌握如何更改地图投影
判断有没有投影
添加数据china和chinaprj调整顺序观察结果
DimmycorsysAsObject
DimmymaplayerAsMapObjects2.MapLayer
Setmymaplayer=Map1.Layers(0)
Setmycorsys=mymaplayer.CoordinateSystem
IfmycorsysIsNothingThen
图形为地理坐标系或地图参数未设置"
Else
Ifmycorsys.IsProjectedThen
图形为投影坐标系"
Printmymaplayer.CoordinateSystem.Type
Printmymaplayer.CoordinateSystem.Name
Printmymaplayer.CoordinateSystem.ReturnDescription
Text1.Text=mymaplayer.CoordinateSystem.ReturnDescription
EndIf
2.更改投影
添加数据country和world30
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
DimCSMapAsNewMapObjects2.GeoCoordSys
CSMap.Type=moGeoCS_WGS1984
PrivateSubCommand3_Click()
CSMap.Type=moProjCS_World_Robinson
3.投影转换,坐标转换
第一个图添加数据countryworld30china第二个图添加数据china
DimmyGTAsNewMapObjects2.GeoTransformation
DimgcsBJ54AsNewMapObjects2.GeoCoordSys
DimmyprjBJ54AsNewMapObjects2.ProjCoordSys
DimgcsWGS84AsNewMapObjects2.GeoCoordSys
DimmyPt1,myPt2AsNewMapObjects2.Point
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
beginmap2
SetMap2.Layers(0).CoordinateSystem=gcsWGS84
IfMap2.CoordinateSystemIsNothingThen
SetMap2.CoordinateSystem=myprjBJ54
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
实验九文件状态的查询
掌握文件状态的查询的一般方法
1.显示文件状态、复习动态加载数据
加载数据world30,拷贝china到程序运行目录
DimmyrcsAsNewMapObjects2.Recordset
DimmygeodsAsNewMapObjects2.GeoDataset
DimmydcAsNewMapObjects2.DataConnection
mydc.Databas