第四章 地图显示(课堂PPT)_第1页
第四章 地图显示(课堂PPT)_第2页
第四章 地图显示(课堂PPT)_第3页
第四章 地图显示(课堂PPT)_第4页
第四章 地图显示(课堂PPT)_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章地图显示,1,第四章地图显示,4.1加载图层及相关操作4.2地图浏览功能的实现4.3图层控制4.4地图标注4.5实现鹰眼图功能,2,4.1加载图层及相关操作,4.1.1使用属性向MapControl中添加图层4.1.2使用程序动态地向MapControl中添加图层4.1.3图层的选择、移动、显示隐藏和卸载4.1.4控制图层显示的范围,3,4.1.1使用属性向MapControl中添加图层,(1)新建一个项目启动VisualStudio.NET,在【文件】菜单中选择【新建项目】,在“新建项目”对话框中选择项目类型为“VisualC#”,模板为“Windows应用程序”,选择“位置”,点击“确定”保存该项目,4,4.1.1使用属性向MapControl中添加图层,(2)添加选项卡在“工具箱”的空白处单击鼠标右键,在弹出的快捷菜单中选择“添加选项卡”,然后在新增选项卡上输入“ESRI控件”作为选项卡标签,5,4.1.1使用属性向MapControl中添加图层,(3)添加ArcGISEngine控件右键点击“ESRI控件”标签,从快捷菜单中选择“选择项”,6,4.1.1使用属性向MapControl中添加图层,在弹出的“选择工具项”对话框中选择“.NETFramework组件”选项卡,选中”AxMapControl”、“AxTOCControl”、“AxToolbarControl”和“AxPageLayoutControl”等复选框,单击“确定”按钮,将所选择的控件添加到工具栏中,7,4.1.1使用属性向MapControl中添加图层,在项目菜单中选择“添加引用”,在弹出的“添加引用”对话框中添加以下常用的类库引用:ESRI.ArcGIS.CartoESRI.ArcGIS.DisplayESRI.ArcGIS.GeometryESRI.ArcGIS.SystemESRI.ArcGIS.SystemUI,8,4.1.1使用属性向MapControl中添加图层,(4)在窗体中嵌入ArcGISEngine控件双击工具箱中的“ESRI”标签栏中的AxMapControl和AxLicenseControl控件,将它们都添加到窗体上,并调整好大小和位置。,9,4.1.1使用属性向MapControl中添加图层,(5)右键单击MapControl控件,在弹出的对话框中选择【属性】,10,4.1.1使用属性向MapControl中添加图层,(6)在弹出的属性页窗体中添加图层,11,4.1.1使用属性向MapControl中添加图层,(7)运行程序,显示结果,12,4.1.2使用程序动态地向MapControl中添加图层,MapControl类提供了三个方法用于加载图层:(1)AddLayer说明:AddsalayertotheMapscollectionoflayersatthespecifiedindexposition用法:object.AddLayer(Layer,toIndex=0)其中:Layer参数表示ILayer对象,必选参数toIndex参数表示图层的索引,长整型,可选参数,13,4.1.2使用程序动态地向MapControl中添加图层,MapControl类提供了三个方法用于加载图层:(2)AddLayerFromFile说明:Loadsalayerfile(*.lyr文件)andaddsittotheMapscollectionoflayersatthespecifiedindexposition.用法:object.AddLayerFromFile(lyrPath,toIndex=0)其中:lyrPath表示*.lyr文件的具体物理路径,必选参数toIndex参数表示图层的索引,长整型,可选参数,14,4.1.2使用程序动态地向MapControl中添加图层,MapControl类提供了三个方法用于加载图层:(3)AddShapeFile说明:Addsashapefile(*.shp文件)asalayertotheMap.用法:object.AddShapeFile(Path,fileName)其中:Path表示包含shape文件的文件夹路径,必选参数fileName参数表示shape文件的文件名,必选参数,15,通过AddShapeFile方法加载图层的代码演示,privatevoidForm1_Load(objectsender,EventArgse)axMapControl1.AddShapeFile(d:dataworld“,country.shp);axMapControl1.AddShapeFile(“d:dataworld“,rivers.shp);axMapControl1.AddShapeFile(d:dataworld“,cities.shp);,这里用绝对路径是否会有问题?,16,改进后的代码,stringCurrentPath=Directory.GetCurrentDirectory();Directory.SetCurrentDirectory(CurrentPath+.dataworld);stringFilePath=Directory.GetCurrentDirectory();axMapControl1.AddShapeFile(FilePath,country.shp);axMapControl1.AddShapeFile(FilePath,rivers.shp);axMapControl1.AddShapeFile(FilePath,cities.shp);,17,4.1.3图层的选择、移动、隐藏显示和卸载,图层的选择MapControl通过对图层进行索引来定位图层,通过MapControl类的Layer属性可以实现图层的选择Layer属性的具体用法:variable=object.get_Layer(index)其中:variable:表示返回的图层对象index:表示图层的索引值,在MapControl中索引号小的图层在索引号较大的图层的上面,最上面图层的索引号为0,18,代码示例:返回当前地图中的各个图层的名字,listBox1.Items.Clear();listBox1.Items.Add(当前地图中的图层名如下:);inti;intlyrCount;lyrCount=axMapControl1.LayerCount;for(i=0;i=lyrCount-1;i+)listBox1.Items.Add(axMapControl1.get_Layer(i).Name);,19,4.1.3图层的选择、移动、隐藏显示和卸载,移动图层通过MapControl类的MoveLayerTo方法可以实现图层的移动MoveLayerTo方法的具体用法:object.MoveLayerTo(fromIndex,toIndex)其中:fromIndex:表示要进行移动操作的图层的索引toIndex:表示移动操作后图层的新索引,20,4.1.3图层的选择、移动、隐藏显示和卸载,移动图层代码示例:axMapControl1.MoveLayerTo(2,0);上面的代码表示把索引号为2的图层移动到索引为0的位置上,21,4.1.3图层的选择、移动、隐藏显示和卸载,隐藏、显示图层通过图层对象的Visible属性可以实现图层的隐藏或显示Visible属性的具体用法:object.Visible=value其中:value:布尔值,true或者false代码示例:axMapControl1.get_Layer(2).Visible=false;axMapControl1.Refresh();,22,4.1.3图层的选择、移动、隐藏显示和卸载,卸载图层通过MapControl类的DeleteLayer方法和ClearLayers方法可以实现图层的卸载DeleteLayer方法用于卸载指定的图层,具体用法为:object.DeleteLayer(index)其中:index:表示要卸载的图层的索引号代码示例:(下列代码表示删除索引号为2的图层)axMapControl1.DeleteLayer(2);,23,4.1.3图层的选择、移动、隐藏显示和卸载,卸载图层ClearLayers方法用于卸载所有的图层,具体用法为:object.ClearLayers代码示例:(下列代码表示删除地图控件中所有的图层)axMapControl1.ClearLayers();,24,4.1.4控制图层显示的范围,通过图层对象的MaximumScale属性和MinimumScale属性可以设置某个图层在一定的比例尺范围内进行显示代码示例:axMapControl1.get_Layer(0).MaximumScale=10000000;axMapControl1.get_Layer(0).MinimumScale=40000000;,25,4.2地图浏览功能的实现,4.2.1移动地图4.2.2拉框放大地图4.2.3拉框缩小地图4.2.4中心放大地图4.2.5中心缩小地图4.2.6全图显示4.2.7历史视图切换4.2.8使用ArcGISEngine中封装好的对象实现地图的操作,26,4.2.1移动地图,通过MapControl对象的Pan方法可以实现移动地图的操作代码示例:axMapControl1.Pan();,27,4.2.2拉框放大地图,原理:把当前地图的显示范围设置为鼠标拉框的范围代码示例:axMapControl1.Extent=axMapControl1.TrackRectangle();,28,4.2.3拉框缩小地图,原理:拉框缩小地图和拉框放大地图是对应的操作,这个操作要计算缩小后地图的显示范围,因此稍微有些复杂以拉框范围为中心,地图缩小倍数为:当前地图的范围/拉框矩形的范围地图缩小后,地图的显示范围是变大的,29,拉框缩小地图的关键代码如下:zoomInWidthFactor=pCurrentExtent.Width/pDrawRectangle.Width;zoomInHeightFactor=pCurrentExtent.Height/pDrawRectangle.Height;newMapExtentWidth=pCurrentExtent.Width*zoomInWidthFactor;newMapExtentHeight=pCurrentExtent.Height*zoomInHeightFactor;newMapExtentXmin=pCurrentExtent.XMin-(pDrawRectangle.XMin-pCurrentExtent.XMin)*zoomInWidthFactor;newMapExtentYmin=pCurrentExtent.YMin-(pDrawRectangle.YMin-pCurrentExtent.YMin)*zoomInHeightFactor;newMapExtentXmax=newMapExtentXmin+newMapExtentWidth;newMapExtentYmax=newMapExtentYmin+newMapExtentHeight;pNewEnvelope.PutCoords(newMapExtentXmin,newMapExtentYmin,newMapExtentXmax,newMapExtentYmax);axMapControl1.Extent=pNewEnvelope;,30,4.2.4中心放大地图,原理:中心放大,就是以当前视图的中心点为缩放中心把地图进行放大的操作IEnvelope接口提供的Expand方法可以改变Envelope对象所包含的范围Expand方法的具体用法:object.Expand(dx,dy,asRatio)其中:dx:表示X轴方向的改变量dy:表示Y轴方向的改变量asRatio:表示是否按照比率进行变换,31,4.2.4中心放大地图,代码示例:IEnvelopepEnvelope;pEnvelope=axMapControl1.Extent;pEnvelope.Expand(0.5,0.5,true);axMapControl1.Extent=pEnvelope;,32,4.2.5中心缩小地图,原理:中心缩小,就是以当前视图的中心点为缩放中心把地图进行缩小的操作代码示例:IEnvelopepEnvelope;pEnvelope=axMapControl1.Extent;pEnvelope.Expand(2,2,true);axMapControl1.Extent=pEnvelope;,33,4.2.6全图显示,原理:全图显示,就是把所有可见的地理要素显示在视图范围内,通过MapControl对象的FullExtent属性即可以得到包含所有地理要素的最大范围代码示例:axMapControl1.Extent=axMapControl1.FullExtent;,34,4.2.7历史视图切换,所谓历史视图切换指用户可以向前和向后切换视图的操作IActiveView的ExtentStack属性可以保存视图的范围,用IExtentStack的Undo和Redo方法可以实现视图的向前和向后切换返回上一视图代码示例:if(axMapControl1.ActiveView.ExtentStack.CanUndo()axMapControl1.ActiveView.ExtentStack.Undo();,35,4.2.7历史视图切换,返回下一视图代码示例:if(axMapControl1.ActiveView.ExtentStack.CanRedo()axMapControl1.ActiveView.ExtentStack.Redo();,36,4.2.8使用ArcGISEngine中封装好的对象实现地图的操作,在ArcGISEngine中,很多对象都是从ICommand接口和ITool接口继承来的,这些对象是ESRI封装好的,可以直接调用实现地图的基本操作(具体的对象可以参照ICommand接口帮助)常用的封装好的地图操作对象如下:ControlsMapZoomInToolClass(放大地图)ControlsMapZoomOutToolClass(缩小地图)ControlsMapPanToolClass(移动地图)ControlsMapZoomPanToolClass(缩放/平移地图)ControlsMapIdentifyToolClass(点图查询)ControlsMapIdentifyToolClass(量测工具),37,4.2.8使用ArcGISEngine中封装好的对象实现地图的操作,常用的封装好的地图操作对象如下:ControlsMapZoomInFixedCommandClass(中心放大地图命令)ControlsMapZoomOutFixedCommandClass(中心缩小地图命令)ControlsMapFullExtentCommandClass(全图显示命令)ControlsMapZoomToLastExtentBackCommandClass(前一视图命令)ControlsMapZoomToLastExtentForwardCommandClass(后一视图命令),38,4.2.8使用ArcGISEngine中封装好的对象实现地图的操作,代码示例:(以“放大地图”工具为例)ICommandCmd;Cmd=newControlsMapZoomInToolClass();Cmd.OnCreate(axMapControl1.Object);axMapControl1.CurrentTool=(ITool)Cmd;,39,4.2.8使用ArcGISEngine中封装好的对象实现地图的操作,代码示例:(以“全图显示”命令为例)ICommandcmd;cmd=newControlsMapFullExtentCommandClass();cmd.OnCreate(axMapControl1.Object);cmd.OnClick();,40,4.3图层控制,4.3.1使用TocControl控件控制图层4.3.2使用TocControl控件对图层进行高级操作,41,4.3.1使用TocControl控件控制图层,TocControl是ArcGISEngine中用来管理MapControl中图层的控件,它的使用非常简单,只需要把它和对应的MapControl进行绑定即可绑定的两种方法(1)在控件属性中直接绑定,42,4.3.1使用TocControl控件控制图层,绑定的两种方法,(2)使用代码进行动态绑定axTOCControl1.SetBuddyControl(axMapControl1);,43,4.3.2使用TocControl控件对图层进行高级操作,1)从TocControl上获得被点击的图层信息2)修改图层的名称3)拖动图层改变图层的叠放顺序4)在TocControl上给图层定义其他操作5)在TocControl上给图层添加快捷菜单,44,1)从TocControl上获得被点击的图层信息,从鼠标在TocControl控件中点击的位置来获得要操作的图层的所有信息以及图层本身,可以通过TocControl对象的HitTest方法实现HitTest方法的用法:object.HitTest(X,Y,refItemType,refBasicMap,refLayer,refUnk,refData)其中:X:表示鼠标点击处的横坐标;Y:表示鼠标点击处的纵坐标;ItemType:表示esriTOCControlItem枚举常量;BasicMap:表示当前的地图,为IBasicMap类型的对象Layer:表示被点击的图层,为ILayer类型的对象;Unk:表示TocControl上的legendGroup对象,为object类型;Data:表示LegendClass在LegendGroup中的Index,为object类型,45,1)从TocControl上获得被点击的图层信息,esriTOCControlItem枚举常量用于描述TocControl上的Item的类型,其定义如下:esriTOCControlItemNone0表示没有对象esriTOCControlItemMap1表示Map对象esriTOCControlItemLayer2表示Layer对象esriTOCControlItemHeading3表示对象的标题esriTOCControlItemLegendClass4表示LegendClass对象,46,1)从TocControl上获得被点击的图层信息,代码示例:ILayerpLayer=null;objectpLegendIndex=null;IBasicMappMap=null;objectpLengendGroup=null;esriTOCControlItempSelectItem=esriTOCControlItem.esriTOCControlItemNone;axTOCControl1.HitTest(e.x,e.y,refpSelectItem,refpMap,refpLayer,refpLengendGroup,refpLegendIndex);/MessageBox.Show(pSelectItem.ToString();MessageBox.Show(图层数:+pMap.LayerCount.ToString()+,选择的类型:+pSelectItem.ToString()+,LengendIndex:+pLegendIndex+,图层名称:+pLayer.Name);,47,2)修改图层的名称,在TocControl的OnEndLabelEdit事件中添加以下代码即可以实现图层名称的修改privatevoidaxTOCControl1_OnEndLabelEdit(objectsender,ITOCControlEvents_OnEndLabelEditEvente)if(e.newLabel.Trim()=)e.canEdit=false;,48,3)拖动图层改变图层的叠放顺序,在TocControl控件的属性页中把“EnableLayerDragandDrop”复选框选上即可以实现拖动图层改变图层顺序的操作,49,4)在TocControl上给图层定义其他操作,可以通过在TocControl控件中操作,给图层设置符号、颜色、标注、查看属性等任何需要的功能要在TocControl上添加更多的功能,首先需要了解TocControl上各个部位是什么,以便于在适合的位置添加代码实现具体的功能关键:通过TocControl的HitTest方法可以返回鼠标点击部位的相关信息,50,5)在TocControl上给图层添加快捷菜单,如果想在TocControl上实现更多的操作,如实现图层复制、删除、关联、放大到图层、设置显示范围、标注、图层设置符号、转换、保存图层、查看属性等功能,那么仅通过点击TocControl控件的不同部位来实现显然是不能满足要求的给图层添加右键菜单并把必要的功能集成上去,显然是一种非常好的方法代码示例:请参考课件的配套代码,51,4.4地图标注和注记,4.4.1标注和注记的概念4.4.2使用TextElement绘制标注4.4.3使用标注对象标注要要素层,52,4.4.1标注和注记的概念,标注和注记是使用文字信息来标注地图上的要素标注是依赖于图层的属性而存在的注记不一定和图层的属性相关联,它作为地理要素被存储,53,4.4.2使用TextElement绘制标注,原理把地理对象的某个属性值以TextElement的形式绘制在该地理对象之上代码示例:,54,IFeatureCursorpFeatCursor;IFeatureClasspfeatClass;IFeatureLayerpfeatlayer;IFeaturepfeature;IEnvelopepEnv;IRgbColorpColor;stdole.FontpFont;IPointpt;ITextSymbolpTextSymbol;IElementpEle;ITextElementpTextEle;IGraphicsContainerpGraphicsContainer;IActiveViewpActiveView;pfeatlayer=(IFeatureLayer)axMapControl1.get_Layer(0);pfeatClass=pfeatlayer.FeatureClass;pFeatCursor=pfeatClass.Search(null,false);pfeature=pFeatCursor.NextFeature();intfieldIdx;,55,inti;/得到cname字段的IndexfieldIdx=pfeature.Fields.FindField(cname);/创建颜色pColor=newRgbColorClass();pColor.Blue=255;/创建字体pFont=newstdole.StdFontClass();pFont.Name=楷体;/创建标注样式pTextSymbol=newTextSymbolClass();pTextSymbol.Color

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论