地理信息系统开发具体教程Word下载.docx
- 文档编号:17432121
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:18
- 大小:1.24MB
地理信息系统开发具体教程Word下载.docx
《地理信息系统开发具体教程Word下载.docx》由会员分享,可在线阅读,更多相关《地理信息系统开发具体教程Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
将TOCCControl和 MapControl拖入到窗口中分别设置在左右侧
设置TOCCControl属性,使之与MapControl关联,右击TOCC Control,点击属性,在Buddy中改为axMapControl1
添加控件LicenseControl工具箱---->
ArcGISWindows Froms---->
License Control
把LicenseControl拖入到窗体中
注意:
要是程序能够正常运行,需要在Program.CS中添加一段代码,代码如下:
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
二、添加代码
2.1打开文件
在菜单下双击“打开地图文档”属性
(1)直接打开文件
书写格式如下:
this.axMapControl1.LoadMxFile(@"
文件的具体地址\文件的名称.文件格式”);
例子如下:
this.axMapControl1.LoadMx:
\ArcGISEngine地理信息系统开发教程---基于C#.NET\chp03\地图操作\data\Mxd文件\Qingdao.mxd"
);
(2)设置可选择的文件打开方式
OpenpOpen= newOpen();
pOpenE:
\ArcGISEngine 地理信息系统开发教程---基于C#.NET\chp03\地图操作\data\Mxd文件";
pOpen = "
文本文件(*.mxd)|*.mxd|所有文件(*.*)|*.*"
;
pOpen = "
打开地图文档";
if(pOpen()== DialogResult.OK)
{
stringmxdfilpath= pOpen;
if(this.axMapControl1.CheckMx))
{
this.axMapControl1.LoadMx);
}
else
{
MessageBox.Show("
打开地图文档无效!
"
}
(3)使用ControlsOpenDocCommandClass加载
添加代码如下:
ICommandcommand =new ControlsOpenDocCommandClass();
command.OnCreate(this.axMapControl1.Object);
command.OnClick();
注意:
如果直接运行会出现错误,因为没有添加引用,我们需要添加引用ESRI.ArcGIS.SystemUI;
ESRI.ArcGIS.Controls;
然后在使用空间:
usingESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.Controls;
地图浏览
添加控件menuStrip和toolStrip还有statusStrip
依次添加控件分 栏 容器控件
splitContainer1)、内容表控件(axTOCControl1)、地图视图控件(axMapControl1)、许可控件(axLicenseControl1)。
2.为工具栏控件添加8 个按钮(BUTTON),依次将其文本(text 属
性)改为:
打开地图、加载数据、逐级放大、逐级缩小、拉框放大、
拉框缩小、漫游、全图、前一视图、后一视图,并设置相应图标依次将其NAME 属性改为CmdOpen,CmdAdd,
CmdZoomIn,CmdZoonOut, ToolZoomIn,ToolZoomOut,ToolPan,CmdFullextent、CmdBack、CmdNext
点击button->Displaystyle->ImageAndText可以使修改的TEXT名称显示出来
3.双击button“打开地图” 添加代码如下
ICommandcommand = newControlsOpenDocCommandClass();
command.OnCreate(this.axMapControl1.Object);
command.OnClick();
注意:
使用代码之前要引用命名空间
usingESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.Controls;
4.双击button“加载数据”添加代码如下:
5.双击button“逐级放大”“逐级缩小”分别添加代码如下:
注意:
在添加代码前,需要添加引用空间代码using ESRI.ArcGIS.Geometry;
IEnvelopepEnvelope;
pEnvelope =axMapControl1.Extent;
pEnvelope.Expand(0.5,0.5,true);
//这a里?
设Θ?
置?
缩?
小?
为a一?
半?
?
可é
以?
根ù
据Y需è
要癮具?
体?
axMapControl1.Extent= pEnvelope;
axMapControl1.ActiveView.Refresh();
IEnvelopepEnvelope;
pEnvelope =axMapControl1.Extent;
pEnvelope.Expand(2,2,true);
//这a里?
小?
据Y需è
axMapControl1.Extent=pEnvelope;
axMapControl1.ActiveView.Refresh();
6.双击button“拉框放大”“拉框缩小”分别添加代码如下:
ControlsMapZoomInToolobjTool= newControlsMapZoomInToolClass();
objTool.OnCreate(axMapControl1.Object);
axMapControl1.CurrentTool= (ITool)objTool;
ControlsMapZoomOutToolobjTool=newControlsMapZoomOutToolClass();
objTool.OnCreate(axMapControl1.Object);
axMapControl1.CurrentTool=(ITool)objTool;
7.双击button“拉框放大”“拉框缩小”分别添加代码如下:
ControlsMapZoomInToolobjTool=newControlsMapZoomInToolClass();
objTool.OnCreate(axMapControl1.Object);
axMapControl1.CurrentTool=(ITool)objTool;
ControlsMapZoomOutToolobjTool =newControlsMapZoomOutToolClass();
objTool.OnCreate(axMapControl1.Object);
axMapControl1.CurrentTool= (ITool)objTool;
8.双击button“漫游”添加代码如下:
stringpMouseOperate = null;
axMapControl1.CurrentTool=null;
pMouseOperate="
Pan";
axMapControl1.MousePointer=esriControlsMousePointer.esriPointerPan;
9.双击9.button“全图”添加代码如下:
axMapControl1.Extent=axMapControl1.FullExtent;
视图同步
1.按照如下设置界面
2.依次添加控件ToolBarControl和ToccControl和MapControl,并将MapControl的name改为EagleControl SpitContainer
3.将TabControl拖入到框内,并修改名称为数据和布局,并将属性中alignment中设置为bottom。
4.点击“数据”框,将MapControl拖入到其中,同样方法选中“布局”框将“PageLayoutControl拖入其中,并将MapControl改名为MainControl
5. 定义几个变量
privateboolbCanDrag;
//鹰眼地图上的矩形框可移动的标志
privateIPointpMoveRectPoint;
//记录在移动鹰眼地图上的矩形框时鼠标的位置
privateIEnvelopepEnv;
//记录数据视图的Extentﻫ然后在初始化中写入以下代码:
ﻫprivatevoidForm1_Load(objectsender,EventArgse)ﻫ{
this.axTOCControl1.SetBuddyControl(this.mainMapControl);
EagleMapControl.Extent=mainMapControl.FullExtent;
pEnv= EagleMapControl.Extent;
ﻫ}ﻫ6)首先实现主视图与鹰眼视图的数据保持一致, 在mainMapControlﻫ控件的OnMapRelaced事件中写入以下代码:
privatevoidmainMapControl_OnMapReplaced(objectsender,ﻫESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvente)ﻫ{ﻫif(mainMapControl.LayerCount>0)ﻫ{
EagleMapControl.Map=newMapClass();
ﻫ}
for(int i= 0;
i<
=mainMapControl.Map.LayerCount-1;
i++)ﻫ{ﻫEagleMapControl.AddLayer(mainMapControl.get_Layer(i));
}ﻫEagleMapControl.Extent = mainMapControl.Extent;
ﻫEagleMapControl.Refresh();
}
7)添加矩形框
当数据视图 的显示 范围发生变 化时,会触发触 发数据 视图
(MapControl1)中OnExtentUpdata事件,在该事件中绘制鹰眼视图ﻫ中的方框。
获取数据视图中的地图显示范围作为矩形框范围,添加到ﻫ鹰眼视图中。
代码如下ﻫprivatevoidmainMapControl_OnExtentUpdated(objectsender,
ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvente)
{ﻫ//添加矩形框之前,需要清除鹰眼视图( MapControl2)中任何图形元素。
IGraphicsContainer pGraphicsContainer = EagleMapControl.Mapasﻫ//安徽理工大学测绘学院 GIS开发实验课讲义
IGraphicsContainer;
ﻫIActiveViewpActiveView= pGraphicsContainerasIActiveView;
ﻫpGraphicsContainer.DeleteAllElements();
ﻫ//得到当前视图范围ﻫpEnv =(IEnvelope)e.newEnvelope;
ﻫIRectangleElement pRectangleEle =newRectangleElementClass();
IElementpElement =pRectangleEleasIElement;
pElement.Geometry= pEnv;
//设置鹰眼图中的红线框ﻫIRgbColorpColor=newRgbColorClass();
pColor.Red= 255;
ﻫpColor.Green=0;
pColor.Blue =0;
pColor.Transparency=255;
ﻫ//产生一个线符号对象
ILineSymbolpOutline =newSimpleLineSymbolClass();
pOutline.Width= 3;
ﻫpOutline.Color=pColor;
ﻫ//设置颜色属性ﻫpColor=new RgbColorClass();
ﻫpColor.Transparency =0;
//设置填充符号的属性
IFillSymbolpFillSymbol =new SimpleFillSymbolClass();
ﻫpFillSymbol.Color=pColor;
ﻫpFillSymbol.Outline=pOutline;
ﻫ//向鹰眼中添加矩形框ﻫIFillShapeElementpFillShapeEle = pElementasIFillShapeElement;
pFillShapeEle.Symbol=pFillSymbol;
ﻫpGraphicsContainer.AddElement((IElement)pFillShapeEle,0);
ﻫpActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);
ﻫ}ﻫ8)矩形框的拖动与绘制ﻫprivatevoidEagleMapControl_OnMouseDown(object sender,
ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvente)
{ﻫif (EagleMapControl.Map.LayerCount>0)
{
//按下鼠标左键移动矩形框
if (e.button== 1)
{ﻫ//安徽理工大学测绘学院 GIS开发实验课讲义ﻫ//如果指针落在鹰眼的矩形框中,标记可移动
if (e.mapX >
pEnv.XMin &
&
e.mapY>
pEnv.YMin&
e.mapX<
ﻫpEnv.XMax&&e.mapY<
pEnv.YMax)
bCanDrag=true;
pMoveRectPoint= newPointClass();
pMoveRectPoint.PutCoords(e.mapX,e.mapY);
//记录点击的第
一个点的坐标
}ﻫ//按下鼠标右键绘制矩形框ﻫelseif(e.button ==2)
{ﻫIEnvelopepEnvelope =EagleMapControl.TrackRectangle();
ﻫIPointpTempPoint=newPointClass();
pTempPoint.PutCoords(pEnvelope.XMin+pEnvelope.Width/ 2,
pEnvelope.YMin+pEnvelope.Height/2);
mainMapControl.Extent=pEnvelope;
ﻫ//矩形框的高宽和数据试图的高宽不一定成正比,这里做一个中心
调整
mainMapControl.CenterAt(pTempPoint);
ﻫ}ﻫ}ﻫ}ﻫ//移动矩形框
privatevoidEagleMapControl_OnMouseMove(objectsender,
ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvente)
{ﻫif (e.mapX > pEnv.XMin&
&e.mapY>pEnv.YMin &
e.mapX<
pEnv.XMaxﻫ&
e.mapY<
pEnv.YMax)
//如果鼠标移动到矩形框中,鼠标换成小手,表示可以拖动ﻫEagleMapControl.MousePointer =
esriControlsMousePointer.esriPointerHand;
ﻫif (e.button==2)//如果在内部按下鼠标右键,将鼠标样式设置为ﻫ默认样式
EagleMapControl.MousePointer =
esriControlsMousePointer.esriPointerDefault;
ﻫ}ﻫ}ﻫelse
//安徽理工大学测绘学院GIS 开发实验课讲义ﻫ{
//在其他位置将鼠标设为默认的样式
EagleMapControl.MousePointer=
esriControlsMousePointer.esriPointerDefault;
}ﻫif (bCanDrag)ﻫ{
double Dx, Dy;
//记录鼠标移动的距离
Dx= e.mapX -pMoveRectPoint.X;
ﻫDy= e.mapY-pMoveRectPoint.Y;
ﻫpEnv.Offset(Dx,Dy);
//根据偏移量更改pEnv位置
pMoveRectPoint.PutCoords(e.mapX,e.mapY);
//在绘制前,清除鹰眼中之前绘制的矩形框ﻫIGraphicsContainerpGraphicsContainer=EagleMapControl.MapasﻫIGraphicsContainer;
ﻫIActiveViewpActiveView=pGraphicsContainerasIActiveView;
pGraphicsContainer.DeleteAllElements();
ﻫ//得到当前视图范围ﻫIRectangleElement pRectangleElement=new
RectangleElementClass();
IElementpElement=pRectangleElementasIElement;
ﻫpElement.Geometry=pEnv;
ﻫ//设置矩形框(实质为中间透明度面)ﻫIRgbColorpColor = newRgbColorClass();
pColor.Red= 255;
ﻫpColor.Green=0;
ﻫpColor.Blue= 0;
pColor.Transparency=255;
ﻫILineSymbol pOutLine=newSimpleLineSymbolClass();
pOutLine.Width=2;
ﻫpOutLine.Color=pColor;
IFillSymbolpFillSymbol=newSimpleFillSymbolClass();
ﻫpColor =newRgbColorClass();
ﻫpColor.Transparency=0;
pFillSymbol.Color=pColor;
pFillSymbol.Outline=pOutLine;
ﻫ//向鹰眼中添加矩形框
IFillShapeElement pFillShapeElement=pElementas
IFillShapeElement;
pFillShapeElement.Symbol= pFillSymbol;
ﻫpGraphicsContainer.AddElement((IElement)pFillShapeElement,0);
//刷新ﻫ安徽理工大学测绘学院GIS开发实验课讲义
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,ﻫnull,null);
mainMapControl.Extent=pEnv;
}ﻫ}ﻫprivatevoidEagleMapControl_OnMouseUp(objectsender,ﻫIMapControlEvents2_OnMouseUpEvente)ﻫ{
if(e.button ==1&
pMoveRectPoint!
=null)
{
if(e.mapX ==pMoveRectPoint.X&
&e.mapY== pMoveRectPoint.Y)
{ﻫmainMapControl.CenterAt(pMoveRectPoint);
}ﻫbCanDrag=false;
}ﻫ}ﻫ9)请同学们根据课上的讲解试图理解上面的代码。
以上代码绘制矩ﻫ形框的代码出现了两次,可以定义一个函数以减少代码冗余。
鹰眼功
能实现代码大致就是这些, 同学们自己完成,以加深理解ﻫ10)数据视图与布局视图的联动, 大致代码如下:
ﻫprivatevoid mainMapControl_OnAfterScreenDraw(objectsender,
ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterScreenDrawEvente)ﻫ{ﻫIActiveViewpA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地理信息系统 开发 具体 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)