讲义1103GIS开发(最后一次更新) - 图文

更新时间:2024-03-14 15:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程说明

1.专业,必修,考试

2.技术(应用程序的开发)--成果 3.实验,思维 ==》建议

简单应用程序的开发 解决问题的方案

GIS二次开发/开发人员,工程师

?三点,语言c#,java,数据库sql server,mysql,oracle, 软件(平台)--一套GIS软件(桌面版,开发版,网络版)

软件=程序+文档 (项目的分析,规划,整理,归档,方案)

课程要求掌握:

1).二次开发的学习方法---项目文档,解决方案

2).团队合作---项目过程,分工

3).对GIS二次开发的热点的关注---综合利用现有的信息平台

方法:

一门语言(开发环境)+组件式GIS 什么是GIS二次开发:

成果:应用程序+文档=应用软件

基于GIS平台软件(平台提供商)提供的组件(控件,插件),(二次开发商)结合系统开发环境,开发应用程序

按项目专题的形式,分析问题,写出解决方案(控件的属性,事件和方法)----》思路

解决方案----》翻译 程序语言

专题一 GIS开发的相关概念

1.测量,数据,应用,设计(规划),开发 2.开发什么?成果是什么?

软件=程序+文档 系统软件:OS 平台软件:DBMS

应用软件:解决某一个问题 ==》GIS软件如何定位 APP

平台软件(arcgis,supermap,mapgis) ?桌面版 supermap desktop 开发版 supermap objects SO 服务器版 supermap iserver

客户端版 supermap iserver for ____ api

3.二次开发的相关概念

(1)开发技术的发展 面向过程

面向对象: 面向组件(用控件) 面向框架 面向服务SOA: API式,网址=?云计算

组件式GIS的开发:用_超图_平台提供的GIS组件(SO),基于可视化编程语言(C#),实现GIS的功能应用(应用程序)。 ?为什么称为二次开发 组件或是框架---》开发过程

(2)组件,控件 组件

(3)组件平台

GIS组件与组件式GIS

组件式GIS(SO)提供了各种GIS组件(控件) 学习重点之一:

熟悉SO中的各个控件?学习控件的方法? 用途特点,属性,事件,方法

SO中有哪些控件

核心控件与对象 整体的对象结构图,表1-1

SO平台的安装 桌面版

开发版 supermap objects 6.0 sp5 SLM

在线申请许可 邮箱,机器名 许可文件 *.lic 在VS.NET中添加控件

专题二 SO中的数据文件

1.地理实体是如何在GIS软件中表示的?

现实---信息----机器 实体----信息模型-----0,1

时间,空间,属性--数据结构与编码--0,1

2.数据库的相关概念

数据模型(关系模型),表(关系),记录(行),属性(列) 数据结构—表,数据操作(关系代数或SQL),约束条件(三种) 思考:GIS空间数据库是否也遵循这些数据模型?

3.SO支持的数据库类型

数据库技术:SDX+ 6.x 软件---》数据模型(文件) SO中数据库相关的概念 数据库 GIS 数据库-----------数据源

表-------------数据集-?风格化--图层—叠加 地图 记录---------------实体

SO中与数据相关的概念:

工作空间,数据源,数据集,图层,地图,实体(元素,对象) 工作空间:保留的是相应规则,不保存实质的数据,VB中“工程”的概念

数据源:数据库,数据的集合 ==》SO支持三种数据源

(1)文件型的数据源 sdd/sdb udd/udb-?实验 (2)数据库型的数据源 sql server,oracle sdx+

数据库的远程发布和访问

(3)web数据源(云服务---web service),OGC规范 ===》在超图中,打开天地图的数据?

==》arcgis分别对应三种类型,技术? personal geodatabase sde

arcgis server 可以发布 web数据源

google map kml文件

数据集soDataset

SO中数据操作的基本单位,根据实体的类型分为点、线、面、体以及其它(CAD等)类型数据集==》数据集风格化后,形成图层soLayer?数据库中的表 图层

思考:数据集与图层的关系;图层与地图的关系

地图:图层叠加,地图名,地图生成规则—》工作空间中的

各个概念之间的关系

在SO中,每个概念都会有与之相对应的”对象”来进行描述(属性,事件,方法)---》用于程序的编写==》组件式开发重要的思维方法, 功能—》控件(对象)的属性,事件,方法---》程序员参考手册 ?会看对象结构图 结构,关系

整体对象结构图---用户手册(对象间的联系) 个体对象结构图---用户手册 (属性,事件,方法)

SO中的数据文件

常用的文件类型

数据交换

补充:SO开发的约束说明

1.SO中的常量se,对象命名so 2.添加引用—》

3..net中对com对象的声明和释放 释放机制,主动强制释放对象

专题三 数据文件的打开 --打开工作空间文件

客户需求

---编写简单应用程序,实现工作空间文件的打开

操作流程?

---菜单命令,打开文件对话框(控件),选择文件路径,打开结果(列出工作空间所包含的资源)

分析问题,提出解决方案

(1)用打开文件对话框来确定工作空间文件所在的路径 openFiledialog 属性,方法?熟悉常用控件的使用 通过打开文件对话框,得到用户选择的工作空间文件 if (opendialog1.showdialog()=dialogresult.ok) string smwpath=openfiledialog1.filename (2)得到了工作空间文件的路径,打开 工作空间控件 superworkspace axsuperworkspace.open()

将上一步得到的工作空间文件所在的全路径smwpath 作为实参,传递给核心方法open

bool=axsuperworkspace1.open(smwpath) (3)打开成功,列出资源(数据源等) --有哪些资源—》对象

--与工作空间控件的关系—》控件与对象的联系 --如何得到这些对象

--对象,如何列出 soMaps objMaps;

objmaps=axsuperworkspace1.Maps for (i=1; i<=objmaps.Count; i++)

listbox2.additem objmaps[i] next

界面设计

注意常用标准控件的使用 控件属性的设置(外观)

控件的排版(大小,间距,对齐) ?界面, UI控件(第三方控件)

代码的编写

//列出? 注释(可以将方案直接作为注释) 思路:核心方法,参数的构造

先写大结构(结构里面写注释),再细化 注意COM编程的约束

调试,运行,代码的优化

尽量用“特殊的实例”去验证代码 逻辑测试

不断测试,不断完善…….

总结,文档

实验报告

技术总结,项目总结,项目方案()

补充:控件的学习方法

a.用途特点:superworkspace,运行不可见,所有对数据的操作,都是以工作空间控件作为入口的 b.常用属性: c.常用方法: d.事件:

e.与其它控件或对象的关系:对象结构图 =?查看对象结构图,参考手册

补充:学习方法的方法

1.方法的作用

2.会看方法的函数原型---参考手册

Boolean SuperWorkspace.Open(strWorkspaceName As String,[strPassword As String])

返回值的数据类型

形参:参数名,参数含义,参数数据类型

if (sws1.open(swmpath) else

3.代码书写过程,都是围绕核心方法的参数(前面获得参数的值,传递给核心方法)

--打开数据源文件

客户需求

设计简单应用程序,打开SO支持的文件型数据源(文件型sdd/sdb,udd/udb,数据库型,web);列出所包含的数据集

相关操作

打开文件对话框,结果是数据集列表

提出问题,分析问题

(1)文件型数据源如何获取 -- 打开文件对话框(基本设置) -- filename属性 ? 代码

string sdbpath=opendialog1.filename (2)得到数据源文件后,如何打开

-- 功能,参考手册,控件的属性,事件,方法 工作空间控件的opendatasource()—核心方法 语法

soDatasource SuperWorkspace.OpenDataSource (strDataSourceName As String, //路径

strAlias As String, //别名

nEngineType As seEngineType, //驱动类型 bReadOnly As Boolean)

c:\\a.sdd

sodatasouce objds;

objds=axsuperworkspace1.opendatasource(sdbpath, seEngineType.sceSDBPlus, false); if (objds is nothing) {

//打开失败 } else {

//打开成功,转(3) }

”a”,

(3)打开成功,如何得到数据集列表 objds; 参看对象结构图

数据源—datasets---sodatasets(集合)---集合与元素的关系----数据集sodataset.name

界面设计

规范,标准

以后考虑UI控件的引入

编码

编码约定 方案作为注释 大的结构 程序的基本逻辑

调试运行

特殊情况

多次打开数据的情况 边调试边修改代码

总结,文档

实验报告,技术文档

要求:回宿舍,参照课本第一章,安装配置好SO6.0

专题四 地图的生成与打开

1.地图的基本概念

现实中的地图:地理数据的本质…… 地图:数据法则…..

GIS地图:平台,执行地理操作的基础

小结:如何将空间数据库中的数据----》GIS中的地图,并显示===》地图的操作

2.GIS中地图的生成(基本原理及)过程

空间数据库,数据源,数据集

数据集与图层的关系:数据集的风格化得到图层 地图是图层的叠加

数据源---》数据集的集合?数据集转化为图层,按一定的规则进行叠加,生成地图

确定了几个对象的关系后?查看对象结构图,看两者之间的关系 重点:对象结构图中,图层与数据集的关系 图层=图层集.adddataset(数据集) 数据集=图层.dataset

思考:多个图层?循环结构;多个图层顺序如何定?将这些图层按顺序叠放,显示,即地图

3.SO中与地图的相关对象

地图还是地图名?没有地图对象,只有地图名对象,而且地图名只保存规则,在工作空间中--soMaps 地图与工作空间

可编辑…状态的设置 顺序 风格设置 专题图

空间查询,量算,分析 标注,编辑…….

图层soLayer 图层对象。 该对象是 soLayers 对象的子集。 常用的属性,事件和方法---参考手册

图层集soLayers 图层集合对象。

该对象作为 SuperMap 控件的图层集合对象(soLayers),用来管理地图中的所有图层,可对其进行添加、移动、删除等操作。AddDataset 添加数据集到地图图层集合中。

solayers objlayers;

objlayers=axsupermap1.layers

地图的显示与操作:要用到SO中的核心控件 地图控件supermap

4.地图控件 supermap

学习控件的方法:

用途:地图控件 地图的相关操作 特点:GIS地图窗口的基本控件

属性:Action Handle MapName …… 事件:

方法:Close Connect OpenMap OutputMap Refresh 地图的功能:浏览功能,搜索,测距测面测角(几何量算),坐标转换,地图的输出,地图编辑,专题地图的生成……..

5.生成地图

(1)客户需求:

打开数据源文件,列出数据集,同时,生成地图,并显示 (2)操作

打开文件对话框,列表框列出数据集,地图控件显示地图 (3)分析问题,解决方案 --a.打开数据源文件 openfiledialog的设置

sdd/sdb文件的路径=.filename

objds=axsuperworkspace.opendatasource(路径,…….) --b.列出数据集

objdts=objds.datasets solayer objlayer;

for (int I=1; i<=objdts.count; i++) {

listbox1.items.add (objdts[i].name);

objlayer=axsupermap1.layers.adddataset(objdts[i],true) // --c.数据集生成图层,思考,如何叠加 } --d.显示

axsupermap.refresh();

(4)界面设计 --- (5)代码

6.对地图和图层操作的思考

(1)对地图浏览的操作

--放大,缩小,全屏,漫游,自由缩放 当前状态

选择菜单(工具按钮),切换状态 地图窗口操作 ?SO中的解决方案 axsupermap.action属性

返回/设置 地图窗口中的 Action 操作类型。所谓的action操作类型,其实就是SO已定义的action常量 找到功能对应的常量,赋值

axsupermap1.action=seaction.scaZoomIn scaNull scaPan

0 空操作。 1 地图漫游。

scaZoomIn 2 地图放大。 scaZoomOut 3 地图缩小。 scaZoomFree 4 地图自由缩放。 scaSelect

5 点击选择对象。

小结:地图操作的功能的实现基本上以action状态切换为主,具体的操作内容已封装

(2)地图的编辑操作 ---同样通过action实现…….

(3)图层的操作

需求—体验操作---分析,方案---实现

专题五 图层的管理—图例控件 superlegend

1.图例控件的用途

图例控件-图例窗口

图层的管理----图层的操作有哪些?(状态,风格,顺序,专题图……)?图例控件有哪些功能需求 ==》图例控件中的图层从哪里来?

图层的生成---》数据集,添加到地图窗口(地图控件),生成图层(显示在图例窗口—图例控件)

图例控件的数据来源---连接地图控件

superlegend.connect (supermap.ctlhandle)

2.图例控件的外观特点

外观:连接线,节点,+-,复选框,图标,名称,子图层……?如何实现;

特点:层次结构,树形结构的形式对图层进行管理 图例控件功能的体现还有一个重点:右键菜单

3.图例控件常用的属性,事件,方法

属性:

外观相关的,都是通过属性进行设置的—》属性窗口,代码 Boolean SuperLegend.HasLines 跟外观相关的属性设置,参看参考手册

PopupMenu右键菜单, 是否可以拖动ItemDragAndDrop….

方法: 连接 connect 断开连接 disconnect 刷新 refresh 事件:

Modified 图例控件改变之后

axsupermap.refresh //地图发生变化,更新 axsuperlegend.refresh 补充:

基础电子地图应用程序的开发

电子地图应用的三大部分:

数据管理:工作空间控件---treeviewer;工作空间管理控件

图层管理:图例控件 地图操作:地图控件

treeviewer控件和工作空间管理控件 treeviewer节点的操作

节点的生成(子节点,父节点),层次关系,展开; 节点的选择及单击(双击)事件

工作空间管理控件superwkspmanager 用途特点: 分“页面”tab,数据管理 主要的属性事件方法: 数据的装载:

connect(axsuperworkspace1.ctlhandle)

数据管理功能---》通过对资源节点的操作来进行 节点有哪些操作:

节点的选择与判断 P30 节点的事件,事件内容 ==》

数据源节点(父): 节点的展开

数据集节点: 生成图层(图例),显示地图

节点是数据集的名称,父节点是数据源别名 体验内容:

核心方法:solayers.adddataset()

基本思路: ?生成地图—》solayers.adddateset?sodataset <--sodataset.name-?sodatasource.alais?sodatasouce superws.datasouces[ ]

思考:因为是只有一个地图窗口,一个数据集,多次点击如何操作?

地图节点:打开地图,同时所有图层到图例

节点就是地图名

内容:打开地图并显示,同时,地图所包含的图层显示在图例中

核心方法:supermap.openmap( ) 语法

Boolean SuperMap.OpenMap(strMapName As String)

strMapName 必选 String 工作空间中地图(Map)的名称。

两个控件的刷新

布局节点:…… 小结:

数据管理升级:完善数据源(打开,新建,复制,保存,关闭,投影…..)和数据集的操作(打开,新建,复制,转换…..)

图例控件:图层操作的升级,图层(数据集)对象的操作—》专题图生成

地图窗口:浏览操作,标注,量算,编辑……

专题六 专题地图生成的功能设计

1.专题地图

专题地图信息,底图,符号(风格)…. 专题地图的生成原理:专题变量 分类:标签,单值,统计,……… ?建议:专题地图的含义

专题变量的计算(建模)是专题图的根本 具备专题地图制图的能力(项目成果) GIS开放地图制图的功能----地图汇

2.专题地图的制作过程(生成过程)

底图,专题要素(需求、业务),符号,字段,分类, 过程:

确定类型(有哪些类型) 确定图层(表)

选取(并计算)专题变量

赋值,产生不同风格的地理对象,显示

3.程序实现

(1)需求:在地图应用程序中,添加“专题地图”生成的功能 ==》用户操作用来生成专题图 (2)操作体验: 选图层 选类型 选变量 生成显示 (3)分析问题,解决方案

A选图层:列出图层(数据集),给客户选择?实验1,列出数据集(组合框/列表框)?solayer,sodataset

组合框,items.add,结合实验一(打开数据源,列出数据集)

B选类型:?只考虑单值专题图()?

补充:专题图对象

在SO中,每一种专题图类型都定义了对应的专题图对象来操作?对象的学习方法(用途特点,属性,事件,方法,对象结构图,手册)

定义,赋值 //确定了图层,可以通过图层属性,确定专题图类型 soThemeUnique 对象 单值专题图对象。

属性 Caption DefaultStyle Enable

Field Filter Style Value ValueCount 方法: MakeDefault

用组合框列出多种类型的名称(与多分支结构配合使用)

C选择专题变量:

列出所有的属性名,由客户指定—》某一张表(数据集/图层)下的所有字段名

补充:soFieldInfo对象/soFieldInfos集合 字段信息对象(名字,数据类型…..)

sodataset soFieldInfo ? Vector

solayer

从对象结构图看:

数据集---矢量数据集---记录集.getfieldinfos方法---soFileldInfos ……补充

列出所有字段需“查询记录”,暂时以smID作为专题变量

combobox1_click

//图层的名称supermap.layers=solayers[名称] solayer.dataset?数据集sodataset

//字段 数据集<--矢量数据集<-- rs.getfieldinfo()

objlayers solayers;

objlayers=supermap.layers;

objdataset=objlayers[combo1.selecteditem.tostring()].dataset; ….补充 记录集与数据集的关系

D. 赋值,不同的风格显示 多少种不同风格?数量

风格:SO中的风格对象soStyle 风格有不同的要素:如何体现

该对象用于定义几何对象在图层中显示的符号、线型、填充模式、大小、颜色等风格。

(1). soStyle对象不用赋值的

sostyle objstyle = new sostyle() //构造函数

(2). 风格对象包括很多相应的“设置”---》通过风格对象的属性来体现?线型,线的颜色,填充颜色,填充类型等都通过属性设置 objstyle. BrushColor=颜色的表示 objstyle. PenStyle =1

(3).风格设置好后, 注意“赋值”给所需要的对象

说明:凡是涉及到地理对象“显示”,都需要考虑风格对象

soColors颜色集对象

该对象主要作用是提供颜色序列。提供各种渐变色和随机色的生成,以及 SuperMap Objects 预定义渐变色的生成。 (1)=new socolors()

(2) MakeRandomColorset(n) //随机产生n种颜色 (3)赋值给相应的对象或是风格属性

代码的编写,请参考课本(单值专题图),专题图生成的实例代码 小结:

专题图的生成过程

每一步骤的解决方案,涉及到的对象或控件(四步) 单值专题图对象---生成---属性和方法 难点:风格对象和颜色集对象(三步) ?以此类推到其它专题图对象

专题七 查询

1.查询相关的概念

关键字,搜索(引擎),空间关系,结果的显示---搜商,入口 与地理数据(信息)的相关的查询 什么是查询?

查询的要素?(在哪里查?查询的方式,查询的条件)

2.GIS中的查询

GIS数据库 属性条件和空间条件 地理实体或属性 基于属性的查询 基于空间关系的查询 综合查询

(互联网地图或GIS中最常见的)两种查询方式:

图查属性---地理实体,属性数据

属性查图---基于属性条件,找出地理实体(GIS中的SQL查询) select 基于空间关系的查询

==》共同组成了GIS中的查询

3.关于属性的查询

图查属性:图是地理实体,属性是实体对应的属性数据

(1)需求:

选中地理实理,显示该实体所对应的属性 (2)操作

确定图层,点选,表格显示(属性名+记录值) (3)分析

--确定图层的可选择状态:图例控件中的右键菜单(若没有显示右键菜单,则设置图例控件的popupmenu)

--设置地图窗口是 点选 状态:地图控件的action属性scaselect

--选中地理实体:高亮显示---》SO提供了选择集对象soSelection来代表选中的地理实体(对象结构图,手册) 补充:选择集对象soSelection

该对象主要用于存放地图上被选中的对象。(高亮显示) 属性:Dataset Style

方法:FromRecordset 记录集,转为选择集 ToRecordset 将选择集,转为记录集

soRecordset soSelection.ToRecordset(bGeometryOnly As Boolean)

---补充:soRecordSet记录集

记录集(查询的结果)----实体集当中的属性信息 (结构图+手册)

记录集相当于一个数据集的子集,通常通过查询或者选择的方式得到。在记录集中,可以进行记录的添加、修改、删除等操作,也可单对数据集的属性表进行维护。

属性:FieldCount RecordCount

方法:GetFieldInfo GetFieldInfos GetFieldValue

--结果的显示:记录集内容的显示?用“表格”的形式显示 字段名---值 messagebox \\n\\r 表格形式

SO提供了 supergridview控件来显示记录集(辅助控件)

SuperGridView 控件用于显示属性数据,通常属性数据以记录集的方式提供,使用 VB 或者其它语言提供的 Grid 控件逐条添加数据,速度比较慢。使用 SuperGridView 控件,可以以很快的速度将记录集中的所有数据显示出来,且可以直接修改。 方法 Connect

Boolean SuperGridView.Connect(objRecordset As Object) Update 属性:ViewType

方式二: 属性名+记录值 GetFieldInfo GetFieldValue FieldCount

思考:事件? 地图控件 双击 (4)界面设计

如果使用supergridview控件,注意两种风格(特别是在单选/多选时候) 双击事件,体验不好(特别是在多选时) (5)编码 多思考,多改进

属性查图:构造sql的查询表达式,查找并显示地理实体

(1)需求:构造查询表达式,查询,显示地理实体(该实体的属性)

(2)操作体验:

SQL语句的构造界面,提供给客户输入查询的条件?查询的界面设计 ==》条件表达式 查询,显示结果:图文 (3)分析,解决方案:

selct 投影的列 --- 属性名列表 from 表 --- 数据集(图层) where 查询条件或连接条件 ---属性名 思考:条件表达式如何书写

a.属性查图----对话框,用于给客户输入条件表达式---构造sql语句===》注意:查询的图层(数据集)==》列出所有数据集,客户选择 OK

b.使客户了解当前数据集,有哪些字段==》列出所有的字段名 ==》rs.getfieldinfo

c.用户输入条件表达式 =?文本框接收==》查询的条件表达式 d.执行查询==》SO提供 矢量数据集对象.query()

。。。。。

补充:矢量数据集对象 数据集soDataSet

矢量 栅格(光栅) 算法,坐标 像素

因为数据集与矢量数据集是继承关系,所以得到数据集的方法,可以用来得到矢量数据集(判断与转换)<--从对象结构图得知---》如何定义,如何赋值 矢量数据集对象: soDatasetVector 对象

属性: DataSourceAlias Name TableName Type Vector

方法:Query Query2 QueryByDistance QueryByDistanceEx QueryEx QueryWithBounds query函数原型: 语法

soRecordset soDatasetVector.Query (strSQLFilter As String, //条件表达式

bHasGeometry As Boolean, //

[objFields As soStrings], //要投影出来的列 [strOptions As String] ) // 注意:与select语句结构对应

e.得到查询的结果记录集,并显示

图: 选择集对象.fromrecordset<----选择集是高亮显示的 文: supergrdiview.connect rs update

(4)界面

GIS中的空间查询

1.空间查询的基本概念和要素 哪里查----空间数据库

本文来源:https://www.bwwdw.com/article/yte8.html

Top