石大《GIS设计与开发》实习指导04图层和数据操作_第1页
石大《GIS设计与开发》实习指导04图层和数据操作_第2页
石大《GIS设计与开发》实习指导04图层和数据操作_第3页
石大《GIS设计与开发》实习指导04图层和数据操作_第4页
石大《GIS设计与开发》实习指导04图层和数据操作_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

第四章图层和数据操作一、实验目的了解基于组件GIS的图层和数据操作,重点掌握通过编写代码的方式加载数据的方法;编写代码实现调整地图图层顺序的功能。二、实验准备完成时间:4学时准备数据:green.shp、landuse.shp、文化宫.jpg三、实验步骤及方法1.添加shape图层使用MapObjects的一个最基本的任务是往你的地图里增加Shape文件。增加Shape文件的步骤:(1)定义一个新的地理数据集对象GeoDataset:DimgdsAsGeoDataset(2)定义一个新的数据连接对象DataConnection:DimdCAsNewMapObjects2.DataConnection(3)定义一个新的地图图层对象MapLayer:DimmLayerAsNewMapObjects2.MapLayer(4)设置DataConnection对象的Database属性为包含Shape文件的文件夹。如:dC.Database="G:\ShiHeZi\shz\greenland"(5)使用DataConnection对象的方法Connect连接到指定的地理空间数据dC.Connect(6)将MapLayer对象的GeoDataset属性设置为DataConnection对象的FileGeoDataset方法(用Shape文件名作参数)的返回值。如:SetmLayer.GeoDataset=dC.FindGeoDataset("green")(7)用地图控件属性Layers对象的的方法Add向层集里加入图层。Map1.Layers.AddmLayer主要属性:Name:String,图层的名称GeoDataSet:GeoDataSet,为Maplayer对象指定一个地理数据集,只读属性。Records:RecordSet,表示图层属性表中的记录集Render:Object,指定渲染方法LayerType:LayerTypeConstants,返回一个值表示此图层是一个ImageLayer还是MapLayer。对于Maplayer对象,此属性值为moMapLayer(0)moMapLayer0此图层表示矢量图层MapLayermoImageLayer1此图层表示影像图层ImageLayerShapeType:ShapeTypeConstants,表示矢量图层的要素类型moShapeTypePoint21点对象moShapeTypeLine22线对象【例1】添加一个指定路径的Shape文件,示例程序如下:DimgSetAsMapObjects2.GeoDataset'定义地理数据集DimdConAsNewMapObjects2.DataConnection'定义数据链接DimnewLayerAsNewMapObjects2.MapLayerdCon.Database="g:\ShiHeZi\shz\greenland"IfdCon.ConnectThenSetgSet=dCon.FindGeoDataset("green")'FindGeoDataset的参数shape文件的主文件名,没有扩展名mLayer.Symbol.Color=moYellow'用黄色显示道路SetnewLayer.GeoDataset=gSetMap1.Layers.AddnewLayer'将newLayer图层添加到mapControl中Map2.Layers.AddnewLayerSetlayer=Map1.Layers(0)legend1.setMapSourceMap1'获取图层图例legend1.LoadLegendTrue'加载图层图例EndIf【例2】通过对话框添加一个Shape文件(图4.1):背景知识:“部件”添加,控件栏出现CommonDialog控件。CommonDialog控件在VisualBasic和MicrosoftWindows动态连接库Commdlg.dll例程之间提供接口,提供诸如打开和保存文件、设置打印选项、选择颜色和字体等操作的一组标准对话框。运行Windows帮助引擎时,控件还能够显示帮助。CommonDialog控件在运行时不可见。示例程序如下:PrivateSub添加Shape图层_Click()DimbasepathAsStringDimfilenameAsStringDimnewLayerAsNewMapObjects2.MapLayerDimdConAsNewMapObjects2.DataConnectionDimgSetAsMapObjects2.GeoDatasetDimstrAsStringDimtextPosAsLong,periodPosAsLongDimTestAsBooleanDimtempCharAsStringDimfullFileAsString,workspaceAsString,featAttTableAsStringCommonDialog1.Filter="ESRIShapefiles(*.shp)|*.shp"'语法:对话框名.Filter=描述符1|过滤器1|描述符2|过滤器2CommonDialog1.ShowOpenbasepath=CurDir'CurDir函数返回一个Variant(String),用来代表当前的路径,语法'CurDir[(drive)],可选的drive参数是一个字符串表达式,它指定一个存在的驱动器。如果没有指定'驱动器,或drive是零长度字符串(""),则CurDir会返回当前驱动器的路径filename=CommonDialog1.FileTitle'返回当前的文件名Iffilename=""ThenMsgBox("您没有选中任何可用文件!")ExitSubEndIffullFile=Trim$(CommonDialog1.filename)'Trim函数删除字符串首部和尾部(左右两边)的空格,

'LTrim$()去左边空格,'RTrim$()去右边空格'添加shp文件featAttTable=Left$(filename,Len(filename)-4)'得到字符串左部指定个数的字符workspace=basepath'根目录为返回的当前目录dCon.Database=workspaceIfdCon.ConnectThenSetgSet=dCon.FindGeoDataset(featAttTable)IfgSetIsNothingThenMsgBox"打开ESRIShapefiles失败!"ExitSubElsenewLayer.GeoDataset=gSetnewLayer.Name=featAttTableMap1.Layers.AddnewLayerEndIfEndIflegend1.setMapSourceMap1legend1.LoadLegendTrueEndSub图4.1图4.1通过对话框添加.shp层及其结果图2.添加image图层图像往往被作为背景添加到mapControl,MO只能读取并将其显示在mapControl中(通过ImageLayer对象),而不能对图像进行管理和修改。图像层不包括数据库,也不需要连接数据集。mapControl对图像的支持取决于安装MO的图像支持选项。注意:添加的图像须具有与shp相同的坐标系统及投影系统,否则无法在同一mapControl中显示【例3】通过对话框添加图像层,示例程序如下(图4.2):PrivateSub添加图像_Click()DimiLayerAsNewMapObjects2.ImageLayer'定义新的图像层DimcountAsLongCommonDialog1.Filter="WindowsBitmap(*.bmp)|*.bmp|TIFFImage(*.tif)|*.tif|JPG图片(*.jpg)|*.jpg|IMG图片(*.img)|*.img"'定义能加载图像类型及扩展名CommonDialog1.FilterIndex=1CommonDialog1.InitDir=App.Path'初始返回或设置的文件目录CommonDialog1.ShowOpen'显示“打开”对话框IfCommonDialog1.filename<>""Then'如果文件名不为空,确定有选定的文件iLayer.File=CommonDialog1.filename'将对话框中选定的文件名传递给Layercount=Map1.Layers.countIfMap1.Layers.Add(iLayer)Then'将iLayer图像层添加到mapControl中Map1.Layers.MoveToBottom(count-1)'将图像层移动到mapControl底层EndIfEndIflegend1.setMapSourceMap1legend1.LoadLegendTrueEndSub如果是添加固定路径的图像文件:iLayer.File="g:\ShiHeZi\shz\greenland"'定义打开的图像的路径map1.Layers.AddiLayer'将iLayer图像层添加到mapControl中图4.2图4.2通过对话框添加图像层及其结果图3.图层数目Map.Layers是图层集合,其中count属性为图层控制器中容纳的图层数目,即Map.Layers.count返回图层数目。4.访问图层Map.Layers是图层集合,图层索引索引(index)的起始号是0,新增的图层总是在最上面,索引总是0,已有图层的索引号按顺序递增。图层在地图空间中的显示顺序与其在层集中的索引顺序相反,有以下两种方式访问或引用图层:(1)通过图层名访问图层DimnewLayerAsNewMapObjects2.MapLayerSetnewLayer=map1.Layers.Item(“green”)'获取图层名为green的图层(2)通过图层索引访问图层SetnewLayer=map1.Layers.Item(0)'获取第一层图层(索引为0)【例4】将图层中第2层名为“green”的图层的颜色改为蓝色,示例程序如下:map1.Layers.Item(2).Symbol.Color=vbBluemap1.Layers(2).Symbol.Color=vbBluemap1.Layers.Item(“green”).Symbol.Color=vbBluemap1.Layers(“green”).Symbol.Color=vbBlue(3)访问当前活动图层ActiveLayer:获取当前活动图层,必须借助图例legend完成,图例中的活动图层(被点击图层)即mapControl中的活动图层,legend依据图层索引检索。DimIndexAsLongIndex=legend1.getActiveLayer'获取图例中活动图层的索引号5.改变图层次序图层在mapControl中的显示和存储是有顺序的,其遮盖关系也是由图层次序决定的。可使用Layers集合的Moveto、MoveToButtom、MoveToTop方式改变;★语法:Layers.MoveTofromindex,toindexLayers.MoveToButtomindexLayers.MoveToTopindex当MapControl中需要显示的地图信息发生改变时(地图显示范围变化、图层次序变化、图层显示方式变化、地理数据被修改等),需要将MapControl中的地图进行重画,这时必须在这些操作后手动添加并调用Refresh方法以手动更新地图显示:语法:Map.Refresh注意:如下操作将会自动调用Refresh,无需编程调用Refresh:向layers集合中添加Maplayer图层或Imagelayer图像层;使用Clear或Remove方法从layers集合中删除图层;使用Pan和CenterAt对象移动MapControl当前显示范围;改变MapControl的Extent属性进而改变前显示范围;【例5】原来图层在第2层,用以下语句可以把它移动到第1层:Map1.Layers.MoveTo2,1【例6】原来图层在第2层,用以下语句可以把它移动到顶层:Map1.Layers.MoveToTop2移动后,原来处于它上层的图层均向下移动一层;【例7】原来图层在第2层,用以下语句可以把它移动到顶层:Map1.Layers.MoveToButtom2移动后,原来处于它下层的图层均向上移动一层;【例8】将当前活动图层上移,示例程序如下::PrivateSub上移图层_Click()'提取被选择图层的索引,DimIndexAsLongIndex=legend1.getActiveLayer'提取被选择图层的索引IfIndex>=1Then'确定当前有活动图层Map1.Layers.MoveToIndex,Index-1'MapLayer的第一层图层索引为0,越底层索引越大,上移图层即将当前有活动图层索引-1Map2.Layers.MoveToIndex,Index-1Map1.RefreshMap2.Refres

温馨提示

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

评论

0/150

提交评论