课程设计基于vb和MapObjects的二次开发由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“vb课程设计设计报告”。
课 程 设 计 报 告
课程名称:
地理信息系统
设计名称:
MapObjects的二次开发
院(系):
*********
专业班级:
*********
姓
名:
***************
学
号:
***********
指导教师:
********
****年 * 月 *日
一、设计目的:
(1)、实习类型:课程设计;
(2)、了解VB的软硬件环境、MapObjects数据类型;(3)、初步掌握该软件的基本操作技能;
(4)、能够熟练的操作VB6.0软件,并能应用该软件简单的与MO进行开发(5)、掌握产品的输出设计。
(6)、培养利用GIS方法解决实际问题的能力。
二、设计主要仪器设备,器材,药品,软件等
(1)软件准备:VB6.0(2)硬件准备:PC机 500M内存,128M显卡(最低)(3)资料准备:MapObjects控件、USA等SHP文件
三、设计原理和内容:
(1)设计题目:MapObjects的二次开发
(2)具体要求:应用VB软件与MO控件进行结合,实现MO的二次开发。(3)功能描述:
MapObjects是可以允许用户向应用程序中添加地图的制图软件控件集合。 MapObjects 可以在多种符合工业标准的开发环境下使用,比如 Visual Basic,PowerBuilder,Visual C++等。MapObjects 可以直接嵌入到这些开发环境中使用,允许用户快捷地创建应用程序。
MapObjects运行于Windows XP或Windows NT 4.0或更高版本。
MapObjects 包括一个ActiveX 控件(OCX)也就是Map控件,还包括45个
ActiveX 自动对象。可用于符合IT行业标准的Windows编程环境。 MapObjects主要功能:
显示一张包含多个图层的地图(道路,河流,边界)。 放大,缩小,漫游。
创建新的几何图形,如点,线,圆,多边形。 为图层添加注释。
识别地图上被选中的要素(点,线,面)。 可以通过线,矩形,多边形,圆来选择要素 可以选取距某参照物一定距离范围内的要素。 可以通过SQL语句来选择要素。 对选择的要素进行统计。
查询与更新被选择的要素的属性数据 制作专题地图。
根据字段的值标注图层要素。 显示从航片或卫星图片上获取的图像。 动态显示实时或时间系列数据。 通过输入地址在地图上定位。 将数据投影到不同的坐标系下
MapObjects对象模型(具体见附录)
数据通道对象组(Data Acce Objects) 地图显示对象组(Map Display Objects) 几何图形对象组(Geometric Objects) 地址匹配对象组(Addre Match Objects) 地理坐标对象组(Projection Objects)
四、设计步骤
1、添加图层
CommonDialog1.Filter = “ESRI Shapefiles(*.shp)|*.shp” CommonDialog1.InitDir = App.Path + “data” CommonDialog1.ShowOpen2、添加菜单栏
工具——菜单编辑器
3、Toolbar和ImageList
If Toolbar1.Buttons(1).Value = 1 Then
Map1.MousePointer = moZoomIn
ElseIf Toolbar1.Buttons(2).Value = 1 Then
Map1.MousePointer = moZoomOut
ElseIf Toolbar1.Buttons(3).Value = 1 Then
Map1.MousePointer = moPan
ElseIf Toolbar1.Buttons(4).Value = 1 Then
Map1.MousePointer = moArrow
Set Map1.Extent = Map1.FullExtent
ElseIf Toolbar1.Buttons(5).Value = 1 Then
Map1.MousePointer = moIdentify
ElseIf Toolbar1.Buttons(6).Value = 1 Then
Map1.MousePointer = moArrow
Form5.Show
Toolbar1.Buttons(6).Value = tbrUnpreed
ElseIf Toolbar1.Buttons(7).Value = 1 Then
Map1.MousePointer = moArrow
Toolbar1.Buttons(7).Value = tbrUnpreed
ElseIf Toolbar1.Buttons(8).Value = 1 Then
Map1.MousePointer = moCro
reflash
ElseIf Toolbar1.Buttons(9).Value = 1 Then
Map1.MousePointer = moCro
reflash
ElseIf Toolbar1.Buttons(10).Value = 1 Then
Map1.MousePointer = moCro
reflash
ElseIf Toolbar1.Buttons(11).Value = 1 Then
Map1.MousePointer = moCro
reflash
ElseIf Toolbar1.Buttons(12).Value = 1 Then
Map1.MousePointer = moCro
Reflash
If Button = 1 Then
If Toolbar1.Buttons(1).Value = 1 Then
Set Map1.Extent = Map1.TrackRectangle
ElseIf Toolbar1.Buttons(2).Value = 1 Then
Set r = Map1.Extent
r.ScaleRectangle 1.5
Map1.Extent = r
ElseIf Toolbar1.Buttons(3).Value = 1 Then
Map1.Pan
ElseIf Toolbar1.Buttons(5).Value = 1 Then
Form2.TreeView1.LineStyle = tvwRootLines
Form2.TreeView1.Nodes.Clear
Set l = Map1.Layers(Me.Combo1.text)
Set p = Map1.ToMapPoint(x, y)
Set partNode = Form2.TreeView1.Nodes.Add(, , “r”, Me.Combo1.text)
theTol = Map1.ToMapDistance(Searchtolpixels * Screen.TwipsPerPixelX * 3)
For Each l In Map1.Layers
If l.Visible = True And l.LayerType = moMapLayer Then
Set Rect = l.SearchByDistance(p, theTol, “”)
If Not Rect.EOF Then
Form2.ListView1.ListItems.Clear
For Each Fld In Rect.Fields
Set newItem = Form2.ListView1.ListItems.Add
newItem.text = Fld.name
newItem.SubItems(1)= Fld.ValueAsString
Form2.Text1.text = “当前坐标:(” & p.x & “,” & p.y & “)”
End If
Set partNode = Form2.TreeView1.Nodes.Add(“r”, tvwChild, , Rect.Fields(“NAME”).ValueAsString)
End If
Next
partNode.EnsureVisible
Form2.Show
ElseIf Toolbar1.Buttons(8).Value = 1 Then
Dim Shp As MapObjects2.Polygon
Set PL = Map1.TrackLine
Map1.TrackingLayer.Refresh True
ElseIf Toolbar1.Buttons(9).Value = 1 Then
Set Poly = Map1.TrackPolygon
Map1.TrackingLayer.Refresh True
ElseIf Toolbar1.Buttons(10).Value = 1 Then
Set PL = Map1.TrackLine
Set BLine = PL.Buffer(Combo2.text)
Map1.TrackingLayer.Refresh True
ElseIf Toolbar1.Buttons(11).Value = 1 Then
Set Poly = Map1.TrackPolygon
Set BLine = Poly.Buffer(Combo2.text)
Map1.TrackingLayer.Refresh True
ElseIf Toolbar1.Buttons(12).Value = 1 Then
Set p = Map1.ToMapPoint(x, y)
Pts.Add p
Set BLine = Pts.Buffer(Combo2.text)
Map1.TrackingLayer.Refresh True
End If
ElseIf Button = vbRightButton Then
PopupMenu view
End If 例如:鹰眼
放大
属性
4、图层控制
本设计的图层可以实现上下移动、显示和隐藏图层等功能 Private Sub Form_Load()
legend1.setMapSource Map1 End Sub
Private Sub Map1_AfterLayerDraw(ByVal Index As Integer, ByVal canceled As Boolean, ByVal hDC As stdole.OLE_HANDLE)legend1.LoadLegend True End Sub
Private Sub legend1_AfterSetLayerVisible(Index As Integer, isVisible As Boolean)Map1.Refresh End Sub5、显示比例尺、动态坐标和时间等 Private Sub refreshScale()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 End Sub Private Sub Timer1_Timer()Me.StatusBar1.Panels.Item(5).text = “当前时间 :” & Now()End Sub
五、设计总结分析
设计阶段是在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方法解决实际问题的能力。