地理信息系统开发具体教程.docx
- 文档编号:27726567
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:11
- 大小:18.98KB
地理信息系统开发具体教程.docx
《地理信息系统开发具体教程.docx》由会员分享,可在线阅读,更多相关《地理信息系统开发具体教程.docx(11页珍藏版)》请在冰豆网上搜索。
地理信息系统开发具体教程
地理信息系统开发具体教程
一、根本控件的添加
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.添加控件
工具箱---->ArcGISWindowsFroms
将TOCCControl和MapControl拖入到窗口中分别设置在左右侧
设置TOCCControl属性,使之与MapControl关联,右击TOCCControl,点击属性,在Buddy中改为axMapControl1
添加控件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;
usingESRI.ArcGIS.Controls;
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=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改为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>0)
{
//按下鼠标左键移动矩形框
if(e.button==1)
{//理工大学测绘学院GIS开发实验课讲义
//如果指针落在鹰眼的矩形框中,标记可移动
if(e.mapX>pEnv.XMin&&e.mapY>pEnv.YMin&&e.mapX<
pEnv.XMax&&e.mapY { 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 &&e.mapY { //如果鼠标移动到矩形框中,鼠标换成小手,表示可以拖动 EagleMapControl.MousePointer= esriControlsMousePointer.esriPointerHand; if(e.button==2)//如果在部按下鼠标右键,将鼠标样式设置为 默认样式 { EagleMapControl.MousePointer= esriControlsMousePointer.esriPointerDefault; } } else//理工大学测绘学院GIS开发实验课讲义 { //在其他位置将鼠标设为默认的样式 EagleMapControl.MousePointer= esriControlsMousePointer.esriPointerDefault; } if(bCanDrag) { doubleDx,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(); //得到当前视图围 IRectangleElementpRectangleElement=new RectangleElementClass(); IElementpElement=pRectangleElementasIElement; pElement.Geometry=pEnv; //设置矩形框〔实质为中间透明度面〕 IRgbColorpColor=newRgbColorClass(); pColor.Red=255; pColor.Green=0; pColor.Blue=0; pColor.Transparency=255; ILineSymbolpOutLine=newSimpleLineSymbolClass(); pOutLine.Width=2; pOutLine.Color=pColor; IFillSymbolpFillSymbol=newSimpleFillSymbolClass(); pColor=newRgbColorClass(); pColor.Transparency=0; pFillSymbol.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; IDisplayTransformationdisplayTransformation= pActiveView.ScreenDisplay.DisplayTransformation; displayTran
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地理信息系统 开发 具体 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)