GIS开发215.docx
- 文档编号:3565425
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:10
- 大小:550.99KB
GIS开发215.docx
《GIS开发215.docx》由会员分享,可在线阅读,更多相关《GIS开发215.docx(10页珍藏版)》请在冰豆网上搜索。
GIS开发215
GIS设计与开发
实验1
1新建项目
(1)首先新建一个Windows窗体应用程序名称为QuickStart。
2数据准备
请将本章范例项目QuickStart中的Data文件夹复制到刚才新建的项目所在目录下。
Data文件夹共有3个文件,分别为World.sdb、World.sdd、World.smw,新建的项目目录和复制的数据目录
3添加控件
添加SuperWorkspace控件、SuperMap控件、SuperLegend控件、SuperWorkspaceManager控件。
SuperWorkspace控件和SuperMap控件是SuperMapObjects组件式GIS的两大核心控件。
SuperWorkspace控件主要完成数据的组织、管理等。
SuperMap控件主要用于地图显示、图层的管理、地图基本操作等。
SuperLegend控件和SuperWorkspaceManager控件是辅助控件。
其中SuperWorkspaceManager控件帮助二次开发人员统一管理SuperWorkspace控件中的所有资源,使他们从繁琐的程序处理中解脱出来,集中精力解决应用领域中的设计和实现问题;SuperLegend控件会以树状结构显示与之相关联的地图窗口的图层信息。
(3)在“选择工具箱项”对话框中切换到“COM组件”选项卡,在列表框中选择“SuperMap控件”、“SuperWorkspace控件”、“SuperLegend控件”和“SuperWorkspaceManager控件”,添加成功后在工具箱中可以看到如图2-7的效果。
图2-6“选择工具箱项”对话框
4设计窗体布局
4.添加菜单项
6控件的关联
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);
}
8打开工作空间
双击“打开工作空间”菜单项,在ToolStripOpenWS_Click事件中添加如下代码。
这段代码将实现打开用户选择的工作空间文件(*.smw格式)。
strOpenPath=this.openFileDialog1.FileName;
//打开对话框中选择的文件全路径,即将要打开的工作空间全路径
this.ConnectSuperMap();//关联控件
blnOpen=this.axSuperWorkspace1.Open(strOpenPath,"");//打开工作空间
图2-16打开工作空间后的效果
9打开数据集
数据源是由各种类型的数据集组成的数据集集合。
一个数据源可包含一个或多个不同类型的数据集,也可以同时存储矢量数据集和栅格数据集。
数据源的存储格式由扩展名为SDB和SDD的两个文件组成。
SDB存储空间数据,SDD为Access数据库,存储属性数据。
数据集是由同种类型数据组成的数据集合,也就是一组数据对象的集合。
SuperMap支持十几种不同类型的数据集,如:
点数据集、线数据集、面数据集、TIN数据集、GRID数据集、CAD数据集、网络数据集、文本数据集等。
9.1代码实现
首先为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();
数据集打开后,将会在地图窗口中展现出来,而图例窗口用于显示当前地图窗口中的图层信息,因此当打开一个数据集后,需要刷新地图窗口,同时需要刷新图例窗口,这样在图例窗口中就可以立即看到这个新图层。
图2-17打开地图的效果
11地图浏览操作
在打开数据集或者打开地图之后,本节我们要完成一系列对地图的基本操作,包括对地图的放大、缩小、漫游、自由缩放、全幅显示以及单击选择。
在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();//全幅显示
12显示属性信息
在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();//关闭记录集
//释放变量…
图2-19显示对象属性
13地图量算
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)//当前绘制的折线最后一段的长度
this.stadisvalue.Text="长度:
"+e.dCurrentLength.ToString();
if(e.dTotalLength>0&&nMeasureMode==1)//当前绘制的折线总长度
this.statotledisvalue.Text="总长度:
"+e.dTotalLength.ToString();
}
在绘制结束时执行的事件axSuperMap1_Tracked中将鼠标状态设置为点选,并设置菜单的状态。
privatevoidaxSuperMap1_Tracked(objectsender,EventArgse)
{
mnuMeasureDistance.Checked=false;//设置菜单状态
mnuMeasureArea.Checked=false;
mnuMeasureAngle.Checked=false;
axSuperMap1.Action=seAction.scaSelect;//设置当前鼠标状态为点选
}
图2-20长度量算结果
实习心得
在此次实验中,我对VS开发环境和SuperMapObject的COM组件有了初步的了解,也有了感性的认识。
知道了如何进行一些地图基础操作的实现和查找一些关键的代码。
这些都将会对我以后的学习带来很大的帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GIS 开发 215