GIS二次开发程序设计_第1页
GIS二次开发程序设计_第2页
GIS二次开发程序设计_第3页
GIS二次开发程序设计_第4页
GIS二次开发程序设计_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、成绩批阅日期重庆交通大学测量与空间信息处理实验报告实验课程:GIS二次开发程序设计实验名称: GIS二次开发 班级: 学号: 姓名: 实验日期: 2012 年 6 月 25 日实验一 界面设计一、实验目的和要求 1、学会对MO进行安装。 2、熟悉Visual Basic和Map Object程序的基本操作。 3、掌握toolbar的操作步骤。 4、设置GIS二次开发的界面,要求界面具有菜单、工具条及设计程序时用到的各种控件等。二、实验内容1、利用Visual Basic相应控件和操作以及Map Object完成界面设计,运用所安装的MO的控件进行所需界面设计。 2、在设计的界面上一次添加菜单、

2、工具条、图例控件、map控件、状态栏等,并熟练掌握其操作步骤。3、 实验步骤1、在有MO和VB的环境中进行所设计的界面设计。 1)菜单的设计。要求具有一些常用的功能。如下图所示:2、对toolbar进行设计。在菜单栏下面进行插入Button按钮,并在按钮上插入相应图像。步骤如下图: 3、插入map、legend、status等控件,并调整其大小。得到最后成果图如下图所示:四、实验总结4.1、实验中遇到的困难 在进行界面设计时,会遇到一些意想不到的困难,比如在插入toolbar中的Button时,如果没有加入imagelist控件时,就不能在Button上插入图像。还有在进行菜单操作时,有时会因

3、为空格运行不当,而不能得到理想的下拉菜单。4.2、处理方法和技巧 在进行设计时,一定要记住操作的先后顺序,不然不能不到效果。插入map和legend等控件时,适当调节其大小,使界面更美观。4.3、经验体会和收获刚开始做实验时感觉好难,不知怎么下手,可在完成这几次实验后我熟悉了MO的最基本功能,发现用VB对GIS进行二次开发没有想象中的那么难,但关于控件的问题很多,而且大家都不是很懂,只能多多交流,从网上搜素相关资料。现如今地理信息系统的应用越来越广发,对它进行二次开发可以更大的发挥此软件的功能。经过这次实习,我学会了MO得使用和安装,也学会了简单的界面设计。使用菜单编辑器,在窗体中插入tool

4、bar,插入map,legend,imagelist等多种控件。初次操作时,很多东西不知道,很多东西不懂,所以做起来比较难,也考验一个人的耐心,但是要不灰心,不气馁,会发现一切变得容易很多。所以不管做什么都要有耐心,沉得住气,才能成功。实验二 加载图层(四种方法)一、实验目的和要求1、熟悉Map Object中commondialog控件的调用方法。2、掌握在Visual Basic中利用Map Object二次开发软件实现command控件、菜单、类模块和toolbar加载Shape图层的操作。二、实验内容1、用菜单的方法加载Shape图层。2、用toolbar的方法加载Shape图层。3、

5、用命令按钮command的方法加载Shape图层。4、用类模块的方式加载Shape图层。三、实验步骤在设计好的界面环境中的菜单、toolbar、command、类模块中分别写入打开图层的代码。进行打开图层的操作。1、运用菜单代开代码:Private Sub dakaituceng_Click() 第一步,定义一个新的MO对象组的DataConnection对象 Dim dConn As New MapObjects2.DataConnection 第二步,定义一个新的MO对象组的MapLayer对象 Dim shpLayer As New MapObjects2.MapLayer Dim fi

6、lename As String 第三步,设置DataConnection对象的方法Connection连接到指定的存放数据的地方 dConn.Database = H:MODevelopDemoMOandVBDemoL4-Exam-AddShapeData 第三步,利用DataConnection对象的方法Connect进行数据连接 dConn.Connect 第四步,将MapLayer对象的GeoDataset属性设置为DataConnection对象的FindGeoDataset方法(用Shape 文件名作参数)的返回值。 Set shpLayer.GeoDataset = dConn.

7、FindGeoDataset(STATES) 第五步,用地图控件Layers对象的方法Add向地图控件中添加Shape图层 Map1.Layers.Add shpLayer 设置对话框过滤器 CommonDialog1.Filter = ESRI Shape文件(*.shp)|*.shp 对话框显示为打开类型的对话框 CommonDialog1.ShowOpen 如果打开文件名的长度为0,则终止这个过程 If Len(CommonDialog1.filename) = 0 Then Exit Sub 设置DataConnection对象的方法Connection连接到当前目录 dConn.Da

8、tabase = CurDir App.path If Not dConn.Connect Then Exit Sub MsgBox dConn.Connect 得到从对话框返回的文件名 filename = Left(CommonDialog1.FileTitle, Len(CommonDialog1.FileTitle) - 4) 设置图层的数据集 Set shpLayer.GeoDataset = dConn.FindGeoDataset(FileName) Set shpLayer.GeoDataset = dConn.FindGeoDataset(filename) 增加新图层End

9、 Sub 结果如下图:2、用toolbar的方式代开图层代码:首先在设置Button时将打开图层的key值标为打开图层。Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)Select Case Button.Key Case 打开图层 Call dakaituceng_Click End SelectEnd Sub得到结果图如下图: 3、用command方式进行打开的代码:Private Sub Command5_Click()Call dakaituceng_ClickEnd Sub 得到如下结果: 4、用

10、类模块方式打开图层的代码:Sub Class1_Initialize() 第一步,定义一个新的MO对象组的DataConnection对象 Dim dConn As New MapObjects2.DataConnection 第二步,定义一个新的MO对象组的MapLayer对象 Dim shpLayer As New MapObjects2.MapLayer Dim filename As String 第三步,设置DataConnection对象的方法Connection连接到指定的存放数据的地方 dConn.Database = H:MODevelopDemoMOandVBDemoL4-

11、Exam-AddShapeData 第三步,利用DataConnection对象的方法Connect进行数据连接 dConn.Connect 第四步,将MapLayer对象的GeoDataset属性设置为DataConnection对象的FindGeoDataset方法(用Shape 文件名作参数)的返回值。 Set shpLayer.GeoDataset = dConn.FindGeoDataset(STATES) 第五步,用地图控件Layers对象的方法Add向地图控件中添加Shape图层 Map1.Layers.Add shpLayer 设置对话框过滤器 Form1.CommonDial

12、og1.Filter = ESRI Shape文件(*.shp)|*.shp 对话框显示为打开类型的对话框 Form1.CommonDialog1.ShowOpen 如果打开文件名的长度为0,则终止这个过程 If Len(Form1.CommonDialog1.filename) = 0 Then Exit Sub 设置DataConnection对象的方法Connection连接到当前目录 dConn.Database = CurDir App.path If Not dConn.Connect Then Exit Sub MsgBox dConn.Connect 得到从对话框返回的文件名

13、filename = Left(Form1.CommonDialog1.FileTitle, Len(Form1.CommonDialog1.FileTitle) - 4) 设置图层的数据集 Set shpLayer.GeoDataset = dConn.FindGeoDataset(FileName) Set shpLayer.GeoDataset = dConn.FindGeoDataset(filename) 增加新图层 Form1.Map1.Layers.Add shpLayerEnd Sub 得到结果如图:四、实验总结4.1、实验中遇到的困难实验中有时操作不当时会加载不了图层。还有在

14、菜单编辑中,由于没在窗体加入对话框,在程序运行的时候就出错。4.2、处理方法和技巧仔细寻找出错的原因,并解决问题。程序不能出错,一旦出错就得不到结果。我们还可以采取一些我们喜欢的而方法,对图层进行设置。比如我们可以进行一些操作,是所加载的图层颜色唯一。4.3、经验体会和收获 经过这次实习,我学会了不少东西,比如熟悉Map Object中commondialog控件的调用方法。同时也掌握了在Visual Basic中利用Map Object二次开发软件实现command控件、菜单、类模块和toolbar加载Shape图层的操作。通过对各种打开程序代码的学习,我基本能够自己读懂字里行间的意思,并能

15、对程序代码进行操作,实现打开图层的功能。在实验中会遇到一些意象不到的困难,有时候甚至根本不知道哪里出错,只能反反复复查看,试运行,知道找出错误并修正它,使工作量大大增加,只有肯多花时间在上面,才能很好地完成任务。实验三 放大、缩小、平移和全视图1、 实验目的和要求 学会在菜单、toolbar中添加相应的程序代码实现所加载图层的放大、缩小、平移以及全视图操作。2、 实验内容1、 用程序代码实现图层的放大操作功能。2、 用程序代码实现图层的缩小操作功能。3、 用程序代码实现图层的平移操作功能。4、 用程序代码实现图层的全视图操作功能。3、 实验步骤1、实现图层的放大功能代码:Private Sub

16、 Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If i = 1 Then Set Map1.Extent = Map1.TrackRectangle End IfEnd SubPrivate Sub fangda_Click() bZoomOrPan = True 标志放大状态 i = 1 设置鼠标指针 Map1.MousePointer = moZoomInEnd Sub结果如图所示:2、图层缩小功能代码:Private Sub Map1_MouseDown(Button As I

17、nteger, Shift As Integer, X As Single, Y As Single) If i = 2 Then Dim r As MapObjects2.rectangleSet r = Map1.Extentr.ScaleRectangle 1.5 显示框放大1.5倍Map1.Extent = rEnd IfEnd SubPrivate Sub suoxiao_Click() i = 2 Map1.MousePointer = moZoomOutEnd Sub 结果如图所示:3、图层平移功能代码:Private Sub Map1_MouseDown(Button As I

18、nteger, Shift As Integer, X As Single, Y As Single)If i = 3 ThenMap1.PanEnd IfEnd SubPrivate Sub pingyi_Click() i = 3 标志平移状态 Map1.MousePointer = moPan 设置鼠标指针End Sub 结果如图所示:4、图层全视图功能代码:Private Sub quanshitu_Click()设置mainmap的当前显示范围是全图 Set Map1.Extent = Map1.FullExtentEnd Sub 结果如图所示:四、实验总结4.1、实验中遇到的困难

19、在实验过程中,有时候因不够严谨二导致某些功能不够完善。使系统不够健壮,操作起来不是很方便。4.2、处理方法和技巧 在试验过程中要小心仔细地做好每一步,例如在进行放大功能制作时,不仅要使放大的功能得以实现,而且同时鼠标的箭头也要变成放大图标格式。4.3、经验体会和收获 通过此次试验,我学会了在菜单、toolbar中添加相应的程序代码实现所加载图层的放大、缩小、平移以及全视图操作。 刚开始操作时,不能真正理解代码的意思和内涵,会造成代码没有完全实现所需功能,比如点放大操作时,所化框的起点往往不能到到理想状态,后面经过考虑,发现此功能应该放到mousedown里面实现。才能使鼠标第一次按键能在任何位

20、置。此类问题虽然不大,但是很多,所以比较花费精力。 经过几次试验后,却来却发现编程开发其实是很有意思的一门课,希望以后更加努力,弄的更好。 实验四 设计鹰眼1、 实验目的和要求 在窗体中添加新的map控件作为鹰眼,并在鹰眼内画红色矩形框。框要求鹰眼与图层能进行联动,红色方框内的内容为图层的显示内容。2、 实验内容 1、设置Birdeye的属性及位置大小。 2、birdeye与mainmap联动,在birdeye内画出红色矩形框并实现Birdeye的拖拽功能。3、 实验步骤1、添加一个map控件作为鹰眼。2、添加代码,实现鹰眼与图层的联动机鹰眼的拖拽功能。Private Sub dakai_Cl

21、ick() Dim dConn As New MapObjects2.DataConnection Dim shpLayer As New MapObjects2.MapLayer Dim filename As String CommonDialog1.Filter = ESRI Shape文件(*.shp)|*.shp CommonDialog1.ShowOpen If Len(CommonDialog1.filename) = 0 Then Exit Sub dConn.Database = CurDir If Not dConn.Connect Then Exit Sub filena

22、me = Left(CommonDialog1.FileTitle, Len(CommonDialog1.FileTitle) - 4) Set shpLayer.GeoDataset = dConn.FindGeoDataset(filename) Map1.Layers.Add shpLayer Map1.Refresh legend1.setMapSource Map1 让图层控制控件的作用生效 legend1.LoadLegend True Map2.Layers.Add shpLayer Map2.RefreshEnd Sub= Private Sub Map1_AfterLayer

23、Draw(ByVal Index As Integer, ByVal canceled As Boolean, ByVal hdc As stdole.OLE_HANDLE) If Index = 0 Then Map2.TrackingLayer.Refresh True End IfEnd Sub= Private Sub Map2_AfterTrackingLayerDraw(ByVal hdc As stdole.OLE_HANDLE) Dim sym As New Symbol sym.OutlineColor = moRed sym.Style = moTransparentFil

24、l Map2.DrawShape Map1.Extent, symEnd Sub Private Sub Map2_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Dim curRectangle As MapObjects2.rectangle Dim pt As New MapObjects2.point 画方框改变Map1窗口 Set curRectangle = Map2.TrackRectangle Set Map1.Extent = curRectangle 点击改变Map1位置 Se

25、t pt = Map2.ToMapPoint(x, y) Map1.CenterAt pt.x, pt.y End Sub3、最终结果图:四、实验总结4.1、实验中遇到的困难有时候因为马虎,使map1与鹰眼不能联动和拖拽。4.2、处理方法和技巧在加载图层时要用程序代码进行图层与鹰眼的同时显示图像,Map1.Layers.Add shpLayer Map1.Refresh legend1.setMapSource Map1 让图层控制控件的作用生效 legend1.LoadLegend True Map2.Layers.Add shpLayer Map2.Refresh4.3、经验体会和收获设计

26、鹰眼时不仅要对其代码熟练掌握,还要对所加的map1.map2,以及legend控件进行比例设计,要使窗体里面的局面看起来更加协调,更加美观。在代码方面,基本没有什么大问题,所以操作此次实验比较轻松。没有多长时间便完成了。经过试验,我的自信心增强不少,很期待下一次的实验。实验五 画点1、 实验目的和要求用一定的程序在图层上进行画点操作。2、 实验内容1、在菜单中设计代码进行画点操作功能。2、用toolbar中的Button进行画点操作。3、 实验步骤1、用菜单画点代码:Private Sub Map1_MouseDown(Button As Integer, Shift As Integer,

27、x As Single, y As Single)If i = 4 Then Dim point As New MapObjects2.point Dim evpoint As New MapObjects2.GeoEvent Set point = Map1.ToMapPoint(x, y) Set trackShape = point Set evpoint = Map1.TrackingLayer.AddEvent(point, 0) With Map1.TrackingLayer.Symbol(0) .SymbolType = moFillSymbol .Style = moGrayF

28、ill .Color = moRed .OutlineColor = moRed End WithEnd SubPrivate Sub huadian_Click()i = 4 Map1.MousePointer = moPencilEnd Sub1、 用toolbar中的Button进行画点操作代码:Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)Select Case Button.Key Case 画点 Call huadian_Click End SelectEnd Sub2、 实验结果:四、实验总

29、结4.1、实验中遇到的困难若实验中语句使用不当,会导致不能画点,或者只能画一个点。4.2、处理方法和技巧书本上的第一种方法只能画一个点,但只要我们能改变其中一些程序,就能实现全面的画点功能。4.3、经验体会和收获这次试验做的是运用菜单栏和toolbar中的button进行画点,也就是说用两种方法进行画点操作。在用书中的第一种画点方法进行画点时,只能画一个点,画第二个点时,第一个点会被覆盖。反复查看也找不到原因。因此就用event方式进行画点,才能在窗体上进行画多个点的操作。经过实验,我明白了做事不能只是照抄课本,要学会思考,学会举一反三,才能把事情做好。实验六 画线1、 实验目的和要求用一定的

30、程序在图层上进行画点操作。2、 实验内容1、在菜单中设计代码进行画点操作功能。2、用toolbar中的Button进行画点操作。三、实验步骤1、用菜单画点代码:Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)If i = 5 Then Dim line As New MapObjects2.line Dim evline As New MapObjects2.GeoEvent Set line = Map1.TrackLine Set trackShape = li

31、ne Set evline = Map1.TrackingLayer.AddEvent(line, 0) With Map1.TrackingLayer.Symbol(0) .SymbolType = moFillSymbol .Style = moGrayFill .Color = moGreen .OutlineColor = moGreen End WithEnd IfEnd sub2、用toolbar中的Button进行画点操作代码:Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)Select Ca

32、se Button.Key Case 画线 Call huaxian_Click End SelectEnd Sub3、实验结果:四、实验总结4.1、实验中遇到的困难 若实验中语句使用不当,会导致不能画线,或者只能画一条线。4.2、处理方法和技巧 书上的第一种方法只能画一条线,但只要我们能改变其中一些程序,就能实现全面的画线功能。4.3、经验体会和收获 这次试验做的是运用菜单栏和toolbar中的button进行画线,也就是说用两种方法进行画线操作。在用书中的第一种画线方法进行画线时,只能画一条线,画第二条线时,第一条线会被覆盖。反复查看也找不到原因。因此就用event方式进行画线操作,才能在

33、窗体上进行画多条线的操作。经过实验,我明白了做事不能只是死板硬套地照抄课本,要学会思考,学会举一反三,学会自己组织语言来完成代码操作,并且能够成功运行它,才能把事情做好。实验七 画面1、 实验目的和要求用一定的程序在图层上进行画点操作。2、 实验内容1、在菜单中设计代码进行画点操作功能。2、用toolbar中的Button进行画点操作。三、实验步骤1、用菜单画点代码:1)画圆:Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)If i = 6 Then Dim ell

34、ipse As New MapObjects2.ellipse Dim evellipse As New MapObjects2.GeoEvent Set ellipse = Map1.TrackCircle Set trackShape = ellipse Set evellipse = Map1.TrackingLayer.AddEvent(ellipse, 0) With Map1.TrackingLayer.Symbol(0) .SymbolType = moFillSymbol .Style = moGrayFill .Color = moBlue .OutlineColor = m

35、oBlue End WithEnd If2)画矩形:If i = 7 Then Dim rectangle As New MapObjects2.rectangle Dim evrectangle As New MapObjects2.GeoEvent Set rectangle = Map1.TrackRectangle Set trackShape = rectangle Set evrectangle = Map1.TrackingLayer.AddEvent(rectangle, 0) With Map1.TrackingLayer.Symbol(0) .SymbolType = mo

36、FillSymbol .Style = moGrayFill .Color = moBlack .OutlineColor = moBlack End WithEnd If3)画多边形:If i = 8 Then Dim polygon As New MapObjects2.polygon Dim evpolygon As New MapObjects2.GeoEvent Set polygon = Map1.TrackPolygon Set trackShape = polygon Set evpolygon = Map1.TrackingLayer.AddEvent(polygon, 0)

37、 With Map1.TrackingLayer.Symbol(0) .SymbolType = moFillSymbol .Style = moGrayFill .Color = moYellow .OutlineColor = moYellow End WithEnd IfEnd SubEnd sub2、用toolbar中的Button进行画点操作代码:Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)Select Case Button.Key Case 画圆 Call huayuan_Click Ca

38、se 画矩形 Call huajuxing_Click Case 画多边形 Call huaduobianxing_Click End SelectEnd Sub3、实验结果:四、实验总结4.1、实验中遇到的困难 实验设计或程序不够健全,导致不能画面或面与面之间会相互影响,效果不好。4.2、处理方法和技巧 根据所学知识以及自己深入研究,找出问题所在,并耐心地找出解决问题的答案。4.3、经验体会和收获 这次试验做的是运用菜单栏和toolbar中的button进行画面,也就是说用两种方法进行画面操作。在用书中的第一种画面方法进行时,只能画一个面,画第二个面时,第一个面会被覆盖。反复查看也找不到原因

39、。因此就用event方式进行画线操作,才能在窗体上进行画多各面的操作。经过实验,我不仅学会了画圆,画矩形,还学会了画任意多边形我明白了做事不能只是死板硬套地照抄课本,要学会思考,学会举一反三,学会自己组织语言来完成代码操作,并且能够成功运行它,才能把事情做好。实验八 按值渲染1、 实验目的和要求了解图层渲染的方法,掌握Renderer属性设置的语法,掌握按值渲染(ValueMapRenderer)的原理,体会按值渲染的特点,并运用程序代码将图层进行按值渲染。2、 实验内容1、运用按值渲染中的固定渲染数值的原理和代码来进行图层渲染。2、运用按值渲染中的固定渲染颜色的原理和代码来进行图层渲染。3、

40、对代码中的各变量值进行修改,观察其变化。三、实验步骤1、按值渲染中的固定数值渲染:程序代码:Dim moRecset As MapObjects2.RecordsetDim oRenderer As New MapObjects2.ValueMapRendererPrivate Sub gudingshuzhi_Click()Dim moRecset1 As MapObjects2.RecordsetDim oRenderer1 As New MapObjects2.ValueMapRenderer Dim sFldname As String Dim oSym As New MapObjec

41、ts2.Symbol Dim strs As New MapObjects2.Strings Dim i As Integer 设置渲染参数 Set moRecset1 = Map1.Layers(0).Records sFldname = AREA Do While Not moRecset1.EOF strs.Add moRecset1(sFldname).ValueAsString moRecset1.MoveNext Loop Set Map1.Layers(0).Renderer = oRenderer1 oRenderer1.Field = sFldname oRenderer1.

42、ValueCount = strs.Count 设置缺省值 oRenderer1.UseDefault = True Set oSym = oRenderer1.DefaultSymbol oSym.Color = moPaleYellow 开始渲染 For i = 0 To oRenderer1.ValueCount - 1 oRenderer1.Value(i) = strs(i) Next i Map1.Refresh 清除对象,为下次点击准备; Set oRenderer1 = Nothing Set moRecset1 = NothingEnd Sub运行结果:2、按值渲染中的固定颜色渲染:Private Sub gudingyanse_Click() With oRenderer .ValueCoun

温馨提示

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

评论

0/150

提交评论