四、设计步骤
1、添加图层
CommonDialog1.Filter="ESRIShapefiles(*.shp>|*.shp"
CommonDialog1.InitDir=App.Path+"\data"
CommonDialog1.ShowOpen
2、添加菜单栏
工具——菜单编辑器
3、Toolbar和ImageList
IfToolbar1.Buttons(1>.Value=1Then
Map1.MousePointer=moZoomIn
ElseIfToolbar1.Buttons(2>.Value=1Then
Map1.MousePointer=moZoomOut
ElseIfToolbar1.Buttons(3>.Value=1Then
Map1.MousePointer=moPan
ElseIfToolbar1.Buttons(4>.Value=1Then
Map1.MousePointer=moArrow
SetMap1.Extent=Map1.FullExtent
ElseIfToolbar1.Buttons(5>.Value=1Then
Map1.MousePointer=moIdentify
ElseIfToolbar1.Buttons(6>.Value=1Then
Map1.MousePointer=moArrow
Form5.Show
Toolbar1.Buttons(6>.Value=tbrUnpressed
ElseIfToolbar1.Buttons(7>.Value=1Then
Map1.MousePointer=moArrow
Toolbar1.Buttons(7>.Value=tbrUnpressed
ElseIfToolbar1.Buttons(8>.Value=1Then
Map1.MousePointer=moCross
reflash
ElseIfToolbar1.Buttons(9>.Value=1Then
Map1.MousePointer=moCross
reflash
ElseIfToolbar1.Buttons(10>.Value=1Then
Map1.MousePointer=moCross
reflash
ElseIfToolbar1.Buttons(11>.Value=1Then
Map1.MousePointer=moCross
reflash
ElseIfToolbar1.Buttons(12>.Value=1Then
Map1.MousePointer=moCross
Reflash
IfButton=1Then
IfToolbar1.Buttons(1>.Value=1Then
SetMap1.Extent=Map1.TrackRectangle
ElseIfToolbar1.Buttons(2>.Value=1Then
Setr=Map1.Extent
r.ScaleRectangle1.5
Map1.Extent=r
ElseIfToolbar1.Buttons(3>.Value=1Then
Map1.Pan
ElseIfToolbar1.Buttons(5>.Value=1Then
Form2.TreeView1.LineStyle=tvwRootLines
Form2.TreeView1.Nodes.Clear
Setl=Map1.Layers(Me.Combo1.text>
Setp=Map1.ToMapPoint(x,y>
SetpartNode=Form2.TreeView1.Nodes.Add(,,"r",Me.Combo1.text>
theTol=Map1.ToMapDistance(Searchtolpixels*Screen.TwipsPerPixelX*3>
ForEachlInMap1.Layers
Ifl.Visible=TrueAndl.LayerType=moMapLayerThen
SetRect=l.SearchByDistance(p,theTol,"">
IfNotRect.EOFThen
Form2.ListView1.ListItems.Clear
ForEachFldInRect.Fields
SetnewItem=Form2.ListView1.ListItems.Add
newItem.text=Fld.name
newItem.SubItems(1>=Fld.ValueAsString
Form2.Text1.text="当前坐标:
("&p.x&","&p.y&">"
EndIf
SetpartNode=Form2.TreeView1.Nodes.Add("r",tvwChild,,Rect.Fields("NAME">.ValueAsString>
EndIf
Next
partNode.EnsureVisible
Form2.Show
ElseIfToolbar1.Buttons(8>.Value=1Then
DimShpAsMapObjects2.Polygon
SetPL=Map1.TrackLine
Map1.TrackingLayer.RefreshTrue
ElseIfToolbar1.Buttons(9>.Value=1Then
SetPoly=Map1.TrackPolygon
Map1.TrackingLayer.RefreshTrue
ElseIfToolbar1.Buttons(10>.Value=1Then
SetPL=Map1.TrackLine
SetBLine=PL.Buffer(Combo2.text>
Map1.TrackingLayer.RefreshTrue
ElseIfToolbar1.Buttons(11>.Value=1Then
SetPoly=Map1.TrackPolygon
SetBLine=Poly.Buffer(Combo2.text>
Map1.TrackingLayer.RefreshTrue
ElseIfToolbar1.Buttons(12>.Value=1Then
Setp=Map1.ToMapPoint(x,y>
Pts.Addp
SetBLine=Pts.Buffer(Combo2.text>
Map1.TrackingLayer.RefreshTrue
EndIf
ElseIfButton=vbRightButtonThen
PopupMenuview
EndIf
例如:
鹰眼
放大
属性
4、图层控制
本设计的图层可以实现上下移动、显示和隐藏图层等功能
PrivateSubForm_Load(>
legend1.setMapSourceMap1
EndSub
PrivateSubMap1_AfterLayerDraw(ByValIndexAsInteger,ByValcanceledAsBoolean,ByValhDCAsstdole.OLE_HANDLE>
legend1.LoadLegendTrue
EndSub
PrivateSublegend1_AfterSetLayerVisible(IndexAsInteger,isVisibleAsBoolean>
Map1.Refresh
EndSub
5、显示比例尺、动态坐标和时间等
PrivateSubrefreshScale(>
ScaleBar1.MapExtent.MaxX=Map1.Extent.Right
ScaleBar1.MapExtent.MinX=Map1.Extent.Left
ScaleBar1.MapExtent.MaxY=Map1.Extent.Bottom
ScaleBar1.MapExtent.MinY=Map1.Extent.Top
ScaleBar1.PageExtent.MinX=Map1.Left/Screen.TwipsPerPixelX
ScaleBar1.PageExtent.MinY=Map1.Top/Screen.TwipsPerPixelY
ScaleBar1.PageExtent.MaxX=(Map1.Left+Map1.Width>/Screen.TwipsPerPixelX
ScaleBar1.PageExtent.MinY=(Map1.Top+Map1.Height>/Screen.TwipsPerPixelY
ScaleBar1.Refresh
EndSub
PrivateSubTimer1_Timer(>
Me.StatusBar1.Panels.Item(5>.text="当前时间:
"&Now(>
EndSub
五、设计总结分析
设计阶段是在VB中创建应用程序的最重要的部分。
首先需要为应用程序设计一用户界面,然后对每个功能模块编写代码。
但设计代码的结构是一项很复杂的工作,不易掌握。
构造应用程序的方法不同,可能会造成应用程序的性能以及代码的可维护性、可使用性不同。
在此次课程设计中,我们针对MO二次开发过程中遇到的问题进行了如下总结:
<一)实验难点
1.由于对VB的应用环境不大熟悉,各个控件的使用方法不甚了解,所以在开始构建工程模块时很是吃力。
2.VB编程是实验中的一大难点,每个功能都要通过编写代码来实现,对加载的每个功能函数需要不断的修改和调试。
<二)注意事项
1.在构建不同的窗体模块时,要注意模块之间的链接;
2.每个模块有多个过程,每个过程是一个可执行的代码片段,要划分清晰每个子过程、函数过程或是属性过程,以便程序的调试、检查;
3.在很多情况中存在多个对象共享的重复过程,这样可创建一个共享的子过程,以方便调用,来增加程序的可读性和可维护性;
4.应用每一个变量前需要进行定义,以保证程序可读;
5.在调试程序时可通过设置断点来进行追踪分析;
6.在工具栏设计中,Toolbar里按钮的索引号要与ImageList的图像编号链接一致,按钮样式要设为“tbrButtonGroup”,否则无法对地图实现各项操作;
7.在实现“打开”功能前,需加入CommonDialog控件,否则无法实现;
心得体会:
在这次上机实习中,我们使用VB和MO中的Text,Label,Toolbar,Command,Statusbar,list,Listview,Map,Legend等控件创建了一个用户界面,并通过编程实现了MO的一些主要功能。
通过上机实习,我们熟悉了VB的工作环境,初步掌握了该软件的基本操作与用法,学会了用属性窗口及代码设置对象<窗体和控件)属性的方法,学会了如何用对象建立界面及在代码编辑器中输入程序代码的基本操作,基本掌握了用VB开发应用程序的一般步骤。
由于时间关系,我们对VB软件的学习和了解还不够深入透彻,开发实现的MO功能还不够全面,以后还需要加强学习和训练,培养自己利用GIS方法解决实际问题的能力。