计算机地图制图上机实习报告.docx
- 文档编号:7202373
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:21
- 大小:114.60KB
计算机地图制图上机实习报告.docx
《计算机地图制图上机实习报告.docx》由会员分享,可在线阅读,更多相关《计算机地图制图上机实习报告.docx(21页珍藏版)》请在冰豆网上搜索。
计算机地图制图上机实习报告
《计算机地图制图》实验指导书
课程编号:
课程英文名称:
ComputerAidedCartography
学时数:
36学分数:
3
适用层次和专业:
地理信息系统专业
实验一添加地图控件
1.实验目的:
熟悉VB+MapObject编程环境,map控件右键添加地图,显示地图运行成功
2.实验内容:
(1)MapObjects的概念
MapObjects是一组供应用开发人员使用的制图与GIS功能组件。
它有一个叫Map控件的ActiveX控件和一系列可编程的ActiveX对象组成,它们可以在标准的Windows编程环境下使用。
利用MapObjects开发人员可以在应用程序中添加制图和GIS功能。
它不是为最终用户而是专门为开发人员提供的。
开发人员可在熟悉和喜欢的开发环境中利用MapObjects开发出系统开销小的制图应用,或在现有的应用中添加制图功能。
⏹MapObjects的功能
使用MapObjects,你可以完成以下这些功能:
(1)显示具有多个地图层的地图、如道路、河流和边界线等;
(2)放大、缩小和漫游整个地图;
(3)显示图形特征(Feature),如点、线;
(4)显示标注字符;
(5)通过点击识别图上特征;
(6)选择沿线的特征和在矩形、区域、多边形和圆内的特征;
(7)选择在已知特征附近规定距离内的特征;
(8)使用SQL语句查询持征;
(9)对选择的特征进行基本的统计;
(10)查询和更新选择特征的属性数据(Shape格式);
(11)用特定的方法对特征进行着色处理,如ValueMapRenderer,Class-BreakRenderer,DotDensityRenderer;
(12)用字段值的字符标注特征;
(13)显示多种格式的栅格图像文件;
(14)动态显示实时或时间系列的数据;
(15)输出地理匹配的地理位置。
⏹MapObjects的结构
MapObjects是建立在微软的对象连接和嵌入(ActiveX)基础之上的。
ActiveX是当今得到广泛支持的面向对象的软件集成技术。
用户像用砖块盖房子一样利用ActiveX组件开发和集成Windows应用程序。
一个ActiveX控件是一个可重复使用的软件组件。
ActiveX控件可以将许多其他ActiveX对象包装在一个包中。
这个包可以反映某些特定的功能,如统计图和多媒体等,并可以直接嵌入支持ActiveX的应用中。
ActiveX对象具有特征和方法,可以通过对它们的编程来控制对象的外观、行为以及相互作用。
MapObjects是一个提供制图与GIS功能的ActiveX控件,它包含35个可编程的ActiveX对象。
MapObjects地图控件可以直接插入到许多标准开发环境的工具集中。
可以通过属性页操纵地图。
这些属性页是在诸如VisualBasic之类的开发环境中建立的,或者通过其他程序化相关对象来控制地图。
这些对象为应用开发人员提供了有力的制图与GIS功能支持。
因为MapObjects是一个ActiveX控件,它又可以用于大量开发框架中,包括流行的像VB、VC、Delphi、MicrosoftAcccss、FoxPro、PowerBuild等之类的程序设计环境。
⏹MapObjects的特点
MapObjects允许定制利用制图和GIS组件的应用程序,MapObjects的特点包括:
(1)支持ARC/INFO层(Coverage);
(2)支持ESRI的Shape文件格式,SDE(空间数据库引擎)图层(Layer)以及大量栅格格式,如BMP、TIFF等;
(3)支持通过微软ODBC规范进行的外部数据库访问;
(4)把数据作为多个图层在一张图中进行显示,当然可进行图幅的变化;
(5)特征表示使用数理方法如数值地图、分类、个体符号以及点值图等;
(6)文字注记和放置;
(7)用一个事件跟踪层来动态显示实时数据;
(8)用标准SQL表达式进行特征选择和查询;
(9)通过大量搜索与框架操作特进行空间选择;
(10)地址匹配(地理编码);
(11)强大而出色的对象模型。
⏹MapObjects可以满足哪些用户要求
任何应用开发人员都能利用MapObjects在应用中加入地图,一些从MapObjects中获益的开发者将成为ESRI公司软件的用户。
许多人可能只有很简单的要求,比如在应用中加入生动的地图。
另一些人则可能把MapObjects与其他技术一起使用建立更加复杂的系统。
使用MapObjects建立应用程序的开发人员包括:
✧数据出版商
✧软件产品开发商
✧纵向市场应用开发商
✧咨询业者
✧SDE开发者
✧公司客户
(2)在VisualBasic下使用MapObjects
安装MapObjects之后,打开VisualBasic的程序开发环境,在左边的控件点击右键将弹出控件选择柜。
选择ESRIMapObjects后,控件中将增加一个Map的控件。
现在可以进行MapObjects编程了。
⏹增加控件
在Form上加一个按钮,并在按键上标注“全图”。
如果在应用程序中加入地图,则在控件栏中选择Map控件,然后把光标移人Form中,拖放该图框,地图控件将成为一块空白色区域。
⏹增加图层
在Form上有一个Map控件后,我们必须在上面显示地图特征,如道路、河流和边界线等。
右击Map控件,选择属性(property),添加图层运行程序。
实验二实现放大缩小功能
1.实验目的:
验证放大、缩小功能,区分放在Buttonclick和Map1的Mousedown事件中的区别
2.实验内容:
(1)放大功能(在放大按钮的click事件中,还是map1的mousedown事件中)
'方法1.
SetMap1.Extent=Map1.TrackRectangle
'方法2.
DimrAsMapObjects2.Rectangle
Setr=Map1.Extent
r.ScaleRectangle0.5
Map1.Extent=r
(2)缩小功能(在缩小按钮的click事件中,还是map1的mousedown事件中)
DimrAsMapObjects2.Rectangle
Setr=Map1.Extent
r.ScaleRectangle1.5'.ScaleRectangle0.5应该就是放大了
Map1.Extent=r
(3)怎么区分map1的mousedown事件,是放大还是缩小?
如果两个都同时放在一个事件中?
放大和缩小都放在map1的mousedown事件中,怎么办?
可采用添加一个变量flag来区分,添加两个按钮控件,分别标注“放大”和“缩小”,在两个按钮的click事件中对flag进行赋值,flag="fangda"或"suoxiao"。
在Map1的Mousedown事件中添加以下语句:
SelectCaseflag
Case"fangda":
Zoomin
Case"suoxiao":
Zoomout
并添加以下函数
SubZoomin()
DimrAsMapObjects2.Rectangle
Setr=Map1.Extent
r.ScaleRectangle0.5
Map1.Extent=r
EndSub
SubZoomout()
DimrAsMapObjects2.Rectangle
Setr=Map1.Extent
r.ScaleRectangle1.5'.ScaleRectangle0.5应该就是放大了
Map1.Extent=r
EndSub
实验三实现平移和全图功能
1.实验目的:
验证平移和全图功能,添加flag变量,在Map1的Mousedown事件中分别实现放大、缩小、平移和全图
2.实验内容:
(1)平移功能(在平移按钮的click事件中,还是map1的mousedown事件中)
Map1.Pan
(2)全图功能
Map1.Extent=Map1.FullExtent
(3)可采用添加一个变量flag来区分
添加四个按钮控件,分别标注“放大”、“缩小”、“平移”和“全图”,在四个按钮的click事件中分别对flag进行赋值,flag="fangda"、"suoxiao"、"pingyi"、"quantu",即添加如下代码:
flag="fangda"
flag="suoxiao"
flag="pingyi"
flag="quantu"
在Map1的Mousedown事件中添加以下语句:
SelectCaseflag
Case"fangda":
Zoomin
Case"suoxiao":
Zoomout
Case"pingyi":
Panfuc
Case"quantu":
Quantu‘
并添加以下函数
SubZoomin()
DimrAsMapObjects2.Rectangle
Setr=Map1.Extent
r.ScaleRectangle0.5
Map1.Extent=r
EndSub
SubZoomout()
DimrAsMapObjects2.Rectangle
Setr=Map1.Extent
r.ScaleRectangle1.5'.ScaleRectangle0.5应该就是放大了
Map1.Extent=r
EndSub
SubPanfuc()
Map1.Pan
EndSub
SubQuantu()
Map1.Extent=Map1.FullExtent
EndSub
实验四添加工具栏
1.实验目的:
添加工具栏,分别实现放大、缩小、平移和全图
2.实验内容:
添加工具栏要使用VB的扩展控件:
ToolBar,ImageList。
这两个扩展控件开始的时候并不在工具箱中,使用的时候需要使用VB的“工程”菜单添加。
具体步骤是:
选择菜单"工程"—>"部件",添加microsoftwindowscommoncontrols6.0或microsoftwindowscommoncontrols5.0后,这样就可以在左边的工具箱中找到ToolBar,ImageList。
然后,把ToolBar,ImageList拖放到Form中就可以了。
步骤如下:
●在窗体上放置ImageList控件
●设置ImageList1的属性,增加图片ZoomIn.bmp;ZoomOut.bmp;Pan.bmp;Globe.bmp
●在窗体上放置ToolBar控件
●设置ToolBar1的属性,将ToolBar1的图像列表设置为ImageList1;增加按钮ZoomIn,ZoomOut,Pan,设置样式为2-tbrButtonGroup,并设置相应的显示图片;增加第4个按钮设置样式为4-tbrPlaceholder;增加第5个按钮btnFullExtent设置图片为Globe.bmp
注意:
VB控件库MicrosoftWindowsCommonControls6.0中包含ToolBar和ImageList控件
要求设计至少有放大、缩小、平移和全图等工具按钮的工具栏。
实验五设置鼠标形状,加固定shp文件
1.实验目的:
(1)鼠标形状
(2)添加固定图层
2.实验内容:
(1)显示不同鼠标形状
在相应按钮(放大、平移、缩小和全图)的click事件中分别加入以下代码(或在工具栏的click事件中加入以下代码):
Map1.MousePointer=moZoomIn
Map1.MousePointer=moPan
Map1.MousePointer=moZoomOut
Map1.MousePointer=moDefault
(2)加载固定文件夹下的shp文件
DimdcAsNewDataConnection
DimlayerAsMapLayer
dc.Database=App.Path
IfNotdc.ConnectThen
MsgBox"在指定的文件夹下没找到图层数据文件!
"
End
EndIf
Setlayer=NewMapLayer
Setlayer.GeoDataset=dc.FindGeoDataset("States")
Map1.Layers.Addlayer
Setlayer=NewMapLayer
Setlayer.GeoDataset=dc.FindGeoDataset("Rivers")
Map1.Layers.Addlayer
Map1.Refresh
实验六以对话框形式加shp图层
1.实验目的:
验证以打开对话框的形式打开MapObjects支持的所有格式中shp格式的图层,完成显示。
掌握CommandDialog组件添加图层的方法
2.实验内容:
导入CommonDialog组件,这一组件在对象库MicrosoftCommonDialogControl6.0中。
添加Map控件,ConmonDialog控件,并将其名称改为cDlg1,添加一个按钮。
在Form上增加一个标注“增加图层”的按钮,并增加VisualBasic的CommonDialog控件,以便确定Shape文件的路径和文件名。
双击增加图层按钮就可以编程了,增加以下的VB语句。
PrivateSubCommandl_Click()
‘打开对话框的方式添加图层
CommonDialog1.CancelError=True
CommonDialog1.DialogTitle="选择地图文件"
DimoConnectAsNewDataConnection
DimoDatasetAsGeoDataset
DimsNameAsString
DimoLayerAsMapObjects2.MapLayer
CommonDialog1.Filter="ESRIShapefiles(*.shp)|*.shp"
CommonDialog1.ShowOpen
IfLen(CommonDialog1.FileName)=0ThenExitSub
oConnect.Database=CurDir
IfNotoConnect.ConnectThenExitSub
sName=Left(CommonDialog1.FileTitle,Len(CommonDialog1.FileTitle)-4)
SetoDataset=oConnect.FindGeoDataset(sName)
IfoDatasetIsNothingThenExitSub
SetoLayer=NewMapLayer
oLayer.GeoDataset=oDataset
Map1.Layers.AddoLayer
Map2.Layers.AddoLayer
legend1.setMapSourceMap1
legend1.LoadLegendTrue
Map1.Refresh
EndSub
执行程序,点击增加图层按钮,并选择所要显示的shape文件名。
可以改变Map控件的属性,如Map的大小、滚动条的设置、图层及基本图层表示、背景颜色的设置,这些属性页在VB的整个设计过程中都存在。
可以预置所有图层以及它们的显示属性,或者可以建立一个界面,让最终用户可以指定要删除或插入的图层以及它们的代表符号。
实验七以对话框打开栅格格式图层
1.实验目的:
验证以打开对话框的形式打开MapObjects支持的栅格图层,完成显示
2.实验内容:
‘打开栅格图层
PublicSubaddImage()
DimfullFileAsString
DimilyrAsNewMapObjects2.ImageLayer
cDlg1.CancelError=True
OnErrorGoToFileOpenCancel
cDlg1.Filter="Standardimageformats|*.bmp;*.dib;*.tif;*.jpg;*.jff;*.bil;*.bip;*.bsq;*.gis;*.lan;*.rlc;*.sid;*.sun;*.rs;*.ras;*.svf;*.img;*.gif"
cDlg1.DialogTitle="Selectfilefornewlayer"
cDlg1.ShowOpen
IfcDlg1.FileTitle=""ThenExitSub
fullFile=Trim$(cDlg1.FileName)
ilyr.File=fullFile
Map1.Layers.addilyr
ExitSub
FileOpenCancel:
ExitSub
EndSub
PrivateSubraster_Click(IndexAsInteger)
CalladdImage
EndSub
实验八图层的显示、隐藏、添加和清除
1.实验目的:
验证图层的显示和隐藏、添加和清除
2.实验内容:
(1)清除图层
Setlayer=Map1.Layers(0)
Layer..Clear'清除Map1的所有图层。
Map1.Refresh
(2)使图层隐藏
Setlayer=Map1.Layers(0)
layer.Visible=false’True
Map1.Refresh
(3)使图层可见
Setlayer=Map1.Layers(0)
layer.Visible=True
Map1.Refresh
实验九用legend显示和控制图层
1.实验目的
(1)用legend显示和控制图层,熟悉MO的legend的方法和属性;
(2)用list控件显示和控制图层
2.实验内容
(1)用legend显示和控制图层
添加legend控件,这一控件在对象库esrimapobjectslengendcontrol中。
加入legend部件到工程中,实现legend与Map1控件中图层的联动,具体过程如下:
⏹在legend1_AfterSetLayerVisibl事件中加入Map1.Refresh
⏹在程序中加图层后,map1.refresh前加
legend1.setMapSourceMap1
legend1.LoadLegendTrue
⏹在图层隐藏和可见的地方加legend1.LayerVisible(0)=Falseortrue
⏹在清除图层的地方(Map1.Layers.Clear)加legend1.RemoveAll或者加'legend1.setMapSourceMap1
'legend1.LoadLegendTrue
(2)用list控件显示和控制图层
⏹‘置顶当前图层
PrivateSublstLayers_DblClick()
DimlyrAsMapObjects2.MapLayer
IflstLayers.ListIndex<>-1Then
Map1.Layers.MoveToToplstLayers.ListIndex
Map1.Refresh
lstLayers.Clear
ForEachlyrInMap1.Layers
lstLayers.AddItemlyr.Name
Nextlyr
EndIf
EndSub
⏹‘上移图层
PrivateSubCommand2_Click()
DimiAsInteger
DimlyrAsMapObjects2.MapLayer
IflstLayers.ListIndex<>-1AndlstLayers.ListIndex>0Then
i=lstLayers.ListIndex-1
Map1.Layers.MoveTolstLayers.ListIndex,i
Map1.Refresh
lstLayers.Clear
ForEachlyrInMap1.Layers
lstLayers.AddItemlyr.Name
Nextlyr
lstLayers.Selected(i)=True
EndIf
EndSub
⏹‘下移图层
PrivateSubCommand4_Click()
DimiAsInteger
DimlyrAsMapObjects2.MapLayer
IflstLayers.ListIndex<>-1AndlstLayers.ListIndex i=lstLayers.ListIndex+1 Map1.Layers.MoveTolstLayers.ListIndex,i Map1.Refresh lstLayers.Clear ForEachlyrInMap1.Layers lstLayers.AddItemlyr.Name Nextlyr lstLayers.Selected(i)=True EndIf EndSub 实验十实现鹰眼功能 1.实验目的 添加鹰眼功能,实现两个Map控件的所以联动 2.实验内容 (1)'在加图层的地方给map2加个图层 Map2.Layers.Addlayer (2)'使Map2和Map1联动;map1改变map2 PrivateSubMap1_AfterLayerDraw(ByValIndexAsInteger,ByValcanceledAsBoolean,ByValhdcAsstdole.OLE_HANDLE) IfIndex=0Then Map2.TrackingLayer.RefreshTrue EndIf EndSub (3)'在Map2上画红色指示框; PrivateSubMap2_AfterTrackingLayerDraw(ByValhdcAsstdole.OLE_HANDLE) DimsymAsNewSymbol sym.OutlineColor=moRed sym.Size=2 sym.Style=moTransparentFill Map2.DrawShapeMap1.Extent,sym EndSub (4)'实现用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 地图 制图 上机 实习 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)