《计算机地图制图上机实习报告(共21页).doc》由会员分享,可在线阅读,更多相关《计算机地图制图上机实习报告(共21页).doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上计算机地图制图实验指导书课程编号:课程英文名称:Computer Aided Cartography学时数: 36 学分数:3适用层次和专业: 地理信息系统专业实验一 添加地图控件1. 实验目的:熟悉VB+MapObject编程环境,map控件右键添加地图,显示地图运行成功2.实验内容:(1) MapObjects的概念MapObjects是一组供应用开发人员使用的制图与GIS功能组件。它有一个叫Map控件的ActiveX控件和一系列可编程的ActiveX对象组成,它们可以在标准的Windows编程环境下使用。利用MapObjects开发人员可以在应用程序中添加制图和
2、GIS功能。它不是为最终用户而是专门为开发人员提供的。开发人员可在熟悉和喜欢的开发环境中利用MapObjects开发出系统开销小的制图应用,或在现有的应用中添加制图功能。n MapObjects的功能使用MapObjects,你可以完成以下这些功能:(1)显示具有多个地图层的地图、如道路、河流和边界线等;(2)放大、缩小和漫游整个地图;(3)显示图形特征(Feature),如点、线;(4)显示标注字符;(5)通过点击识别图上特征;(6)选择沿线的特征和在矩形、区域、多边形和圆内的特征;(7)选择在已知特征附近规定距离内的特征;(8)使用SQL语句查询持征;(9)对选择的特征进行基本的统计;(1
3、0)查询和更新选择特征的属性数据(Shape格式);(11)用特定的方法对特征进行着色处理,如ValueMapRenderer,Class-BreakRenderer,DotDensityRenderer; (12)用字段值的字符标注特征; (13)显示多种格式的栅格图像文件; (14)动态显示实时或时间系列的数据; (15)输出地理匹配的地理位置。n MapObjects的结构 MapObjects是建立在微软的对象连接和嵌入(ActiveX)基础之上的。ActiveX是当今得到广泛支持的面向对象的软件集成技术。用户像用砖块盖房子一样利用ActiveX组件开发和集成Windows应用程序。
4、一个ActiveX控件是一个可重复使用的软件组件。ActiveX控件可以将许多其他ActiveX对象包装在一个包中。这个包可以反映某些特定的功能,如统计图和多媒体等,并可以直接嵌入支持ActiveX的应用中。ActiveX对象具有特征和方法,可以通过对它们的编程来控制对象的外观、行为以及相互作用。 MapObjects是一个提供制图与GIS功能的ActiveX控件,它包含35个可编程的ActiveX对象。MapObjects地图控件可以直接插入到许多标准开发环境的工具集中。可以通过属性页操纵地图。这些属性页是在诸如VisualBasic之类的开发环境中建立的,或者通过其他程序化相关对象来控制地
5、图。 这些对象为应用开发人员提供了有力的制图与GIS功能支持。因为MapObjects是一个ActiveX控件,它又可以用于大量开发框架中,包括流行的像VB、VC、Delphi、Microsoft Acccss、FoxPro、PowerBuild等之类的程序设计环境。n MapObjects的特点MapObjects允许定制利用制图和GIS组件的应用程序,MapObjects的特点包括:(1)支持ARC/INFO层(Coverage);(2)支持ESRI的Shape文件格式,SDE(空间数据库引擎)图层(Layer)以及大量栅格格式,如BMP、TIFF等;(3)支持通过微软ODBC规范进行的外
6、部数据库访问;(4)把数据作为多个图层在一张图中进行显示,当然可进行图幅的变化;(5)特征表示使用数理方法如数值地图、分类、个体符号以及点值图等;(6)文字注记和放置;(7)用一个事件跟踪层来动态显示实时数据;(8)用标准SQL表达式进行特征选择和查询;(9)通过大量搜索与框架操作特进行空间选择;(10)地址匹配(地理编码);(11)强大而出色的对象模型。n MapObjects可以满足哪些用户要求 任何应用开发人员都能利用MapObjects在应用中加入地图,一些从MapObjects中获益的开发者将成为ESRI公司软件的用户。许多人可能只有很简单的要求,比如在应用中加入生动的地图。另一些人
7、则可能把MapObjects与其他技术一起使用建立更加复杂的系统。使用MapObjects建立应用程序的开发人员包括: 数据出版商 软件产品开发商 纵向市场应用开发商 咨询业者 SDE开发者 公司客户(2) 在Visual Basic下使用MapObjects 安装MapObjects之后,打开Visual Basic的程序开发环境,在左边的控件点击右键将弹出控件选择柜。选择ESRI MapObjects后,控件中将增加一个Map的控件。现在可以进行MapObjects编程了。n 增加控件 在Form上加一个按钮,并在按键上标注“全图”。如果在应用程序中加入地图,则在控件栏中选择Map控件,然
8、后把光标移人Form中,拖放该图框,地图控件将成为一块空白色区域。n 增加图层在Form上有一个Map控件后,我们必须在上面显示地图特征,如道路、河流和边界线等。右击Map控件,选择属性(property),添加图层运行程序。实验二 实现放大缩小功能1.实验目的: 验证放大、缩小功能,区分放在Button click和Map1的Mousedown事件中的区别 2.实验内容:(1) 放大功能(在放大按钮的click事件中,还是map1的mouse down 事件中)方法1.Set Map1.Extent = Map1.TrackRectangle方法2.Dim r As MapObjects2.
9、RectangleSet r = Map1.Extentr.ScaleRectangle 0.5 Map1.Extent = r(2) 缩小功能(在缩小按钮的click事件中,还是map1的mouse down 事件中) Dim r As MapObjects2.Rectangle Set r = Map1.Extent r.ScaleRectangle 1.5 .ScaleRectangle 0.5 应该就是放大了 Map1.Extent = r(3) 怎么区分map1的mouse down 事件,是放大还是缩小?如果两个都同时放在一个事件中?放大和缩小都放在map1的mouse down
10、事件中,怎么办?可采用添加一个变量flag来区分,添加两个按钮控件,分别标注“放大”和“缩小”,在两个按钮的click事件中对flag进行赋值,flag= fangda或suoxiao。在Map1的Mousedown事件中添加以下语句:Select Case flagCase fangda: Zoomin Case suoxiao: Zoomout 并添加以下函数Sub Zoomin ( ) Dim r As MapObjects2.RectangleSet r = Map1.Extentr.ScaleRectangle 0.5 Map1.Extent = rEnd SubSub Zoomou
11、t ( ) Dim r As MapObjects2.Rectangle Set r = Map1.Extent r.ScaleRectangle 1.5 .ScaleRectangle 0.5 应该就是放大了 Map1.Extent = rEnd Sub实验三 实现平移和全图功能1.实验目的: 验证平移和全图功能,添加flag变量,在Map1的Mousedown事件中分别实现放大、缩小、平移和全图2.实验内容:(1) 平移功能(在平移按钮的click事件中,还是map1的mouse down 事件中)Map1.Pan(2) 全图功能Map1.Extent = Map1.FullExtent(
12、3) 可采用添加一个变量flag来区分添加四个按钮控件,分别标注“放大”、“缩小”、“平移”和“全图”,在四个按钮的click事件中分别对flag进行赋值,flag= fangda、suoxiao、pingyi、quantu,即添加如下代码:flag= fangdaflag=suoxiaoflag=pingyi flag=quantu在Map1的Mousedown事件中添加以下语句:Select Case flagCase fangda: Zoomin Case suoxiao: Zoomout Case pingyi: Panfuc Case quantu: Quantu 并添加以下函数Su
13、b Zoomin ( ) Dim r As MapObjects2.RectangleSet r = Map1.Extentr.ScaleRectangle 0.5 Map1.Extent = rEnd SubSub Zoomout ( ) Dim r As MapObjects2.Rectangle Set r = Map1.Extent r.ScaleRectangle 1.5 .ScaleRectangle 0.5 应该就是放大了 Map1.Extent = rEnd SubSub Panfuc ( ) Map1.PanEnd SubSub Quantu ( ) Map1.Extent
14、= Map1.FullExtentEnd Sub实验四 添加工具栏1.实验目的: 添加工具栏,分别实现放大、缩小、平移和全图2.实验内容:添加工具栏要使用VB的扩展控件:ToolBar, ImageList。这两个扩展控件开始的时候并不在工具箱中,使用的时候需要使用VB的“工程”菜单添加。具体步骤是:选择菜单工程部件,添加microsoft windows common controls 6.0或microsoft windows common controls 5.0后,这样就可以在左边的工具箱中找到ToolBar, ImageList。然后,把ToolBar, ImageList拖放到Fo
15、rm中就可以了。步骤如下:l 在窗体上放置ImageList控件l 设置ImageList1的属性,增加图片ZoomIn.bmp; ZoomOut.bmp; Pan.bmp; Globe.bmp l 在窗体上放置ToolBar控件l 设置ToolBar1的属性,将ToolBar1的图像列表设置为ImageList1;增加按钮ZoomIn,ZoomOut,Pan,设置样式为2-tbrButtonGroup,并设置相应的显示图片;增加第4个按钮设置样式为4-tbrPlaceholder;增加第5个按钮btnFullExtent设置图片为Globe.bmp注意:VB控件库 Microsoft Win
16、dows Common Controls 6.0 中包含ToolBar 和ImageList控件要求设计至少有放大、缩小、平移和全图等工具按钮的工具栏。实验五 设置鼠标形状,加固定shp文件1.实验目的: (1) 鼠标形状(2) 添加固定图层2.实验内容:(1) 显示不同鼠标形状在相应按钮(放大、平移、缩小和全图)的click事件中分别加入以下代码(或在工具栏的click事件中加入以下代码):Map1.MousePointer = moZoomInMap1.MousePointer = moPanMap1.MousePointer = moZoomOutMap1.MousePointer =
17、moDefault(2) 加载固定文件夹下的shp文件Dim dc As New DataConnectionDim layer As MapLayerdc.Database = App.Path If Not dc.Connect Then MsgBox 在指定的文件夹下没找到图层数据文件! End End If Set layer = New MapLayer Set layer.GeoDataset = dc.FindGeoDataset(States) Map1.Layers.Add layer Set layer = New MapLayer Set layer.GeoDataset
18、 = dc.FindGeoDataset(Rivers) Map1.Layers.Add layer Map1.Refresh实验六 以对话框形式加shp图层1.实验目的: 验证以打开对话框的形式打开MapObjects支持的所有格式中shp格式的图层,完成显示。掌握CommandDialog 组件添加图层的方法2.实验内容:导入CommonDialog 组件,这一组件在对象库Microsoft Common Dialog Control 6.0 中。添加Map控件,Conmon Dialog 控件,并将其名称改为cDlg1,添加一个按钮。在Form上增加一个标注“增加图层”的按钮,并增加Vi
19、sual Basic的CommonDialog控件,以便确定Shape文件的路径和文件名。双击增加图层按钮就可以编程了,增加以下的VB语句。Private Sub Commandl_Click() 打开对话框的方式添加图层 CommonDialog1.CancelError = True CommonDialog1.DialogTitle = 选择地图文件 Dim oConnect As New DataConnection Dim oDataset As GeoDataset Dim sName As String Dim oLayer As MapObjects2.MapLayer Com
20、monDialog1.Filter = ESRI Shapefiles (*.shp)|*.shp CommonDialog1.ShowOpen If Len(CommonDialog1.FileName) = 0 Then Exit Sub oConnect.Database = CurDir If Not oConnect.Connect Then Exit Sub sName = Left(CommonDialog1.FileTitle, Len(CommonDialog1.FileTitle) - 4) Set oDataset = oConnect.FindGeoDataset(sN
21、ame) If oDataset Is Nothing Then Exit Sub Set oLayer = New MapLayer oLayer.GeoDataset = oDataset Map1.Layers.Add oLayer Map2.Layers.Add oLayer legend1.setMapSource Map1 legend1.LoadLegend True Map1.RefreshEnd Sub执行程序,点击增加图层按钮,并选择所要显示的shape文件名。可以改变Map控件的属性,如Map的大小、滚动条的设置、图层及基本图层表示、背景颜色的设置,这些属性页在VB的整个
22、设计过程中都存在。可以预置所有图层以及它们的显示属性,或者可以建立一个界面,让最终用户可以指定要删除或插入的图层以及它们的代表符号。实验七 以对话框打开栅格格式图层1.实验目的: 验证以打开对话框的形式打开MapObjects支持的栅格图层,完成显示2.实验内容: 打开栅格图层Public Sub addImage() Dim fullFile As String Dim ilyr As New MapObjects2.ImageLayer cDlg1.CancelError = True On Error GoTo FileOpenCancel cDlg1.Filter = Standard
23、 image formats |*.bmp;*.dib;*.tif;*.jpg;*.jff;*.bil;*.bip;*.bsq;*.gis;*.lan;*.rlc;*.sid;*.sun;*.rs;*.ras;*.svf;*.img;*.gif cDlg1.DialogTitle = Select file for new layer cDlg1.ShowOpen If cDlg1.FileTitle = Then Exit Sub fullFile = Trim$(cDlg1.FileName) ilyr.File = fullFile Map1.Layers.add ilyrExit Su
24、bFileOpenCancel: Exit SubEnd SubPrivate Sub raster_Click(Index As Integer)Call addImageEnd Sub实验八 图层的显示、隐藏、添加和清除1.实验目的: 验证图层的显示和隐藏、添加和清除2.实验内容:(1) 清除图层 Set layer = Map1.Layers(0)Layer.Clear 清除Map1的所有图层。Map1.Refresh(2) 使图层隐藏Set layer = Map1.Layers(0)layer.Visible = false TrueMap1.Refresh(3) 使图层可见Set
25、layer = Map1.Layers(0)layer.Visible = TrueMap1.Refresh实验九 用legend显示和控制图层1.实验目的 (1) 用legend显示和控制图层,熟悉MO的legend的方法和属性;(2) 用list控件显示和控制图层2.实验内容(1)用legend显示和控制图层添加legend控件,这一控件在对象库esri mapobjects lengend control 中。加入legend部件到工程中,实现legend与Map1控件中图层的联动,具体过程如下:n 在legend1_AfterSetLayerVisibl事件中加入Map1.Refres
26、hn 在程序中加图层后,map1.refresh前加legend1.setMapSource Map1legend1.LoadLegend Truen 在图层隐藏和可见的地方加legend1.LayerVisible(0) = False or truen 在清除图层的地方(Map1.Layers.Clear)加legend1.RemoveAll或者加 legend1.setMapSource Map1 legend1.LoadLegend True(2)用list控件显示和控制图层n 置顶当前图层Private Sub lstLayers_DblClick() Dim lyr As MapO
27、bjects2.MapLayer If lstLayers.ListIndex -1 Then Map1.Layers.MoveToTop lstLayers.ListIndex Map1.Refresh lstLayers.Clear For Each lyr In Map1.Layers lstLayers.AddItem lyr.Name Next lyr End IfEnd Subn 上移图层Private Sub Command2_Click() Dim i As Integer Dim lyr As MapObjects2.MapLayer If lstLayers.ListInd
28、ex -1 And lstLayers.ListIndex 0 Then i = lstLayers.ListIndex - 1 Map1.Layers.MoveTo lstLayers.ListIndex, i Map1.Refresh lstLayers.Clear For Each lyr In Map1.Layers lstLayers.AddItem lyr.Name Next lyr lstLayers.Selected(i) = True End IfEnd Subn 下移图层Private Sub Command4_Click() Dim i As Integer Dim ly
29、r As MapObjects2.MapLayer If lstLayers.ListIndex -1 And lstLayers.ListIndex = 0 Then Exit Sub If Map1.Layers(0).Records.Fields(Combo1.List(Combo1.ListIndex).Type = moString Then strExpression = Combo1.List(Combo1.ListIndex) & & Combo2.List(Combo2.ListIndex) & & Combo3.Text & Else strExpression = Com
30、bo1.List(Combo1.ListIndex) & & Combo2.List(Combo2.ListIndex) & & Combo3.Text End If Set recSelection = Map1.Layers(0).SearchExpression(strExpression) If Not recSelection.EOF Then Map1.DrawShape recSelection, g_symSelection End If Set recSelection = NothingEnd SubPrivate Sub Command1_Click() Map1.Ref
31、reshEnd SubPrivate Sub Form_Load() DrawLayer If Not Map1.Layers.Count = 1 Then End Label1.Caption = 选择表达式: Command1.Caption = 查找 With Combo1 Dim fldLyr As MapObjects2.Field For Each fldLyr In Map1.Layers(0).Records.Fields If fldLyr.Type 20 Then .AddItem fldLyr.Name End If Next fldLyr .ListIndex = 0
32、End With With Combo2 .AddItem = .AddItem .AddItem = .AddItem Like .ListIndex = 0 End With Combo3.Text = Call ListValues Set g_symSelection = New MapObjects2.Symbol With g_symSelection .SymbolType = Map1.Layers(0).Symbol.SymbolType .color = moDarkGreen End WithEnd SubPrivate Sub Combo1_Click() Dim re
33、cLyr As MapObjects2.Recordset Dim strName As String If Len(Combo1.List(Combo1.ListIndex) 0 Then Set recLyr = Map1.Layers(0).Records strName = Combo1.List(Combo1.ListIndex) Combo3.Clear Do While Not recLyr.EOF Combo3.AddItem recLyr.Fields(strName).ValueAsString recLyr.MoveNext Loop End IfEnd Sub实验十四 窗口重新布局时,各控件的布局调整1.实验目的 验证窗口重新布局(最大化、最小化、还原等)时,各控件的布局调整(以同一比例方式来布局)2.实验内容窗口放大时,各个控件的重新布局(search用表达式的方式)Private Sub Form_Resize() Map1.Move 60, 60, Me.ScaleWidth - 180, Me.ScaleHeight - 2000 Label1.Move Map1.Left, Map1.Top + Map1.Heigh