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

上传人:夏** 文档编号:543545269 上传时间:2024-03-20 格式:DOC 页数:6 大小:69.01KB
返回 下载 相关 举报
实验五图层加载与显示控制.doc_第1页
第1页 / 共6页
实验五图层加载与显示控制.doc_第2页
第2页 / 共6页
实验五图层加载与显示控制.doc_第3页
第3页 / 共6页
实验五图层加载与显示控制.doc_第4页
第4页 / 共6页
实验五图层加载与显示控制.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《实验五图层加载与显示控制.doc》由会员分享,可在线阅读,更多相关《实验五图层加载与显示控制.doc(6页珍藏版)》请在金锄头文库上搜索。

1、GIS二次开发使用MapObjects实验五 图层加载与显示控制一、实验目的1. 学习程序运行前、运行时MO图层加载的方法2. 学习SHP图层、SDE图层、CAD 、Coverage图层图层加载和栅格数据加载方法3. 学习图层顺序控制、显示与否控制、矢量图层色彩控制等二、实验内容1. 运用各种不同的方法加载各种矢量图层数据2. 运用各种方法加载栅格图层数据3. 图层的上移、下移、隐藏、放大、缩小、漫游三、实验环境与数据VB6MapObjects2.4Xiangprj.shpNtschool.shp四、实验要求1. 掌握程序运行前、运行时MO图层加载的方法。2. 掌握SHP图层、Coverage

2、图层、SDE图层、CAD图层加载和栅格数据加载方法。3. 掌握图层顺序控制、显示与否控制、矢量图层色彩控制等。五、实验任务(一)程序演示1、 演示Shp矢量图层的加载2、 演示不同格式的栅格图层的加载3、 演示ArcInfo的Cov格式的图层加载4、 演示SDE图层的加载5、 演示CAD图层的加载6、 显示与隐藏演示7、 图层顺序控制演示8、 放大与缩小演示9、 漫游与全图演示(二)实现方法1、 Shp矢量图层的加载Shp矢量数据的加载分为四个过程:步骤一 通过定义一个地理数据连接对象Dc,确定Dc连接的数据库,从而建立一个到包含Shp文件的文件夹的连接步骤二 使用FindGeodataset

3、方法在新建的数据连接下的查找需要的地理数据集合步骤三 建立一个矢量图层对象,将找到的地理数据集合赋给矢量图层对象的地理数据集合属性步骤四 将矢量图层添加到地图控件中,刷新地图将以上过程编写成VB代码如下:定义一个地理数据连接对象dc定义一个地理数据集对象gs定义一个矢量图层对象mlyrDim dc As New mapobjects2.DataConnectionDim gs As mapobjects2.GeoDatasetDim Mlyr As New mapobjects2.MapLayer确定地理数据连接对象dc的属性dc.Database = E:mydocGIS二次开发data判断

4、连接是否成功If dc.Connect Then查找连接对象中指定名称的地理数据集Set gs = dc.FindGeoDataset(newcun)End If判断是否是符合要求的地理数据集If Not gs Is Nothing Then将找到的地理数据集赋给mlyr的地理数据集对象Set Mlyr.GeoDataset = gsEnd If判断图层是否有效If mlyr.Valid Then将图层加载到地图中Map1.Layers.Add Mlyr刷新地图Map1.RefreshEnd IfMsgBox gs.Name这是直接指定Shp文件所在的文件夹的加载方法,也可以通过通用对话框方式

5、加载。但是基本过程一样。所不同的只是修改数据联接对象的数据库属性和地理数据集的名称属性。具体方法参见实验一。2、 不同格式的栅格图层的加载栅格数据加载的方法比较简单,包括一下三个过程:步骤一 定义一个栅格图层对象ilyr步骤二 确定这个栅格图层对象使用的栅格数据文件步骤三 将这个栅格图层对象加载到地图控件中代码如下:定义一个栅格图层对象Dim ilyr As New mapobjects2.ImageLayer确定这个对象使用的栅格数据文件ilyr.File = E:mydocGIS二次开发data南通市区图.jpg将这个图层对象加载到地图控件中Map1.Layers.Add ilyr刷新地图

6、Map1.Refresh栅格数据的加载也可以使用通用对话框,不仅利用通用对话框选择文件,也可以利用通用对话框选择不同的栅格数据类型。MapObjects支持的栅格数据类型由安装时的选项确定。3、 SDE图层的加载SDE是空间数据引擎的简称,空间数据引擎是操作保存在数据库中的空间数据的软件工具。由于需要操作数据库,所以必须用符合数据库的要求使用数据库。数据库保存了大量的数据,为了安全使用必须使用具有用户权限的用户名和密码,因此在连接SDE时首先需要明确连接的数据库服务器是什么、用户名是什么、密码、数据库。具体过程如下:步骤一 建立数据库连接对象,定义数据库连接对象的各种属性,包括服务器、用户名、

7、密码、数据库步骤二 建立地理数据集对象,运用FindGeodataset方法寻找新建连接下的地理数据集步骤三 建立矢量图层对象,将找到的地理数据集赋给图层对象的地理数据集属性步骤四 添加图层步骤五 刷新地图Vb代码如下:定义一个地理数据连接对象dcDim dc As New MapObjects2.DataConnection定义一个地理数据集对象gsDim gs As MapObjects2.GeoDataset定义一个矢量图层对象lyrDim lyr As New MapObjects2.MapLayer定义数据库连接对象需要连接的SDE数据库,一般是主机名或者IP地址,但是由于不同SDE

8、使用的连接中间件不同,因此需要明确SDE版本。dc.Server = SDE90:ntuSDE数据库用户名dc.User = saSDE数据库用户密码dc.Password = sa确定数据库实例,只要使用SDE,都是ESRI_SDEdc.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.Ad

9、d lyrNextEnd If4、 CAD图层的加载CAD数据加载过程与Shp类似,但是由于CAD是点、线、面、标注共享一个图层的,因此需要对不同类型的地物进行区分。利用findGeodataset寻找地理数据集时所使用的参数应该是完整的文件名,而不是去除扩展名的主文件名。在数据连接对象的数据库属性前需要加上“CAD”,表示使用的是CAD数据CAD采取的是点线面共存的数据存储方式,在Map控件中使用时,需要指明类型,线文件在数据连接对象的数据库属性字段前加“CADline”,但是由于线对象是默认的,所以可以不加,但对于其它数据则必须加,点数据加“CADpoint”面数据加“CADarea”,文

10、本数据加“CADarea”。Vb代码如下:建立矢量图层对象Dim maplyr As New MapObjects2.MapLayer建立地理数据连接对象Dim dc As New MapObjects2.DataConnection建立地理数据集对象Dim gs As New MapObjects2.GeoDataset定义地理数据连接对象的Database属性,需要在文件夹前加载CADdc.Database = CADE:mydocGIS二次开发data运用FindGeodataset方法查找需要加载的地理数据,使用全名Set gs = dc.FindGeoDataset(PARCELS.

11、DWG)将地理数据集赋给矢量图层对象Set maplyr.GeoDataset = gs将矢量图层加载到地图中Map1.Layers.Add maplyrMap1.Refresh5、 ArcInfo的Cov格式的图层加载基本过程与shp数据加载方法相同。 定义一个数据库连接对象dcDim dc As New MapObjects2.DataConnection定义一个矢量图层对象Dim mlyr As New MapObjects2.MapLayer定义数据库连接对象的数据库属性,这时由于ArcInfo工作空间中的文件组织方式不同,添加地理数据集时需要使用地物类名和类型后缀。CommonDia

12、log1.Filter = Coverage格式的文件(*.pat)|*.patCommonDialog1.ShowOpenDim fname As StringDim dname As Stringdname = CommonDialog1.FileNameMsgBox dnamefname = ReturnCovName(dname)MsgBox fnamefname = fname + .patdname = Left(dname, Len(dname) - 13)MsgBox dnamedc.Database = dnameMsgBox fnameSet mlyr.GeoDataset

13、 = 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

14、 lyr Else MsgBox 数据文件错误。 End IfMap1.RefreshshowLyrName6、 显示与隐藏Map控件的显示与隐藏:Map1.Visible = Not Map1.Visible图层的显示与隐藏:Map1.Layers(0).Visible = Not Map1.Layers(0).VisibleMap1.Refresh7、 图层顺序控制要实现图层的顺序控制,首先需要将图层现有顺序排列出来,我们使用List控件进行,具体过程如下:步骤一 新建一个List控件步骤二 对地图控件中的每一个图层,将其名称添加到list控件中由于这个过程反复使用,因此将其写成子过程。Sub ShowLyrName() List1.Clear 首先清空 Dim lyr As New mapobjects2.MapLayer For Each lyr In Map1.Layers List1.AddItem lyr.Name Next lyrEnd Sub但是如果Map中含有ImageLayer,就会出错,这是因为MapLayer类型与ImageLayer类型完全不同,不能相互替代,需要着一个它们的父类,因此程序修改为Sub ShowLyrName() Lis

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号