基于组件的GIS基础功能实现
指导书
一、实验目的:
进一步熟悉SuperMap控件、SuperWorkspace控件的使用,在此基础上掌握SuperWorkspaceManager控件、SuperLengend控件的使用。通过分散的示例代码,能把它们良好的组合起来,使它们协同工作,从而形成一个整体的应用程序,实现常用的GIS操作功能。
二、实验内容:
在入门实验的基础上用C#(或其他高级程序设计语言)结合SuperMap Objects开发一个包含GIS基础功能的应用程序,实现打开工作空间、关闭工作空间、图层控制功能、面积量算、距离量算、点选、矩形选择、圈选、实现简单地图编辑功能,绘制空间对象的功能(应在相应的图层上实现,如:点层画点、线层画线、标注层标注文字)。
三、实验要求:
1.完成代码的编写工作,基于SuperMap Objects实现GIS基础功能。
2.了解利用ComGIS进行应用型地理信息系统建设工作的基本思路。
3.代码编写过程中,同时思考以下问题:
(1)几何分析是如何实现的?
(2)如何在相应图层上绘制空间对象。
(3)地图编辑状态下画出的线和面与地图量算时画出的线和面从实现方式上
看有何不同?
(4)SuperWkspManager,SuperLegend,SuperMap,SuperWorkspace这几种控件如何关联。
四、实验方法及代码
1、建立SuperWkspManager 控件与工作空间控件之间的连接,建立SuperMap
控件与SuperWorkspace 控件之间的连接,建立图例控件与地图窗口之间的连接。
Private Sub Form_Load()
SuperWkspManager1.Connect SuperWorkspace1
SuperMap1.Connect SuperWorkspace1.Handle
SuperLegend1.Connect SuperMap1.Handle
SuperMap1.Action = scaNull
End Sub
2、打开工作区间
Private Sub OpenFile_Click()
Dim strFileName As String
Dim blnOpened As Boolean
Dim i As Integer
On Error GoTo err
With OpenDialog1
.InitDir = App.Path & "\..\..\SampleData\Workspace_Map"
.DialogTitle = "打开工作空间"
.Filter = "SuperMap工作空间(*.smw)|*.smw|工作空间文件(*.sxw)|*.sxw,*.smw"
.ShowOpen
.CancelError = True '当点击打开对话框的"取消"按钮时就会出错End With
If OpenDialog1.FileName = vbNullString Then Exit Sub
If FileExist(OpenDialog1.FileName) Then '判断文件是否存在
blnOpened = SuperWorkspace1.Open(OpenDialog1.FileName)
Else
Exit Sub
End If
If blnOpened = True Then
Call AddDatasets
mnuSaveWkspAs.Enabled = True
Else
MsgBox LoadResString(121)
End If
err:
Exit Sub '由于点击"取消"按钮时出错,则突出该过程
End Sub
Private Sub AddDatasets()
Dim objDataSource As soDataSource
Dim objDatasets As soDatasets
Dim objLayers As soLayers
Set objDataSource = SuperWorkspace1.Datasources(1)
Set objDatasets = objDataSource.Datasets
Set objLayers = https://www.wendangku.net/doc/fc18311316.html,yers
For i = 1 To objDatasets.Count
objLayers.AddDataset objDatasets(i), False
Next
SuperMap1.Refresh
SuperLegend1.Refresh
SuperWkspManager1.Refresh
Set objLayers = Nothing
Set objDatasets = Nothing
Set objDataSource = Nothing
End Sub
3、关闭工作区间
'关闭工作空间,成功返回True
Public Function OnFileCloseWorkspace() As Boolean
On Error GoTo ErrHandle
https://www.wendangku.net/doc/fc18311316.html,yers.RemoveAll
SuperMap1.Refresh
SuperLegend1.Refresh
SuperWorkspace1.Close
SuperWkspManager1.Refresh
Exit Function
ErrHandle:
OnFileCloseWorkspace = False
Exit Function
End Function
4、图层变换
由于打开工作区间的时候SuperLegend1已经有了所有的图层,则直接用SuperLegend1的Modified方法来变换地图窗口的图层
Private Sub SuperLegend1_Modified()
SuperMap1.Refresh ’ 图层变换
End Sub
5、基本操作
包括放大、缩小、自由放缩、漫游、全幅显示。
SuperMap1.Action = scaPan '漫游
SuperMap1.ViewEntire ' 全幅显示
SuperMap1.Action = scaZoomIn '放大
SuperMap1.Action = scaZoomFree '自由放缩
SuperMap1.Action = scaZoomOut '缩小
6、属性查图
Private Sub cmdQueryMap_Click()
Dim objDs As soDataSource '数据源
Dim objDtVector As soDatasetVector '矢量数据集
Dim objRecordset As soRecordset '记录集
Dim objSelection As soSelection '选择集
'取矢量数据集:取其中面数据集"World"进行查询
Set objDs = SuperWorkspace1.Datasources(1)
If objDs Is Nothing Then Exit Sub
Set objDtVector = objDs.Datasets(2)
If objDtVector Is Nothing Then
MsgBox "打开数据集错误", vbInformation
Exit Sub
End If
'使用SQ L过滤条件安从数据集中查询出记录集,SQL 条件的WHERE 子句部分从编辑框中获取。( Query 方法只适用于soDatasetVector 类对象)
Set objRecordset = objDtVector.Query(txtExpression.Text, True)
If objRecordset Is Nothing Then
Exit Sub
Else
'将查询结果加入到选择集中,使其高亮显示
Set objSelection = SuperMap1.selection
objSelection.FromRecordset objRecordset
'刷新地图窗口
SuperMap1.Refresh
End If
Set objDtVector = Nothing
Set objRecordset = Nothing
Set objSelection = Nothing
End Sub
7、绘制基本图元
Private Sub Arc_Click() '画圆弧
https://www.wendangku.net/doc/fc18311316.html,yers.SetEditableLayer 1
SuperMap1.TrackingLayer.ClearEvents
SuperMap1.TrackingLayer.Refresh
SuperMap1.Action = scaEditCreateArc3P
Private Sub Circle_Click() '画圆https://www.wendangku.net/doc/fc18311316.html,yers.SetEditableLayer 2
SuperMap1.TrackingLayer.ClearEvents
SuperMap1.TrackingLayer.Refresh
SuperMap1.Action = scaEditCreateCircle
End Sub
Private Sub Line_Click() '画线https://www.wendangku.net/doc/fc18311316.html,yers.SetEditableLayer 1
SuperMap1.TrackingLayer.ClearEvents
SuperMap1.TrackingLayer.Refresh
SuperMap1.Action = scaEditCreateLinesect
End Sub
Private Sub Point_Click() '画点https://www.wendangku.net/doc/fc18311316.html,yers.SetEditableLayer 3
SuperMap1.TrackingLayer.ClearEvents
SuperMap1.TrackingLayer.Refresh
SuperMap1.Action = scaEditCreatePoint
End Sub
Private Sub Polygon_Click() '画多边形https://www.wendangku.net/doc/fc18311316.html,yers.SetEditableLayer 2
SuperMap1.TrackingLayer.ClearEvents
SuperMap1.TrackingLayer.Refresh
SuperMap1.Action = scaEditCreatePolygon
End Sub
Private Sub Rectangle_Click() '画矩形https://www.wendangku.net/doc/fc18311316.html,yers.SetEditableLayer 2
SuperMap1.TrackingLayer.ClearEvents
SuperMap1.TrackingLayer.Refresh
SuperMap1.Action = scaEditCreateRectangle
End Sub
Private Sub Text_Click() '编辑文字https://www.wendangku.net/doc/fc18311316.html,yers.SetEditableLayer 4
SuperMap1.TrackingLayer.ClearEvents
SuperMap1.TrackingLayer.Refresh
SuperMap1.Action = scaEditCreateText
8、文本风格设置
Private Sub Font1()
Dim currentstyle As soTextStyle '文本风格对象
Set currentstyle = SuperMap1.CurTextStyle '获取当前文本风格
SuperMap1.ShowTextStylePicker currentstyle '显示当前风格对话框
SuperMap1.CurTextStyle = currentstyle '获取设置后的文本风格
Set currentstyle = Nothing
End Sub
9、选择图元操作
Case "DianXuan":
SuperMap1.Action = scaSelect
Case "QuanXuan":
SuperMap1.Action = scaCircleSelect
Case "JuXingXuan":
SuperMap1.Action = scaRectSelect
10、删除、撤销、重做等操作
Case "ShanChu": ’删除
For i = 1 To https://www.wendangku.net/doc/fc18311316.html,yers.Count
https://www.wendangku.net/doc/fc18311316.html,yers.SetEditableLayer i
SuperMap1.DeleteSelection
Next
Case "CheXiao": ’撤销
If SuperMap1.UndoEnabled = True Then
SuperMap1.Undo
SuperMap1.Refresh
End If
Case "ChongZuo": ’重做
If SuperMap1.RedoEnabled = True Then
SuperMap1.Redo
SuperMap1.Refresh
End If
11、距离、面积量测
Private Sub SuperMap1_Tracked()
Dim objStyle As New soStyle
Dim objGeometry As soGeometry
objStyle.PenWidth = 2
objStyle.PenColor = vbRed
objStyle.PenStyle = 0
objStyle.BrushStyle = 1
Set objGeometry = SuperMap1.TrackedGeometry
If Not (objGeometry Is Nothing) Then
SuperMap1.TrackingLayer.AddEvent objGeometry, objStyle, ""
SuperMap1.TrackingLayer.Refresh
SuperMap1.Action = scaSelect
End If
Set objStyle = Nothing
Set objGeometry = Nothing
End Sub
Private Sub SuperMap1_Tracking(ByVal x As Double, ByVal y As Double, ByVal dCurrentLength As Double, ByVal dCurrentAngle As Double, ByVal dTotalLength As Double, ByVal dTotalArea As Double, ByVal nButtonClicked As Long)
TxtCurLength.Text = dCurrentLength
TxtTolLength.Text = dTotalLength
TxtArea.Text = dTotalArea
End Sub
五、实验结果
1、绘制各种象元,选择,测量距离、面积等操作的结果:
2、删除、撤销、重做等操作的结果:
3、文字编辑的结果:
4、属性查图的结果:
GIS二次开发实验报告 学号: 姓名: 班级: 专业: 指导老师: 二零一五年11月15日
目录 1 实验一:软件安装与AOI书签开发 (2) 1.1 实验目的 (2) 1.2 实验内容 (2) 1.3 实验结果 (2) 2 实验二:地图数据组织与访问 (5) 2.1 实验目的 (5) 2.2 实验内容 (5) 2.3 实验结果 (5) 3 实验三:地图渲染与制图输出 (9) 3.1 实验目的 (9) 3.2 实验内容 (9) 3.3 实验结果 (9) 4 实验四:空间数据处理 (14) 4.1 实验目的 (14) 4.2 实验内容 (14) 4.3 实验结果 (14) 5 实验五:GIS分析 (20) 5.1 实验目的 (20) 5.2 实验内容 (20) 5.3 实验结果 (20) 6实验六:栅格数据处理 (25) 4.1 实验目的 (25) 4.2 实验内容 (25) 4.3 实验结果 (25) 7实验总结 (31)
1实验一:软件安装与AOI书签开发 1.1实验目的 ?掌握AOI书签程序开发 1.2实验内容 ?实现AOI书签的创建 ?实现AOI书签的调用 1.3实验步骤与结果 安装程序后,新建地图显示项目。在程序的主窗体上端添加添加菜单项,文本属性为创建书签,控件名为miCreateBookmark,在旁边添加组合框,控件名为cbBookmarkList。 1.右击引用选择AddArcGIS Reference在弹出的对话框中添加引用在主窗体(即MainForm.cs)中添加代码; (1)首先添加引用代码:using ESRI.ArcGIS.Display; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.ADF; using ESRI.ArcGIS.SystemUI; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.DataSourcesFile; using ESRI.ArcGIS.DataSourcesRaster; (此引用代码都需添加引用后才可以使用,上述引用代码为本类中所需要的所有引用,在之后的编程中,可以不用重复引用) (2)添加“创建书签”函数 在MainForm类中添加成员函数CreateBookMark,代码如下: public void CreateBookmark(string sBookmarkName)//参数为书签名 { //通过IAOIBookmark接口创建一个变量,其类型为AOIBookmark,用于保存当前地图的范围 IAOIBookmark aoiBookmark = new AOIBookmarkClass(); if (aoiBookmark != null) { aoiBookmark.Location = axMapControl1.ActiveView.Extent;
实验五、空间分析基本操作 一、实验目的 1. 了解基于矢量数据和栅格数据基本空间分析的原理和操作。 2. 掌握矢量数据与栅格数据间的相互转换、栅格重分类(Raster Reclassify)、栅格计算-查询符合条件的栅格(Raster Calculator)、面积制表(Tabulate Area)、分区统计(Zonal Statistic)、缓冲区分析(Buffer) 、采样数据的空间内插(Interpolate)、栅格单元统计(Cell Statistic)、邻域统计(Neighborhood)等空间分析基本操作和用途。 3. 为选择合适的空间分析工具求解复杂的实际问题打下基础。 二、实验准备 预备知识: 空间数据及其表达 空间数据(也称地理数据)是地理信息系统的一个主要组成部分。空间数据是指以地球表面空间位置为参照的自然、社会和人文经济景观数据,可以是图形、图像、文字、表格和数字等。它是GIS所表达的现实世界经过模型抽象后的内容,一般通过扫描仪、键盘、光盘或其它通讯系统输入GIS。 在某一尺度下,可以用点、线、面、体来表示各类地理空间要素。 有两种基本方法来表示空间数据:一是栅格表达; 一是矢量表达。两种数据格式间可以进行转换。 空间分析 空间分析是基于地理对象的位置和形态的空间数据的分析技术,其目的在于提取空间信息或者从现有的数据派生出新的数据,是将空间数据转变为信息的过程。 空间分析是地理信息系统的主要特征。空间分析能力(特别是对空间隐含信息的提取和传输能力)是地理信息系统区别与一般信息系统的主要方面,也是评价一个地理信息系统的主要指标。 空间分析赖以进行的基础是地理空间数据库。 空间分析运用的手段包括各种几何的逻辑运算、数理统计分析,代数运算等数学手段。 空间分析可以基于矢量数据或栅格数据进行,具体是情况要根据实际需要确定。 空间分析步骤 根据要进行的空间分析类型的不同,空间分析的步骤会有所不同。通常,所有的空间分析都涉及以下的基本步骤,具体在某个分析中,可以作相应的变化。 空间分析的基本步骤: a)确定问题并建立分析的目标和要满足的条件 b)针对空间问题选择合适的分析工具 c)准备空间操作中要用到的数据。
苏州市职业大学 计算机网络与WebGIS实验报告 姓名: 学号: 学院: 班级:
实验一利用HTML制作表单 1.实验目的 了解掌握HTML语言:基础知识、编辑文档、超链接;图像与多媒体、表格、框架和表单 2.实验要求 硬件:GIS机房配置已达到要求; 软件:Win2000/WIN XP、记事本 3.实验内容 利用所学HTML语言完成表单制作,界面可参考图1,在制作过程中了解HTML文档的基本格式,尤其是表单标签