收藏 分销(赏)

实验五图层加载与显示控制.doc

上传人:xrp****65 文档编号:6528687 上传时间:2024-12-11 格式:DOC 页数:6 大小:69KB 下载积分:10 金币
下载 相关 举报
实验五图层加载与显示控制.doc_第1页
第1页 / 共6页
实验五图层加载与显示控制.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
GIS二次开发—使用MapObjects 实验五 图层加载与显示控制 一、实验目的 1. 学习程序运行前、运行时MO图层加载的方法 2. 学习SHP图层、SDE图层、CAD 、Coverage图层图层加载和栅格数据加载方法 3. 学习图层顺序控制、显示与否控制、矢量图层色彩控制等 二、实验内容 1. 运用各种不同的方法加载各种矢量图层数据 2. 运用各种方法加载栅格图层数据 3. 图层的上移、下移、隐藏、放大、缩小、漫游 三、实验环境与数据 VB6 MapObjects2.4 Xiangprj.shp Ntschool.shp 四、实验要求 1. 掌握程序运行前、运行时MO图层加载的方法。 2. 掌握SHP图层、Coverage图层、SDE图层、CAD图层加载和栅格数据加载方法。 3. 掌握图层顺序控制、显示与否控制、矢量图层色彩控制等。 五、实验任务 (一)程序演示 1、 演示Shp矢量图层的加载 2、 演示不同格式的栅格图层的加载 3、 演示ArcInfo的Cov格式的图层加载 4、 演示SDE图层的加载 5、 演示CAD图层的加载 6、 显示与隐藏演示 7、 图层顺序控制演示 8、 放大与缩小演示 9、 漫游与全图演示 (二)实现方法 1、 Shp矢量图层的加载 Shp矢量数据的加载分为四个过程: 步骤一 通过定义一个地理数据连接对象Dc,确定Dc连接的数据库,从而建立一个到包含Shp文件的文件夹的连接 步骤二 使用FindGeodataset方法在新建的数据连接下的查找需要的地理数据集合 步骤三 建立一个矢量图层对象,将找到的地理数据集合赋给矢量图层对象的地理数据集合属性 步骤四 将矢量图层添加到地图控件中,刷新地图 将以上过程编写成VB代码如下: '定义一个地理数据连接对象dc '定义一个地理数据集对象gs '定义一个矢量图层对象mlyr Dim dc As New mapobjects2.DataConnection Dim gs As mapobjects2.GeoDataset Dim Mlyr As New mapobjects2.MapLayer '确定地理数据连接对象dc的属性 dc.Database = "E:\mydoc\GIS二次开发\data" '判断连接是否成功 If dc.Connect Then '查找连接对象中指定名称的地理数据集 Set gs = dc.FindGeoDataset("newcun") End If '判断是否是符合要求的地理数据集 If Not gs Is Nothing Then '将找到的地理数据集赋给mlyr的地理数据集对象 Set Mlyr.GeoDataset = gs End If '判断图层是否有效 'If mlyr.Valid Then '将图层加载到地图中 Map1.Layers.Add Mlyr '刷新地图 Map1.Refresh 'End If MsgBox gs.Name 这是直接指定Shp文件所在的文件夹的加载方法,也可以通过通用对话框方式加载。但是基本过程一样。所不同的只是修改数据联接对象的数据库属性和地理数据集的名称属性。具体方法参见实验一。 2、 不同格式的栅格图层的加载 栅格数据加载的方法比较简单,包括一下三个过程: 步骤一 定义一个栅格图层对象ilyr 步骤二 确定这个栅格图层对象使用的栅格数据文件 步骤三 将这个栅格图层对象加载到地图控件中 代码如下: '定义一个栅格图层对象 Dim ilyr As New mapobjects2.ImageLayer '确定这个对象使用的栅格数据文件 ilyr.File = "E:\mydoc\GIS二次开发\data\南通市区图.jpg" '将这个图层对象加载到地图控件中 Map1.Layers.Add ilyr '刷新地图 Map1.Refresh 栅格数据的加载也可以使用通用对话框,不仅利用通用对话框选择文件,也可以利用通用对话框选择不同的栅格数据类型。MapObjects支持的栅格数据类型由安装时的选项确定。 3、 SDE图层的加载 SDE是空间数据引擎的简称,空间数据引擎是操作保存在数据库中的空间数据的软件工具。由于需要操作数据库,所以必须用符合数据库的要求使用数据库。数据库保存了大量的数据,为了安全使用必须使用具有用户权限的用户名和密码,因此在连接SDE时首先需要明确连接的数据库服务器是什么、用户名是什么、密码、数据库。 具体过程如下: 步骤一 建立数据库连接对象,定义数据库连接对象的各种属性,包括服务器、用户名、密码、数据库 步骤二 建立地理数据集对象,运用FindGeodataset方法寻找新建连接下的地理数据集 步骤三 建立矢量图层对象,将找到的地理数据集赋给图层对象的地理数据集属性 步骤四 添加图层 步骤五 刷新地图 Vb代码如下: '定义一个地理数据连接对象dc Dim dc As New MapObjects2.DataConnection '定义一个地理数据集对象gs Dim gs As MapObjects2.GeoDataset '定义一个矢量图层对象lyr Dim lyr As New MapObjects2.MapLayer '定义数据库连接对象需要连接的SDE数据库,一般是主机名或者IP地址, '但是由于不同SDE使用的连接中间件不同,因此需要明确SDE版本。 dc.Server = "SDE90:ntu" 'SDE数据库用户名 dc.User = "sa" 'SDE数据库用户密码 dc.Password = "sa" '确定数据库实例,只要使用SDE,都是"ESRI_SDE" dc.Database = "esri_sde" '判断连接是否成功 If dc.Connect Then '遍历该连接下的所有地理数据集 For Each gs In dc.GeoDatasets '将每个地理数据集赋给图层对象 Set lyr = New MapLayer MsgBox gs.Name Set lyr.GeoDataset = gs Map1.Layers.Add lyr Next End If 4、 CAD图层的加载 CAD数据加载过程与Shp类似,但是由于CAD是点、线、面、标注共享一个图层的,因此需要对不同类型的地物进行区分。利用findGeodataset寻找地理数据集时所使用的参数应该是完整的文件名,而不是去除扩展名的主文件名。 在数据连接对象的数据库属性前需要加上“[CAD]”,表示使用的是CAD数据 CAD采取的是点线面共存的数据存储方式,在Map控件中使用时,需要指明类型,线文件在数据连接对象的数据库属性字段前加“[CADline]”,但是由于线对象是默认的,所以可以不加,但对于其它数据则必须加,点数据加“[CADpoint]”面数据加“[CADarea]”,文本数据加“[CADarea]”。 Vb代码如下: '建立矢量图层对象 Dim maplyr As New MapObjects2.MapLayer '建立地理数据连接对象 Dim dc As New MapObjects2.DataConnection '建立地理数据集对象 Dim gs As New MapObjects2.GeoDataset '定义地理数据连接对象的Database属性,需要在文件夹前加载[CAD] dc.Database = "[CAD]E:\mydoc\GIS二次开发\data" '运用FindGeodataset方法查找需要加载的地理数据,使用全名 Set gs = dc.FindGeoDataset("PARCELS.DWG") '将地理数据集赋给矢量图层对象 Set maplyr.GeoDataset = gs '将矢量图层加载到地图中 Map1.Layers.Add maplyr Map1.Refresh 5、 ArcInfo的Cov格式的图层加载 基本过程与shp数据加载方法相同。 '定义一个数据库连接对象dc Dim dc As New MapObjects2.DataConnection '定义一个矢量图层对象 Dim mlyr As New MapObjects2.MapLayer '定义数据库连接对象的数据库属性,这时由于ArcInfo工作空间 '中的文件组织方式不同,添加地理数据集时需要使用地物类名和类型后缀。 CommonDialog1.Filter = "Coverage格式的文件(*.pat)|*.pat" CommonDialog1.ShowOpen Dim fname As String Dim dname As String dname = CommonDialog1.FileName MsgBox dname fname = ReturnCovName(dname) MsgBox fname fname = fname + ".pat" dname = Left(dname, Len(dname) - 13) MsgBox dname dc.Database = dname MsgBox fname Set mlyr.GeoDataset = dc.FindGeoDataset(fname) Map1.Layers.Add mlyr 但是由于Cov是一种特殊的数据格式,因此在加载时需要进行很多字符串处理,为了简化,我们采用下列代码直接加载数据: Dim dc As New DataConnection Dim lyr As MapLayer dc.Database = "[arc]" + App.Path + "\..\" + "data02" If dc.Connect Then Set lyr = New MapLayer Set lyr.GeoDataset = dc.FindGeoDataset("ADI.PAT") Map1.Layers.Add lyr Else MsgBox "数据文件错误。" End If Map1.Refresh showLyrName 6、 显示与隐藏 Map控件的显示与隐藏:Map1.Visible = Not Map1.Visible 图层的显示与隐藏: Map1.Layers(0).Visible = Not Map1.Layers(0).Visible Map1.Refresh 7、 图层顺序控制 要实现图层的顺序控制,首先需要将图层现有顺序排列出来,我们使用List控件进行,具体过程如下: 步骤一 新建一个List控件 步骤二 对地图控件中的每一个图层,将其名称添加到list控件中 由于这个过程反复使用,因此将其写成子过程。 Sub ShowLyrName() List1.Clear '首先清空 Dim lyr As New mapobjects2.MapLayer For Each lyr In Map1.Layers List1.AddItem lyr.Name Next lyr End Sub 但是如果Map中含有ImageLayer,就会出错,这是因为MapLayer类型与ImageLayer类型完全不同,不能相互替代,需要着一个它们的父类,因此程序修改为 Sub ShowLyrName() List1.Clear '首先清空 Dim lyr As Object For Each lyr In Map1.Layers List1.AddItem lyr.Name Next lyr End Sub 上移过程: Dim i As Integer Dim lyr As Object i = List1.ListIndex If i < 0 Then Exit Sub If i = 0 Then MsgBox "该图层已经到顶,无法上移。" Else Map1.Layers.MoveTo i, i - 1 Map1.Refresh List1.Clear For Each lyr In Map1.Layers List1.AddItem lyr.Name Next List1.Selected(i - 1) = True End If 下移过程: Dim i As Integer Dim lyr As Object i = List1.ListIndex If i < 0 Then Exit Sub If i = Map1.Layers.Count - 1 Then MsgBox "该图层已经到底,无法下移。" Else Map1.Layers.MoveTo i, i + 1 Map1.Refresh List1.Clear For Each lyr In Map1.Layers List1.AddItem lyr.Name Next List1.Selected(i + 1) = True End If 置顶过程: If List1.ListIndex < 0 Then Exit Sub Map1.Layers.MoveToTop List1.ListIndex Map1.Refresh List1.Clear Dim lyr As Object For Each lyr In Map1.Layers List1.AddItem lyr.Name Next List1.Selected(0) = True 置底过程: If List1.ListIndex < 0 Then Exit Sub Map1.Layers.MoveToBottom List1.ListIndex Map1.Refresh List1.Clear Dim lyr As Object For Each lyr In Map1.Layers List1.AddItem lyr.Name Next List1.Selected(Map1.Layers.Count - 1) = True 8、 放大与缩小:参照实验一自己完成。 9、 漫游与全图:参照实验一自己完成。 (三)练习 首先对单个功能进行试验,然后调整实验一设计的界面,将以上功能集成到实验一软件中去。 六、实验报告 将Map控件中不同地图数据的加载方法做一个比较,将比较结果写成实验报告。 - 6 -
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服