课程设计----基于vb和MapObjects的二次开发.doc_第1页
课程设计----基于vb和MapObjects的二次开发.doc_第2页
课程设计----基于vb和MapObjects的二次开发.doc_第3页
课程设计----基于vb和MapObjects的二次开发.doc_第4页
课程设计----基于vb和MapObjects的二次开发.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 报 告课程名称: 地理信息系统 设计名称: 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 Access Objects) 地图显示对象组(Map Display Objects) 几何图形对象组(Geometric Objects) 地址匹配对象组(Address Match Objects) 地理坐标对象组(Projection Objects)四、设计步骤 1、添加图层CommonDialog1.Filter = ESRI Shapefiles (*.shp)|*.shpCommonDialog1.InitDir = App.Path + dataCommonDialog1.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 = tbrUnpressed ElseIf Toolbar1.Buttons(7).Value = 1 Then Map1.MousePointer = moArrow Toolbar1.Buttons(7).Value = tbrUnpressed ElseIf Toolbar1.Buttons(8).Value = 1 Then Map1.MousePointer = moCross reflash ElseIf Toolbar1.Buttons(9).Value = 1 Then Map1.MousePointer = moCross reflash ElseIf Toolbar1.Buttons(10).Value = 1 Then Map1.MousePointer = moCross reflash ElseIf Toolbar1.Buttons(11).Value = 1 Then Map1.MousePointer = moCross reflash ElseIf Toolbar1.Buttons(12).Value = 1 Then Map1.MousePointer = moCross 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 = F 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 Map1End SubPrivate Sub Map1_AfterLayerDraw(ByVal Index As Integer, ByVal canceled As Boolean, ByVal hDC As stdole.OLE_HANDLE)legend1.LoadLegend TrueEnd SubPrivate Sub legend1_AfterSetLayerVisible(Index As Integer, isVisible As Boolean)Map1.RefreshEnd Sub5、 显示比例尺、动态坐标和时间等Private Sub refreshScale()ScaleBar1.MapExtent.MaxX = Map1.Extent.RightScaleBar1.MapExtent.MinX = Map1.Extent.LeftScaleBar1.MapExtent.MaxY = Map1.Extent.BottomScaleBar1.MapExtent.MinY = Map1.Extent.TopScaleBar1.PageExtent.MinX = Map1.Left / Screen.TwipsPerPixelXScaleBar1.PageExtent.MinY = Map1.Top / Screen.TwipsPerPixelYScaleBar1.PageExtent.MaxX = (Map1.Left + Map1.Width) / Screen.TwipsPerPixelXScaleBar1.PageExtent.MinY = (Map1.Top + Map1.Height) / Screen.TwipsPerPixelYScaleBar1.RefreshEnd SubPrivate 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控件,否则无法实现;心得体会: 在这次上机实习中,我们使

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论