地理信息系统开发具体教程Word格式文档下载.docx

上传人:b****6 文档编号:19046882 上传时间:2023-01-03 格式:DOCX 页数:17 大小:1.24MB
下载 相关 举报
地理信息系统开发具体教程Word格式文档下载.docx_第1页
第1页 / 共17页
地理信息系统开发具体教程Word格式文档下载.docx_第2页
第2页 / 共17页
地理信息系统开发具体教程Word格式文档下载.docx_第3页
第3页 / 共17页
地理信息系统开发具体教程Word格式文档下载.docx_第4页
第4页 / 共17页
地理信息系统开发具体教程Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

地理信息系统开发具体教程Word格式文档下载.docx

《地理信息系统开发具体教程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《地理信息系统开发具体教程Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

地理信息系统开发具体教程Word格式文档下载.docx

添加控件LicenseControl工具箱---->

ArcGISWindowsFroms---->

LicenseControl

把LicenseControl拖入到窗体中

注意:

要是程序能够正常运行,需要在Program.CS中添加一段代码,代码如下:

ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);

二、添加代码

2.1打开文件

在菜单下双击“打开地图文档”属性

(1)直接打开文件

书写格式如下:

this.axMapControl1.LoadMxFile("

文件的具体地址\文件的名称.文件格式”);

例子如下:

this.axMapControl1.LoadMxFile(E:

\ArcGISEngine地理信息系统开发教程---基于C#.NET\chp03\地图操作\data\Mxd文件\Qingdao.mxd"

);

(2)设置可选择的文件打开方式

OpenFileDialogpOpenFiledialog=newOpenFileDialog();

pOpenFiledialog.InitialDirectory=E:

\ArcGISEngine地理信息系统开发教程---基于C#.NET\chp03\地图操作\data\Mxd文件"

;

pOpenFiledialog.Filter="

文本文件(*.mxd)|*.mxd|所有文件(*.*)|*.*"

;

pOpenFiledialog.Title="

打开地图文档"

if(pOpenFiledialog.ShowDialog()==DialogResult.OK)

{

stringmxdfilpath=pOpenFiledialog.FileName;

if(this.axMapControl1.CheckMxFile(mxdfilpath))

this.axMapControl1.LoadMxFile(mxdfilpath);

}

else

MessageBox.Show("

打开地图文档无效!

"

(3)使用ControlsOpenDocCommandClass加载

添加代码如下:

ICommandcommand=newControlsOpenDocCommandClass();

command.OnCreate(this.axMapControl1.Object);

command.OnClick();

如果直接运行会出现错误,因为没有添加引用,我们需要添加引用ESRI.ArcGIS.SystemUI;

ESRI.ArcGIS.Controls;

然后在使用空间:

usingESRI.ArcGIS.SystemUI;

usingESRI.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;

4.双击button“加载数据”添加代码如下:

5.双击button“逐级放大”“逐级缩小”分别添加代码如下:

在添加代码前,需要添加引用空间代码usingESRI.ArcGIS.Geometry;

IEnvelopepEnvelope;

pEnvelope=axMapControl1.Extent;

pEnvelope.Expand(0.5,0.5,true);

//这a里?

设Θ?

置?

缩?

小?

为a一?

半?

,?

可é

以?

根ù

据Y需è

要癮具?

体?

axMapControl1.Extent=pEnvelope;

axMapControl1.ActiveView.Refresh();

IEnvelopepEnvelope;

pEnvelope.Expand(2,2,true);

6.双击button“拉框放大”“拉框缩小”分别添加代码如下:

ControlsMapZoomInToolobjTool=newControlsMapZoomInToolClass();

objTool.OnCreate(axMapControl1.Object);

axMapControl1.CurrentTool=(ITool)objTool;

ControlsMapZoomOutToolobjTool=newControlsMapZoomOutToolClass();

7.双击button“拉框放大”“拉框缩小”分别添加代码如下:

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改为EagleControlSpitContainer

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(inti=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)中任何图形元素。

IGraphicsContainerpGraphicsContainer=EagleMapControl.Mapas

//理工大学测绘学院GIS开发实验课讲义

IGraphicsContainer;

IActiveViewpActiveView=pGraphicsContainerasIActiveView;

pGraphicsContainer.DeleteAllElements();

//得到当前视图围

pEnv=(IEnvelope)e.newEnvelope;

IRectangleElementpRectangleEle=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=newRgbColorClass();

pColor.Transparency=0;

//设置填充符号的属性

IFillSymbolpFillSymbol=newSimpleFillSymbolClass();

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(objectsender,

ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvente)

if(EagleMapControl.Map.LayerCount>

//按下鼠标左键移动矩形框

if(e.button==1)

//如果指针落在鹰眼的矩形框中,标记可移动

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)

pEnv.XMax

//如果鼠标移动到矩形框中,鼠标换成小手,表示可以拖动

EagleMapControl.MousePointer=

esriControlsMousePointer.esriPointerHand;

if(e.button==2)//如果在部按下鼠标右键,将鼠标样式设置为

默认样式

esriControlsMousePointer.esriPointerDefault;

else

//在其他位置将鼠标设为默认的样式

if(bCanDrag)

doubleDx,Dy;

//记录鼠标移动的距离

Dx=e.mapX-pMoveRectPoint.X;

Dy=e.mapY-pMoveRectPoint.Y;

pEnv.Offset(Dx,Dy);

//根据偏移量更改pEnv位置

//在绘制前,清除鹰眼中之前绘制的矩形框

IRectangleElementpRectangleElement=new

RectangleElementClass();

IElementpElement=pRectangleElementasIElement;

//设置矩形框(实质为中间透明度面)

ILineSymbolpOutLine=newSimpleLineSymbolClass();

pOutLine.Width=2;

pOutLine.Color=pColor;

pFillSymbol.Outline=pOutLine;

IFillShapeElementpFillShapeElement=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)数据视图与布局视图的联动,大致代码如下:

privatevoidmainMapControl_OnAfterScreenDraw(objectsender,

ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterScreenDrawEvente)

IActiveViewpActiveView=

(IActiveView)axPageLayoutControl1.ActiveView.FocusMap;

IDisplayTransf

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1