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

上传人:b****7 文档编号:11034445 上传时间:2023-02-24 格式:DOCX 页数:12 大小:17.87KB
下载 相关 举报
实验五图层加载与显示控制.docx_第1页
第1页 / 共12页
实验五图层加载与显示控制.docx_第2页
第2页 / 共12页
实验五图层加载与显示控制.docx_第3页
第3页 / 共12页
实验五图层加载与显示控制.docx_第4页
第4页 / 共12页
实验五图层加载与显示控制.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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

《实验五图层加载与显示控制.docx》由会员分享,可在线阅读,更多相关《实验五图层加载与显示控制.docx(12页珍藏版)》请在冰豆网上搜索。

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

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

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

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

一、实验目的

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

DimdcAsNewmapobjects2.DataConnection

DimgsAsmapobjects2.GeoDataset

DimMlyrAsNewmapobjects2.MapLayer

'确定地理数据连接对象dc的属性

dc.Database="E:

\mydoc\GIS二次开发\data"

'判断连接是否成功

Ifdc.ConnectThen

'查找连接对象中指定名称的地理数据集

Setgs=dc.FindGeoDataset("newcun")

EndIf

'判断是否是符合要求的地理数据集

IfNotgsIsNothingThen

'将找到的地理数据集赋给mlyr的地理数据集对象

SetMlyr.GeoDataset=gs

EndIf

'判断图层是否有效

'Ifmlyr.ValidThen

'将图层加载到地图中

Map1.Layers.AddMlyr

'刷新地图

Map1.Refresh

'EndIf

MsgBoxgs.Name

这是直接指定Shp文件所在的文件夹的加载方法,也可以通过通用对话框方式加载。

但是基本过程一样。

所不同的只是修改数据联接对象的数据库属性和地理数据集的名称属性。

具体方法参见实验一。

2、不同格式的栅格图层的加载

栅格数据加载的方法比较简单,包括一下三个过程:

步骤一定义一个栅格图层对象ilyr

步骤二确定这个栅格图层对象使用的栅格数据文件

步骤三将这个栅格图层对象加载到地图控件中

代码如下:

'定义一个栅格图层对象

DimilyrAsNewmapobjects2.ImageLayer

'确定这个对象使用的栅格数据文件

ilyr.File="E:

\mydoc\GIS二次开发\data\南通市区图.jpg"

'将这个图层对象加载到地图控件中

Map1.Layers.Addilyr

'刷新地图

Map1.Refresh

栅格数据的加载也可以使用通用对话框,不仅利用通用对话框选择文件,也可以利用通用对话框选择不同的栅格数据类型。

MapObjects支持的栅格数据类型由安装时的选项确定。

3、SDE图层的加载

SDE是空间数据引擎的简称,空间数据引擎是操作保存在数据库中的空间数据的软件工具。

由于需要操作数据库,所以必须用符合数据库的要求使用数据库。

数据库保存了大量的数据,为了安全使用必须使用具有用户权限的用户名和密码,因此在连接SDE时首先需要明确连接的数据库服务器是什么、用户名是什么、密码、数据库。

具体过程如下:

步骤一建立数据库连接对象,定义数据库连接对象的各种属性,包括服务器、用户名、密码、数据库

步骤二建立地理数据集对象,运用FindGeodataset方法寻找新建连接下的地理数据集

步骤三建立矢量图层对象,将找到的地理数据集赋给图层对象的地理数据集属性

步骤四添加图层

步骤五刷新地图

Vb代码如下:

'定义一个地理数据连接对象dc

DimdcAsNewMapObjects2.DataConnection

'定义一个地理数据集对象gs

DimgsAsMapObjects2.GeoDataset

'定义一个矢量图层对象lyr

DimlyrAsNewMapObjects2.MapLayer

'定义数据库连接对象需要连接的SDE数据库,一般是主机名或者IP地址,

'但是由于不同SDE使用的连接中间件不同,因此需要明确SDE版本。

dc.Server="SDE90:

ntu"

'SDE数据库用户名

dc.User="sa"

'SDE数据库用户密码

dc.Password="sa"

'确定数据库实例,只要使用SDE,都是"ESRI_SDE"

dc.Database="esri_sde"

'判断连接是否成功

Ifdc.ConnectThen

'遍历该连接下的所有地理数据集

ForEachgsIndc.GeoDatasets

'将每个地理数据集赋给图层对象

Setlyr=NewMapLayer

MsgBoxgs.Name

Setlyr.GeoDataset=gs

Map1.Layers.Addlyr

Next

EndIf

4、CAD图层的加载

CAD数据加载过程与Shp类似,但是由于CAD是点、线、面、标注共享一个图层的,因此需要对不同类型的地物进行区分。

利用findGeodataset寻找地理数据集时所使用的参数应该是完整的文件名,而不是去除扩展名的主文件名。

在数据连接对象的数据库属性前需要加上“[CAD]”,表示使用的是CAD数据

CAD采取的是点线面共存的数据存储方式,在Map控件中使用时,需要指明类型,线文件在数据连接对象的数据库属性字段前加“[CADline]”,但是由于线对象是默认的,所以可以不加,但对于其它数据则必须加,点数据加“[CADpoint]”面数据加“[CADarea]”,文本数据加“[CADarea]”。

Vb代码如下:

'建立矢量图层对象

DimmaplyrAsNewMapObjects2.MapLayer

'建立地理数据连接对象

DimdcAsNewMapObjects2.DataConnection

'建立地理数据集对象

DimgsAsNewMapObjects2.GeoDataset

'定义地理数据连接对象的Database属性,需要在文件夹前加载[CAD]

dc.Database="[CAD]E:

\mydoc\GIS二次开发\data"

'运用FindGeodataset方法查找需要加载的地理数据,使用全名

Setgs=dc.FindGeoDataset("PARCELS.DWG")

'将地理数据集赋给矢量图层对象

Setmaplyr.GeoDataset=gs

'将矢量图层加载到地图中

Map1.Layers.Addmaplyr

Map1.Refresh

5、ArcInfo的Cov格式的图层加载

基本过程与shp数据加载方法相同。

'定义一个数据库连接对象dc

DimdcAsNewMapObjects2.DataConnection

'定义一个矢量图层对象

DimmlyrAsNewMapObjects2.MapLayer

'定义数据库连接对象的数据库属性,这时由于ArcInfo工作空间

'中的文件组织方式不同,添加地理数据集时需要使用地物类名和类型后缀。

CommonDialog1.Filter="Coverage格式的文件(*.pat)|*.pat"

CommonDialog1.ShowOpen

DimfnameAsString

DimdnameAsString

dname=CommonDialog1.FileName

MsgBoxdname

fname=ReturnCovName(dname)

MsgBoxfname

fname=fname+".pat"

dname=Left(dname,Len(dname)-13)

MsgBoxdname

dc.Database=dname

MsgBoxfname

Setmlyr.GeoDataset=dc.FindGeoDataset(fname)

Map1.Layers.Addmlyr

但是由于Cov是一种特殊的数据格式,因此在加载时需要进行很多字符串处理,为了简化,我们采用下列代码直接加载数据:

DimdcAsNewDataConnection

DimlyrAsMapLayer

dc.Database="[arc]"+App.Path+"\..\"+"data02"

Ifdc.ConnectThen

Setlyr=NewMapLayer

Setlyr.GeoDataset=dc.FindGeoDataset("ADI.PAT")

Map1.Layers.Addlyr

Else

MsgBox"数据文件错误。

"

EndIf

Map1.Refresh

showLyrName

6、显示与隐藏

Map控件的显示与隐藏:

Map1.Visible=NotMap1.Visible

图层的显示与隐藏:

Map1.Layers(0).Visible=NotMap1.Layers(0).Visible

Map1.Refresh

7、图层顺序控制

要实现图层的顺序控制,首先需要将图层现有顺序排列出来,我们使用List控件进行,具体过程如下:

步骤一新建一个List控件

步骤二对地图控件中的每一个图层,将其名称添加到list控件中

由于这个过程反复使用,因此将其写成子过程。

SubShowLyrName()

List1.Clear'首先清空

DimlyrAsNewmapobjects2.MapLayer

ForEachlyrInMap1.Layers

List1.AddItemlyr.Name

Nextlyr

EndSub

但是如果Map中含有ImageLayer,就会出错,这是因为MapLayer类型与ImageLayer类型完全不同,不能相互替代,需要着一个它们的父类,因此程序修改为

SubShowLyrName()

List1.Clear'首先清空

DimlyrAsObject

ForEachlyrInMap1.Layers

List1.AddItemlyr.Name

Nextlyr

EndSub

上移过程:

DimiAsInteger

DimlyrAsObject

i=List1.ListIndex

Ifi<0ThenExitSub

Ifi=0Then

MsgBox"该图层已经到顶,无法上移。

"

Else

Map1.Layers.MoveToi,i-1

Map1.Refresh

List1.Clear

ForEachlyrInMap1.Layers

List1.AddItemlyr.Name

Next

List1.Selected(i-1)=True

EndIf

下移过程:

DimiAsInteger

DimlyrAsObject

i=List1.ListIndex

Ifi<0ThenExitSub

Ifi=Map1.Layers.Count-1Then

MsgBox"该图层已经到底,无法下移。

"

Else

Map1.Layers.MoveToi,i+1

Map1.Refresh

List1.Clear

ForEachlyrInMap1.Layers

List1.AddItemlyr.Name

Next

List1.Selected(i+1)=True

EndIf

置顶过程:

IfList1.ListIndex<0ThenExitSub

Map1.Layers.MoveToTopList1.ListIndex

Map1.Refresh

List1.Clear

DimlyrAsObject

ForEachlyrInMap1.Layers

List1.AddItemlyr.Name

Next

List1.Selected(0)=True

置底过程:

IfList1.ListIndex<0ThenExitSub

Map1.Layers.MoveToBottomList1.ListIndex

Map1.Refresh

List1.Clear

DimlyrAsObject

ForEachlyrInMap1.Layers

List1.AddItemlyr.Name

Next

List1.Selected(Map1.Layers.Count-1)=True

8、放大与缩小:

参照实验一自己完成。

9、漫游与全图:

参照实验一自己完成。

(三)练习

首先对单个功能进行试验,然后调整实验一设计的界面,将以上功能集成到实验一软件中去。

六、实验报告

将Map控件中不同地图数据的加载方法做一个比较,将比较结果写成实验报告。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1