二次开发实习报告Word格式.docx
- 文档编号:21965047
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:21
- 大小:787.10KB
二次开发实习报告Word格式.docx
《二次开发实习报告Word格式.docx》由会员分享,可在线阅读,更多相关《二次开发实习报告Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
4.添加菜单项-5-
5.控件的关联-5-
6.打开工作空间-6-
8.地图浏览操作-7-
9.显示属性信息-8-
10.地图量算-9-
实验二:
查询功能-10-
1、案例分析-10-
2、准备的数据-10-
3、主要使用的接口和操作-11-
(1)查找Missouri河:
-11-
(2)查询Missouri河穿过的州:
-12-
(3)查询Missouri河200公里以内的县:
-14-
(4)查询SouthDakota州包含的州:
-16-
(5)关联查询SouthDakota州的人口数:
-18-
四、实验总结-19-
一、实验背景
近年来,随着社会信息化发展进程的不断推进,信息所具备的空间特性在
众多社会活动公共行政决策和商业决策中发挥的作用越来越大。
地理信息系统(GIS)作为一种获取、处理和分析空间信息的有效工具已经成为社会各行各业决策支持系统的重要组成部分。
利用GIS技术开发的以多媒体,网络化,自动化为特色的信息处理,信息管理,指挥调度和决策支撑系统,已经在各领域发挥着重大作用。
基于c#程序语言的supermapobjects组件式开发可以针对用户的不同需求开发出人们实用的GIS系统,所以二次开发具有非常重要的意义。
通过C#环境下GIS系统的开发,探索了GIS组件开发的理论与方法,为GIS应用系统的高性能开发提供了更多的理论依据从而利于改进和提高利用组件开发的GIS应用系统的质量,扩展GIS的应用领域。
二、实验目的
1、掌握利用SuperMapObjects+C#来开发GIS系统。
C#是一种现代的面向对象语言。
它使程序员快速便捷地创建基于Microsoft.NET平台的解决方案。
利用C#+SuperMapObjects进行二次开发,熟悉对GIS系统的二次开发。
2、熟练应用SuperMap来操作地图,并对数据进行处理。
掌握SuperMapObjects开发GIS系统的接口,方法。
3、通过课程设计进一步掌握了地理信息系统与应用课程的有关知识,掌握了GIS系统程序设计与开发课程的相关知识,掌握了进行系统定义、系统总体设计方法、系统详细设计、空间数据库设计方法,掌握了利用开发语言和GIS组件开发进行地理信息系统二次开发的能力,实现地理信息系统的基本功能和扩展功能,掌握面向对象进行程序设计的方法,并且可以建立空间数据库完成图形数据和属性数据的统一管理,将所学的内容加以综合,并且对GIS的二次开发有了整体的理解,真正实现从课本到实践的应用。
三、实验内容及过程
快速入门
1.新建项目
首先新建一个Windows窗体应用程序名称为QuickStart。
2.数据准备
请将本章范例项目QuickStart中的Data文件夹复制到刚才新建的项目所在目录下。
Data文件夹共有3个文件,分别为World.sdb、World.sdd、World.smw,新建的项目目录和复制的数据目录
3.添加控件
(1)添加SuperWorkspace控件、SuperMap控件、SuperLegend控件、SuperWorkspaceManager控件。
SuperWorkspace控件和SuperMap控件是SuperMapObjects组件式GIS的两大核心控件。
SuperWorkspace控件主要完成数据的组织、管理等。
SuperMap控件主要用于地图显示、图层的管理、地图基本操作等。
在“选择工具箱项”对话框中切换到“COM组件”选项卡,在列表框中选择“SuperMap控件”、“SuperWorkspace控件”、“SuperLegend控件”和“SuperWorkspaceManager控件”,添加成功后在工具箱中可以看到如图的效果。
(3)SuperLegend控件和SuperWorkspaceManager控件是辅助控件。
其中SuperWorkspaceManager控件帮助二次开发人员统一管理SuperWorkspace控件中的所有资源,使他们从繁琐的程序处理中解脱出来,集中精力解决应用领域中的设计和实现问题;
SuperLegend控件会以树状结构显示与之相关联的地图窗口的图层信息。
4.添加菜单项
5.控件的关联
SuperWorkspace控件负责数据的组织管理,而SuperMap控件用于显示数据,因此我们首先需要将SuperWorkspace控件和SuperMap控件关联起来;
另外,SuperWorkspaceManager控件将显示工作空间的内容,因此这个控件需要和SuperWorkspace控件建立关联;
SuperLegend控件用于显示当前地图窗口中打开的图层信息,因此我们还需要将SuperLegend控件和SuperMap控件进行关联。
privatevoidConnectSuperMap()
{
//将地图控件与工作空间控件进行关联
objectobjWSHandle=this.axSuperWorkspace1.CtlHandle;
this.axSuperMap1.Connect(objWSHandle);
//将工作空间管理器控件与工作空间控件进行关联
this.axSuperWkspManager1.Connect(objWSHandle);
//将图例控件与地图控件进行关联
objectobjSMHandle=this.axSuperMap1.CtlHandle;
axSuperLegend1.Connect(objSMHandle);
ReleaseObjects(objWSHandle);
ReleaseObjects(objSMHandle);
}
6.打开工作空间
双击“打开工作空间”菜单项,在ToolStripOpenWS_Click事件中添加如下代码。
这段代码将实现打开用户选择的工作空间文件(*.smw格式)。
strOpenPath=this.openFileDialog1.FileName;
//打开对话框中选择的文件全路径,即将要打开的工作空间全路径
this.ConnectSuperMap();
//关联控件
blnOpen=this.axSuperWorkspace1.Open(strOpenPath,"
"
);
//打开工作空间
7.打开数据集
数据源是由各种类型的数据集组成的数据集集合。
一个数据源可包含一个或多个不同类型的数据集,也可以同时存储矢量数据集和栅格数据集。
数据源的存储格式由扩展名为SDB和SDD的两个文件组成。
SDB存储空间数据,SDD为Access数据库,存储属性数据。
数据集是由同种类型数据组成的数据集合,也就是一组数据对象的集合。
SuperMap支持十几种不同类型的数据集,如:
点数据集、线数据集、面数据集、TIN数据集、GRID数据集、CAD数据集、网络数据集、文本数据集等。
首先为SuperWorkspaceManager控件添加鼠标左键双击事件axSuperWkspManager1_LDbClick,添加的方法请参照前面介绍的添加MainForm_FormClosing事件的方法。
在该事件中加入如下代码,实现双击打开数据集。
另外,该段代码还实现了双击打开工作空间中已有地图的功能。
stringpath=Application.StartupPath+"
\\..\\..\\..\\Data\\China.smw"
;
boolfind=this.axSuperWorkspace1.Open(path);
this.axSuperMap1.OpenMap("
基础地图"
this.axSuperMap1.Refresh();
this.axSuperWkspManager1.Refresh();
数据集打开后,将会在地图窗口中展现出来,而图例窗口用于显示当前地图窗口中的图层信息,因此当打开一个数据集后,需要刷新地图窗口,同时需要刷新图例窗口,这样在图例窗口中就可以立即看到这个新图层。
8.地图浏览操作
在打开数据集或者打开地图之后,本节我们要完成一系列对地图的基本操作,包括对地图的放大、缩小、漫游、自由缩放、全幅显示以及单击选择。
在SuperMapObjects中,通常与地图显示有关的操作都可以通过设置SuperMap控件的Action属性完成。
当Action的值为零时,表示不进行任何操作。
axSuperMap1.Action=SuperMapLib.seAction.scaSelect;
//点选
ControlState(seAction.scaSelect);
axSuperMap1.Action=SuperMapLib.seAction.scaZoomIn;
//放大
ControlState(seAction.scaZoomIn);
axSuperMap1.Action=SuperMapLib.seAction.scaZoomFree;
//自由缩放ControlState(seAction.scaZoomFree);
axSuperMap1.Action=SuperMapLib.seAction.scaPan;
//平移
ControlState(seAction.scaPan);
axSuperMap1.ViewEntire();
//全幅显示
9.显示属性信息
在GIS中,空间数据用于表示事物或现象的分布位置,而属性数据则用于说明事物和现象是什么。
因而属性数据在地理信息系统中也是不可缺少的。
//双击对话框显示对象属性
soSelectionobjSelection=this.axSuperMap1.selection;
//获得选择集;
soRecordsetobjRd=objSelection.ToRecordset(false);
//将选择集转化为记录集;
soFieldInfoobjFieldinfo=null;
if(objRd.RecordCount>
0)//如果当前有选中的对象
{
stringstr="
for(inti=1;
i<
=objRd.FieldCount;
i++)//提取所选对象的属性字段信息
objFieldinfo=objRd.GetFieldInfo(i);
str+=objFieldinfo.Name;
//得到属性字段名称
str+="
:
+objRd.GetFieldValue(i).ToString()+"
\n"
//得到每个字段值
}
MessageBox.Show(str,"
属性"
//弹出一个窗体显示选中对象的所有属性字段值
objRd.Close();
//关闭记录集
//释放变量…
10.地图量算
intnMeasureMode=0;
//0代表无量算,1长度,2角度,3面积
//其他代码……
在菜单“量算”→“长度”的单击事件mnuMeasureDistance_Click
privatevoidmnuMeasureDistance_Click(objectsender,EventArgse)
soTrackingLayerobjTLayer=axSuperMap1.TrackingLayer;
//获得跟踪层对象
objTLayer.ClearEvents();
//清除跟踪层所有几何事件对象
axSuperMap1.Action=seAction.scaTrackPolyline;
//设置当前鼠标状态为在内存中画折线
ReleaseObjects(objTLayer);
nMeasureMode=1;
//量算长度
objTLayer=null;
ControlState(seAction.scaTrackPolyline);
//控制菜单状态
this.stadisvalue.Text="
this.statotledisvalue.Text="
将鼠标状态设置为在内存中绘制折线后,通过axSuperMap1_Tracking事件处理绘制结果,在状态栏上显示绘制折线的总长度和折线最后一段的长度。
privatevoidaxSuperMap1_Tracking(objectsender,AxSuperMapLib._DSuperMapEvents_TrackingEvente)
if(e.dCurrentLength>
0&
&
nMeasureMode==1)//当前绘制的折线最后一段的长度
长度:
+e.dCurrentLength.ToString();
if(e.dTotalLength>
nMeasureMode==1)//当前绘制的折线总长度
总长度:
+e.dTotalLength.ToString();
在绘制结束时执行的事件axSuperMap1_Tracked中将鼠标状态设置为点选,并设置菜单的状态。
privatevoidaxSuperMap1_Tracked(objectsender,EventArgse)
mnuMeasureDistance.Checked=false;
//设置菜单状态
mnuMeasureArea.Checked=false;
mnuMeasureAngle.Checked=false;
axSuperMap1.Action=seAction.scaSelect;
//设置当前鼠标状态为点选
查询功能
1、案例分析
本功能实现通过使用一幅美国行政区划图实现查找Missouri河、查询Missouri河穿过的州、查询Missouri河200公里以内的县、查询SouthDakota州包含的州和关联查询SouthDakota州的人口数的功能。
本章是在上一功能的基础上开发的,且不需要添加特殊的控件,所以控件和上一功能的一样。
2、准备的数据
3、主要使用的接口和操作
通过查询操作soDatasetVector.Query(),soRecordset.GetGeometry()获得查询到的对象soGeometry,调用soTrackingLayer.AddEvent()将查询到的对象添加到临时图层上显示。
代码:
privatevoidToolStripQueryMissouri_Click(objectsender,EventArgse)
{//查询Missouri河,用到简单的SQL查询,将查询结果放到临时图层上始终显示
soLayersobjLayers=axSuperMap1.Layers;
soLayerobjLayer=objLayers["
RiversL@us"
];
if(objLayer==null)
MessageBox.Show("
请打开地图地图"
"
提示"
ReleaseObjects(objLayers);
return;
soDatasetobjDataset=objLayer.Dataset;
soDatasetVectorobjDatasetVector=(soDatasetVector)objDataset;
soRecordsetobjRecordset=objDatasetVector.Query("
RIVER_NAME='
Missouri1'
true,null,"
if(objRecordset!
=null)
intn=objRecordset.RecordCount;
soGeometryobjGeo=objRecordset.GetGeometry();
soTrackingLayerobjTrackingLayer=axSuperMap1.TrackingLayer;
soStyleobjStyle=newsoStyle();
objStyle.PenWidth=10;
objStyle.PenColor=(uint)ColorTranslator.ToOle(Color.Red);
objTrackingLayer.AddEvent(objGeo,objStyle,"
Missouri1"
axSuperMap1.Refresh();
objRecordset.Close();
ReleaseObjects(objStyle);
ReleaseObjects(objTrackingLayer);
ReleaseObjects(objGeo);
ReleaseObjects(objRecordset);
ReleaseObjects(objLayer);
ReleaseObjects(objDataset);
ReleaseObjects(objDatasetVector);
先用a的方法查出Missouri的几何对象,再调用空间查询soDatasetVector.QueryEx(),并调用soSelection.FromRecordset()将查询到的对象添加到选择集并高亮显示。
privatevoidToolStripQueryState_Click(objectsender,EventArgse)
{//查询Missouri河穿过的州,空间查询
请打开地图"
//首先查询出铜山县这个面对象
if(objRecordset!
=null)//如果查找出来了线再查找它所经过的面
//获得Missouri河线对象
soLayerobjLayerR=objLayers["
StatesR@us"
//获取州图层作为待查找图层
soDatasetobjDatasetR=objLayerR.Dataset;
soDatasetVectorobjDatasetVectorR=(soDatasetVector)objDatasetR;
soRecordsetobjRecordsetR=objDatasetVectorR.QueryEx(objGeo,seSpatialQueryMode.scsLineCross,"
if(objRecordsetR!
soSelectionobjSel=axSuperMap1.selection;
objSel.FromRecordset(objRecordsetR);
//把带有几何对象的记录集转化为选择集
objRecordsetR.Close();
ReleaseObjects(objSel);
ReleaseObjects(objRecordsetR);
ReleaseObjects(objLayerR);
ReleaseObjects(objDatasetR);
ReleaseObjects(objDatasetVectorR);
axSuperMap1.ViewEntire();
先用a的方法查出Missouri的几何对象,再执行距离查询soDatasetVector.QueryByDistance(),调用soSelection.FromRecordset()将查询到的对象添加到选择集并高亮显示。
代码:
privatevoidToolStripQueryCounty_Click(objectsender,EventArgse)
{//查询Missouri河200公里以内的县距离查询
soDatasetVectorobjDatasetVector=(soDatasetVector)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二次开发 实习 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)