![GIS中查询功能的实现_第1页](http://file4.renrendoc.com/view/94f8a4d05e517899384324c7195b065f/94f8a4d05e517899384324c7195b065f1.gif)
![GIS中查询功能的实现_第2页](http://file4.renrendoc.com/view/94f8a4d05e517899384324c7195b065f/94f8a4d05e517899384324c7195b065f2.gif)
![GIS中查询功能的实现_第3页](http://file4.renrendoc.com/view/94f8a4d05e517899384324c7195b065f/94f8a4d05e517899384324c7195b065f3.gif)
![GIS中查询功能的实现_第4页](http://file4.renrendoc.com/view/94f8a4d05e517899384324c7195b065f/94f8a4d05e517899384324c7195b065f4.gif)
![GIS中查询功能的实现_第5页](http://file4.renrendoc.com/view/94f8a4d05e517899384324c7195b065f/94f8a4d05e517899384324c7195b065f5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、地理科学与旅游学院2011-2012GIS 设计与开发课程实验报告实验二单值专题图的生成以及GIS中查询功能的实现班级:095班姓名:陈佩仪学号:2090822136指导教师:钟广锐实验时间:2011年11月评阅:成绩:2011 年 11 月制表实验二(1) 单值专题图的生成一实验项目内容:生成单值专题图并风格化摘要:SuperMap 2003的单值专题图在传统的专题地图中属于精确分区的质底法,将全 制图区域按照专题现象的某种指标划分区域或各类型的分布范围,在各界线范围内涂以颜色 或填绘晕线、花纹(乃至注记),以显示连续而布满全制图区域的现象质的差别(或各区域 间的差别),可用于地质图、地貌图
2、、植被图、土地利用图、政治行政区划图、自然区划图 经济区划图等。基本思路:根据专题要素的取值不同,赋于地图区域不同的风格。通过查找对象结果图 以及各类对象的属性、事件、方法作为解决方案。传统的专题地图是利用图例控件一选择图 层一单击右键一专题图向导,虽然这种方法制作专题图比较简便,但却显得较为单一、不能 控制。本次实验则选择利用SuperMap软件提供的对象,编写代码对其进行制作。四.实验所用控件的属性、事件、方法,如下表所示:属性事件方法Commondialogl(打开工作空间 控件).DialogTitle= “打开工作空间控 件”、.filter=app.path、.initdir= 工
3、作空间控件文件 (*.smw)l*.smwShowopen 方法Command1.Caption=打开Click ()事件2.Caption=” 退出”3.Caption=”生成单值专题图”;3.Enabled=False4.Caption=” 放大”;5.Caption=” 缩小”;6.Caption=” 漫游”;7.Caption=”全幅显示”8.Caption=”自由缩放”SuperlegendlModified 事件,ReadyStateChang e事件Connect 方法Disconnect 方法Refresh 方法SuperWorkspacel.DatasourcesOpenDa
4、tasource ()方法、Close方 法SuperMapl.Action=”放大”、”缩小”、”漫 游”、”全幅显示”、”自由缩放”;Connect 方法、Disconnect 方 法、Refresh方法 Close方法Combo1.Listindex=0Clear方法2.AddItem五.实验过程分析及主要实验步骤:1)专题图的数据集一一图层对象Solayer (图层的选择) 打开数据源,得到数据集集合,图层叠加并生成地图,列出图层以供客户选择,列出所选中 图层的字段名。此时程序必然得到一个客户选定的图层。2)生成单值专题图定义专题图对象,并赋值:Dim objThemeUnique A
5、s soThemeUnique /单值专题图对象设置缺省的单值专题图属性和状态,利用MakeDeault方法。设置专题图参数:设定字段,填充颜色参数等。根据客户选择的图层,先将其转成矢量数据集,再转换成记录集,然后在combo2中显示 字段信息集,再采用循环循环结构循环数据集:通过矢量数据集的 GetFieldInfos 方法,列 出属性的字段信息。基本流程为:矢量数据集Objlayer.Dataset记录集T矢量数据集.Query 方法T定义赋值SoFieldInfosT记录集.GetFieldInfos。规定专题图的专题变量为“SMID”。风格化:为每个不同的单值对象填充不同的颜色,利用o
6、bjThemeUnique的ValueCount属 性,获取专题要素的填充色;利用objcolors的MakeRandomColorset方法,产生一组随机数。图例控件的使用:通过对图例控件的使用,从而达到图层的管理和操作。本次实验通过 modified ()事件使得当图例控件发生改变时,能实现两个控件的刷新。一般我们可以通过 属性表来设置图例控件的状态。六界面设计及关键代码部分:界面设计:1.1 界面设计关键代码部分:图层选择:选择图层,先转成矢量数据集,再转换成记录集,然后在combo2中显示字 段信息集,再采用循环循环结构循环数据集Dim objsellayer As soLayerSe
7、t objsellayer = SuperMap1.Layers.Item(Combo1.ListIndex + 1)Dim objdv As soDatasetVectorSet objdv = objsellayer.Dataset 如果有栅格图层,会出错!一般有两种解决方案,一是 加图层类型的判断,可以用sodataset.vector判断数据集是否是矢量?二是通过一些方法使栅 格数据也可以列出,但不影响使用If objdv.Vector = False Then判断是否栅格数据MsgBox 不是矢量数据集Combo2.ClearElseDim objrs As soRecordsetS
8、et objrs = objdv.Query(, True)Dim objfieldinfos As soFieldInfosSet objfieldinfos = objrs.GetFieldInfos获得所有字段的属性集Dim i As IntegerCombo2.ClearFor i = 1 To objfieldinfos.CountCombo2.AddItem objfieldinfos.Item(i).Name 利用循环结构,将字段添加到 Combo2 组合框中NextCombo2.ListIndex = 0 默认选中第一项打开数据源,列出数据集于组合框中,图层叠加,显示地图 Su
9、perMap1.CloseSuperMap1.Disconnect 如果已有打开数据源,先断开链接,关闭工作空间控件,以防止出错 SuperLegend1.DisconnectSuperWorkspace1.CloseCommonDialog1.ShowOpenDim objdataSource As soDataSource定义变量、赋值strAlias = tempDatasource设置数据源别名Set objdataSource = SuperWorkspace1.OpenDataSource(CommonDialog1.FileName, strAlias,sceSDB, True)
10、利用OpenDataSource ()方法,返回一个数据源对象If objdataSource Is Nothing ThenMsgBox 打开失败, vbInformation判断文件是否成功打开ElseMsgBox 打开成功, vbInformation成功选择好数据源后,在列表框中列出数据集SuperMap1.Connect SuperWorkspace1.Handle 建立 Supermap 与 Superworkspace 控件连接 SuperLegend1.Connect SuperMap1建立 superlegend 与 SuperMap 的连接Dim objdatasets A
11、s soDatasets定义数据集集合Set objdatasets = objdataSource.Datasets 获取数据集集合If objdatasets Is Nothing Then 判断数据源中是否有数据集Combo1.ClearMsgBox 没有数据集!, vbInformationExit SubElseCombo1.ClearFor i = 1 To objdatasets.Count将获得的数据集添加到数据集列表中Set objdataset = objdatasets.Item(i)Dim objlayer As soLayerSet objlayer = SuperM
12、ap1.Layers.AddDataset(objdataset, True) 图层叠加,生成地图If objdatasets.Item(i).Vector = True Then 判断是否为矢量图层Combo1.AddItem objdataset.Name将获得的图层列出在组合框中End IfNextCombo1.ListIndex = 0默认选择为第一项Command3.Enabled = True 当成功打开数据源,并列出数据集,图层叠加,生成地图时, 激活生成单值专题图的按钮SuperMap1.Refresh刷新地图End IfEnd IfSet objdataSource = No
13、thing使用完毕,释放对象Set objdatasets = NothingSet objlayer = Nothing生成单值专题图,并风格化Set objThemeUnique = SuperMap1.Layers.Item(Combo1.ListIndex + 1).ThemeUnique Dim themefield As Stringthemefield = Combo2.List(Combo2.ListIndex)With objThemeUnique.Enable = True启动并显示专题地图.Field = SmID规定专题变量为 SMID.MakeDefault Make
14、Default方法,用于制作缺省的单值专题图,否则ValueCount的值为0 SuperMap1.RefreshnThemeCount = .ValueCount设置专题图中所包含的分类类别的数目objColor.MakeRandomColorset nThemeCount 产生一组随机色For i = 1 To nThemeCount设置各个专题元素的随机色.Style(i).BrushColor = objColor(i)Next iSuperMap1.RefreshSuperLegend1.RefreshEnd With地图浏览的操作:SuperMap1.Action = scaZoo
15、mIn放大SuperMap1.Action = scaZoomOut缩小SuperMap1.Action = scaPan漫游SuperMap1.ViewEntire全幅显示SuperMap1.Action = scaZoomFree自由缩放 5) a.图例控件的Modified()事件:当图例控件发生了改变,贝I刷新地图SuperMap1.RefreshSuperLegend1.RefreshDim i As Integer更新图层组合框中的图层顺序Combo1.ClearFor i = 1 To SuperMap1.Layers.CountCombo1.AddItem SuperMap1.
16、Layers.Item(i).Dataset.NameNextCombo1.ListIndex = 0b.图例控件的ReadyStateChange()事件:当通过图例控件改变可编辑图层后触发此事件, 重新设置索引号。代码如下: SuperMap1.Layers.SetEditableLayer nIndex七.运行调试:出现过图例控件无法显示的情况,经调试发现之前没有断开superlegend的 连接,导致出现错误。实验中还存在着一定的问题,如有些图层无法实现单值专题图的制作 当出现栅格数据时显示错误,这些问题都有待解决。ZJ打开退出打开退出敢夫 缩小 漫游全輻显示 自由缩放耳 Forml图
17、例控件申回 Wo rid tem pData sou rce 叼文 Continent_LabletempD 叼文 Country_LabletempDatE 叼文 Ocean_LabletempDatas 7 :ZJ打开退出打开退出敢夫 缩小 漫游全輻显示 自由缩放耳 Forml图例控件申回 Wo rid tem pData sou rce 叼文 Continent_LabletempD 叼文 Country_LabletempDatE 叼文 Ocean_LabletempDatas 7 : CapitaltempDatasource Oceantem pData source 7 Grid
18、 tem pData sou rce 7 ATUNtempDatasource0 Forml敢犬 |缩小| 屢游 |全幅显示|自由缩胶|罔层迭择导段迭择jCouritry打开地囹一警告=您的运行版本没有注冊 诸调用 SuperWorks pace. RegisterForRuntim 注册运行版生咸单值专题图囹例控件一田Pll I WorldtempDatasource El文 Son inent_LabletempDEl文 2ountry_La bletempDatiEl文 Ocean_Labletem pData s 回 o CapitaltempDatasource 由” 回ATUNte
19、mpDat a so rce 由”7 GridtempDatasource Ocean tem pData sou rce图层选择|Oce:m Lalilf宇段选择打开地图一 晉告:您的运打版本没有注冊 请调用 SuperWorkspace.RegisterForRuntim注册运行皈生成单值专题圉图 1.2 运行结果显示 八实验小结:本次实验主要是通过对图例控件的使用,从而实现对图层的管理,并制作单 值专题图以及实现图层的风格化。在实际操作过程中,通过对图例控件、单值专题图对象的 属性、事件、方法的了解,对象结构图的查看,利用核心步骤:a.图层的选择;b.确定专题 图的类型单值专题图对象;c
20、.专题要素的选择;d.风格化。逐步分析问题逐步解决。从 而能更快的解决问题。实验二(2) GIS 中查询功能的实现(属性查图和图查属性)一实验内容:获取地理对象的属性和通过属性查找地图要素 二摘要:图查属性是指选中地理实体,显示其属性信息;属性查图是根据(构造)属性条 件,显示地理实体(图)三基本思路:图查属性的一般思路:首先我们需要选中地理实体,因此则需先切换鼠标的状态,一 般来说,选择的方式有点选、框选、圆选、多边形选择等多种方式,本次可以采用点选方式 实现选择,利用SuperMapl.Action=ScaSelect,可以实现点选的功能,此处需添加一个按钮 控件。其次需将显示所选择的地理
21、实体对象的属性,为使信息能更清晰显示,可以添加一个 新的窗口 Form2,然后在原来的窗口 Forml上添加一个名为“属性显示”的按钮,利用 Form2.Show 方法达到显示的效果。属性查图的一般思路:1、获取所需要查询的图层(SoLayers),并列出图层的字段信 息。 2、建立一个查询条件。 3、将查询的结果高亮显示在 SuperGridView 控件上,采用 SuperMap1.Selection.FromRecordset,将查询的结构转化为记录集,高亮显示。 四实验所用控件的属性、事件、方法,如下表所示:属性事件方法Commondialog1(打开数据源文件).DialogTitl
22、e= “打开数据源”、 .filter=app.path、.initdir= “文 件型数据源(*.sdd)l*.sdd;文件型数据源(*.sdb)l*.sdb”Supermap1.Action=”放大”、”缩小”、” 漫游”、”全幅显示”、”自由缩 放”;Connect 方法、 Disconnect 方法、Refresh 方法 Close方法Superworkspace1.datasources、.HandleOpen 方法、Close 方法Command同实验二1,但增加了一个 SQL杳询按钮和属性杳询按 钮,减少了一个生成单值专 题图按钮。Click ()Click ()Combo1.L
23、istindex=0Additem 方法2.AddItemText1.text,允许多行显示Form2.SuperGridView1Connect 方法;Update方法五实验过程分析及主要实验步骤:1) 图查属性:图层的选择以及地图的装载,切换鼠标操作状态为点选:Supermap.Layers.Adddataset方 法装载地图,用Supermapl.Action=ScaSelect实现点选选择地理实体:SO中提供了选择集对象SoSelection来表示选中的地理实体:Dim ObjSelection As SoSelecton定义、赋值Set ObjSelection=SuperMapl.
24、Selection在SO中,选择集获得了值以后,是高亮显示的属性的显示:Set objrecordset = SuperMapl.Selection.ToRecordset(False) 将选择集转化为记录集 Form2.SuperGridView1.Connect objrecordset将记录集放在 SuperGridView 中绑定显示2)属性查图:a. SO中SQL查询的解决方案矢量数据集的Query方法前提条件:得到矢量数据集-图层如何转成矢量数据集: solayer.datasesodataset-sodatasetvector;必要时可以加上相应的判断,sodataset.vec
25、tor -列出图层,由客户选择,选择的同时,列出该图层所包含的字段名,将第一步生成的条件 表达式,作为参数,传递给 sodatasetvector.query六界面设计及关键代码部分:1. 界面设计:图 2.1 界面设计2关键代码部分:1)图层选择:选择图层,先转成矢量数据集,再转换成记录集,然后在combo2中显示字段信息集,再 采用循环循环结构循环数据集Dim objsellayer As soLayerSet objsellayer = SuperMap1.Layers.Item(Combo1.ListIndex + 1)Dim objdv As soDatasetVectorSet o
26、bjdv = objsellayer.Dataset 如果有栅格图层,会出错!一般有两种解决方案,一是 加图层类型的判断,可以用sodataset.vector判断数据集是否是矢量?二是通过一些方法使栅 格数据也可以列出,但不影响使用If objdv.Vector = False Then判断是否栅格数据MsgBox 不是矢量数据集Combo2.ClearElseDim objrs As soRecordsetSet objrs = objdv.Query(, True)Dim objfieldinfos As soFieldInfosSet objfieldinfos = objrs.Get
27、FieldInfos获得所有字段的属性集Dim i As IntegerCombo2.ClearFor i = 1 To objfieldinfos.CountCombo2.AddItem objfieldinfos.Item(i).NameNextCombo2.ListIndex = 0 默认选中第一项End If2)打开数据源,生成数据集集合于组合框Combol中,叠加图层并显示地图, SuperMap1.CloseSuperMapl.Disconnect 如果已有打开数据源,先断开链接,关闭工作空间控件,以防止出错 SuperWorkspacel.CloseCommonDialogl.S
28、howOpenDim objdataSource As soDataSource定义变量、赋值strAlias = tempDatasource设置数据源别名Set objdataSource = SuperWorkspacel.OpenDataSource(CommonDialogl.FileName, strAlias, sceSDB, True)利用OpenDataSource ()方法,返回一个数据源对象If objdataSource Is Nothing ThenMsgBox 打开失败, vbInformation判断文件是否成功打开ElseMsgBox 打开成功, vbInfor
29、mation成功选择好数据源后,在列表框中列出数据集SuperMap1.Connect SuperWorkspace1.Handle建立 Supermap 与 Superworkspace 控件连接Dim objdatasets As soDatasets定义数据集集合Set objdatasets = objdataSource.Datasets 获取数据集集合If objdatasets Is Nothing Then 判断数据源中是否有数据集Combo1.ClearMsgBox 没有数据集!, vbInformationExit SubElseCombo1.AddItem objdata
30、set.NameEnd If将获得的图层列出在组合框中NextCombo1.AddItem objdataset.NameEnd If将获得的图层列出在组合框中Next默认选择为第一项刷新地图Combo1.ListIndex = 0SuperMap1.RefreshEnd IfFor i = 1 To objdatasets.Count将获得的数据集添加到数据集列表中Set objdataset = objdatasets.Item(i)Dim objlayer As soLayerSet objlayer = SuperMap1.Layers.AddDataset(objdataset, True) 图层叠加,生成地图If objdatasets.Item(i).Vector = True Then 判断是否为矢量图层End IfSet objdataSource = Nothing使用完毕,释放对象Set objdatasets = NothingSet objlayer = Nothing3)将属性显示于另一个窗口 Form2 的 SuperGridView 控件中,采用按钮控件 Comman
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代儿童教育的宠物营养规划与健康成长研究
- 科技运动会上的设施操作及注意事项
- 急救培训从电路安全到应急反应
- 职场技能与能力相结合的培训课程设计研究
- 教师团队协作中解决冲突的有效方法
- 现代教育技术下的逻辑思维培养策略
- 科技创新与农村医疗资源均衡分配探讨
- 老人日常护理技巧全解析
- 用技术保障健康生活-针对老年人群体的思考
- 科技驱动下的创新教育实践案例解析
- 综合素质提升培训全面提升个人综合素质
- 如何克服高中生的社交恐惧症
- 聚焦任务的学习设计作业改革新视角
- 《监理安全培训》课件
- 2024高二语文期末试卷(选必上、中)及详细答案
- 淋巴瘤患者的护理
- 水利工程建设管理概述课件
- 人美版初中美术知识点汇总九年级全册
- 2022中和北美腰椎间盘突出症诊疗指南的对比(全文)
- 乳房整形知情同意书
- 全国核技术利用辐射安全申报系统填报指南
评论
0/150
提交评论