地理信息系统开发具体教程.docx

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

地理信息系统开发具体教程.docx

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

地理信息系统开发具体教程.docx

地理信息系统开发具体教程

地理信息系统开发具体教程

 

 

———————————————————————————————— 作者:

————————————————————————————————日期:

 

  

地理信息系统开发具体教程

一、基本控件的添加

1.1.新建项目

文件----->新建---->项目---->Windows窗体应用

1.2.修改标题

右击窗体属性---->在Text中修改标题名称

1.3.添加菜单栏

工具箱---->菜单和工具栏---->MenuStrip(将MenuStrip拖入到窗体内)

依次添加子标题如下:

1.4.添加ToolStripContainer

工具箱---->菜单和工具栏---->ToolStripContainer

 将ToolStripContainer拖入到窗体内,右击属性,Spring属性设置为True,在添加一个Statuslabel,在属性中的text修改名称

1.5.添加SplitContainer

工具箱---->菜单和工具栏---->SplitContainer

将SplitContainer拖入到窗体中,并将右击属性中Dock设置为“Fill”

1.6.添加控件

工具箱---->ArcGIS Windows  Froms

将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里?

设Θ?

置?

缩?

小?

为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

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

当前位置:首页 > 高中教育 > 高中教育

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

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