欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    实习指导书-第七章--ArcGIS-EngineWord格式文档下载.doc

    • 资源ID:3681754       资源大小:1.21MB        全文页数:60页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实习指导书-第七章--ArcGIS-EngineWord格式文档下载.doc

    1、 /创建鹰眼中线框 IEnvelope pEnv = (IEnvelope)e.newEnvelope; IRectangleElement pRectangleEle = new RectangleElementClass(); IElement pEle = pRectangleEle as IElement; pEle.Geometry = pEnv; /设置线框的边线对象,包括颜色和线宽 IRgbColor pColor = new RgbColorClass(); pColor.Red = 255; pColor.Green = 0; pColor.Blue = 0; pColor.

    2、Transparency = 255; / 产生一个线符号对象 ILineSymbol pOutline = new SimpleLineSymbolClass(); pOutline.Width = 2; pOutline.Color = pColor; / 设置颜色属性 pColor.Transparency = 0; / 设置线框填充符号的属性 IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pColor; pFillSymbol.Outline = pOutline; IFillSha

    3、peElement pFillShapeEle = pEle as IFillShapeElement; pFillShapeEle.Symbol = pFillSymbol; / 得到鹰眼视图中的图形元素容器 IGraphicsContainer pGra = axMapControl2.Map as IGraphicsContainer; IActiveView pAv = pGra as IActiveView; / 在绘制前,清除 axMapControl2 中的任何图形元素 pGra.DeleteAllElements(); / 鹰眼视图中添加线框 pGra.AddElement(I

    4、Element)pFillShapeEle, 0); / 刷新鹰眼 pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); 当鼠标点击鹰眼窗体时,主窗体Extent随之改变。在axMapControl2的OnMouseDown事件中添加代码如下:private void axMapControl2_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) if (this.axMapControl2.

    5、Map.LayerCount != 0) / 按下鼠标左键移动矩形框 if (e.button = 1) IPoint pPoint = new PointClass(); pPoint.PutCoords(e.mapX, e.mapY); IEnvelope pEnvelope = this.axMapControl1.Extent; pEnvelope.CenterAt(pPoint); this.axMapControl1.Extent = pEnvelope; this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.

    6、esriViewGeography, null, null); / 按下鼠标右键绘制矩形框 else if (e.button = 2) IEnvelope pEnvelop = this.axMapControl2.TrackRectangle(); this.axMapControl1.Extent = pEnvelop; 当鼠标在鹰眼窗体移动时,主窗体Extent随之改变。在axMapControl2的OnMouseMove事件中添加代码如下: private void axMapControl2_OnMouseMove(object sender, ESRI.ArcGIS.Contro

    7、ls.IMapControlEvents2_OnMouseMoveEvent e) / 如果不是左键按下就直接返回 if (e.button != 1) return; IPoint pPoint = new PointClass(); pPoint.PutCoords(e.mapX, e.mapY); this.axMapControl1.CenterAt(pPoint); this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);下面代码用于实现axMapCon

    8、trol2与axMapControl1的数据的同步更新,获取主视图中视图范围最大的图层作为鹰眼中的视图。这个更新由两部分组成,一个是对axMapControl1添加地图文档(mxd文件)的响应,通过axMapControl1的OnMapReplace事件实现,一个是对axMapControl1添加单个图层的响应,通过axMapControl1的OnFullExtentUpdated事件实现。我们获取主视图中的视图范围最大的图层写成一个独立的函数,方便调用。 private ILayer GetOverviewLayer(IMap map) /获取主视图的第一个图层 ILayer pLayer

    9、= map.get_Layer(0); /遍历其他图层,并比较视图范围的宽度,返回宽度最大的图层 ILayer pTempLayer = null; for (int i = 1; i map.LayerCount;i+ ) pTempLayer = map.get_Layer(i); if (pLayer.AreaOfInterest.Width pTempLayer.AreaOfInterest.Width) pLayer = pTempLayer; return pLayer;然后在axMapControl1的OnMapReplaced事件中调用。 private void axMapC

    10、ontrol1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e) /获取鹰眼图层 this.axMapControl2.AddLayer(this.GetOverviewLayer(this.axMapControl1.Map); / 设置 MapControl 显示范围至数据的全局范围 this.axMapControl2.Extent = this.axMapControl1.FullExtent; / 刷新鹰眼控件地图 this.axMapControl2.Refresh();在axMapContr

    11、ol1的OnFullExtentUpdated添加代码,用于实现在主视图添加图层时,实现对鹰眼视图的更新。代码如下: private void axMapControl1_OnFullExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnFullExtentUpdatedEvent e)本例的示例数据无特别要求,使用前面章节实例数据即可。运行程序,添加地图数据,可以在主视图进行相关操作,鹰眼视图同步响应,在鹰眼视图可以移动红线框可以同步更新主视图的视图范围,在鹰眼视图单击右键拉框可以重新绘制红线框,效果如下

    12、:图 3鹰眼效果7.1.3 MyGIS中添加鹰眼在上一讲中的最后一节,我们创建了一个简单的GIS系统MyGIS,这里,我们讲鹰眼功能嵌入到我们的系统中。在这里我们对实现的思路做一个介绍,请您自己动手完善MyGIS。首先需要修改一下MyGIS窗体的控件布局,我们讲鹰眼视图放到图层管理器的下方,需要在控件容器SpliterContainer1的Panel1中添加一个水平分隔的SpliterContainer,然后将图层管理器空间TOCControl和鹰眼视图MapControl分别置于上下的容器中,并将其属性Dock分别设为Fill。另外,在此种窗体布局情况下,直接在TOCControl控件属性中

    13、设置伙伴控件无效,如图所示。我们需要在MainForm的Load事件中为TOCControl设置伙伴控件为axMapControl1。添加代码如下: private void Form1_Load(object sender, EventArgs e) /设置axTOCControl1的伙伴控件 this.axTOCControl1.SetBuddyControl(axMapControl1.Object);图 4 TOCControl控件属性中设置伙伴控件然后依次添加本例中的代码,即可完成,运行效果如下图所示:图 5 MyGIS中鹰眼的运行效果7.1.4 小结在本小节中,我们实现了鹰眼功能并

    14、讲鹰眼加入了MyGIS,这部分的重点是鹰眼视图和主视图之间的事件交互。推荐您仔细结合例子程序查看代码,如果需要获得进一步的信息,请查看帮助系统。如果您对这一小节的内容比较熟悉了,就可以开始学习本章最后一小节的内容了。在下一小节中,我们将尝试添加缓冲区分析功能。ArcGIS Engine高级功能开发7.2 缓冲区分析缓冲区分析指为了识别某一地理实体或空间物体对其周围地物影响度而在其周围建立的具有一定宽度的区域,以确定哪些实体落在了被影响的区域范围之内。缓冲区分析与缓冲区查询不同,缓冲区查询是不破坏原有空间目标的关系,只是检索到该缓冲区范围内涉及到的目标。而缓冲区分析是根据设定的距离条件对一类地物

    15、建立缓冲区多边形,存储到一个新的图层中。然后再将新的图层与需要进行缓冲区分析的图层进行叠置分析,得到所需要的结果。因此,缓冲区分析实际上进行了两步的操作,第一步是建立缓冲区图层,第二步是进行叠置剪裁分析。缓冲区分析适用于点、线、面对象,如点状的居民点、线状的河流和面状的作物分布区等,只要地理实体能对周围一定区域形成影响即可使用这种分析方法。图 6点、线、面的缓冲区分析ArcGIS的ArcToolBox中的分析工具提供了缓冲区分析的功能,本节实习我们首先使用Geoprocessor方法实现一个简单的缓冲区分析功能,然后将缓冲区分析功能添加到我们的MyGIS项目中。程序运行前首先需要在D盘下新建一

    16、个名为Temp的文件夹,存放叠置分析生成的文件。7.2.1 Geoprocessor实现缓冲区分析为了降低开发难度和提高开发效率,ArcGIS Engine中添加了GeoProcessor类,使用Geoprocessor能帮助用户直接实现一些简单的工具性的功能,所有在ArcToolBox中的功能,基本都可以用Geoprocessor编程实现。本节我们使用Geoprocessor实现缓冲区分析的功能。7.2.1.1 添加控件新建一个C#.Net项目,项目名称为Buffer,将Form1的名字设置为MainForm,并添加ToolbarControl 、MapControl、TOCControl、

    17、LicenceControl和Button等五个控件。并将ToolbarControl 、TOCControl的伙伴控件设为MapControl,Button控件的Name属性设定为btnBuffer,Text属性设定为“缓冲区分析”。控件布局效果如下图所示。图 7控件布局效果在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示。图 8添加按钮7.2.1.2 代码添加及解释首先添加如下四个命名空间的引用。using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geoprocessor;using ESRI.ArcGIS.Geoproces

    18、sing;using ESRI.ArcGIS.esriSystem;在使用Geoprocessor工具实现缓冲区分析时,需要首先定义一个Geoprocessor对象,因为命名空间“ESRI.ArcGIS.Geoprocessing”也包含Geoprocessor类,为了避免混淆,我们使用命名空间来定义Geoprocessor,然后设置Geoprocessor中的环境参数,这里我们使用默认参数。然后定义一个操作类Buffer,并设置参数,生成缓冲区的参数包含原始图层,缓冲半径和输出路径,最后使用已定义的Geoprocessor对象执行即可。双击“生成缓存区”按钮,添加代码如下: private

    19、void btnBuffer_Click(object sender, EventArgs e) /判断MapControl中是否包含图层 if (this.axMapControl1.LayerCount = 0) return; /获取MapControl中第一个图层 ILayer pLayer = this.axMapControl1.Map.get_Layer(0); /输出路径,可以自行指定 string strOutputPath = D:Buffer.shp; /缓冲半径 double dblDistace = 1.0; /获取一个geoprocessor的实例,避免与命名空间G

    20、eoprocessing中的Geoprocessor发生引用错误 ESRI.ArcGIS.Geoprocessor.Geoprocessor gp = new ESRI.ArcGIS.Geoprocessor.Geoprocessor(); /OverwriteOutput为真时,输出图层会覆盖当前文件夹下的同名图层 gp.OverwriteOutput = true; /创建一个Buffer工具的实例 ESRI.ArcGIS.AnalysisTools.Buffer buffer = new ESRI.ArcGIS.AnalysisTools.Buffer(pLayer, strOutput

    21、Path, dblDistace); /执行缓冲区分析 IGeoProcessorResult results = null; results = gp.Execute(buffer, null) as IGeoProcessorResult; /判断缓冲区是否成功生成 if (results.Status != esriJobStatus.esriJobSucceeded) MessageBox.Show(图层 + pLayer.Name + 缓冲区生成失败!); else缓冲区生成成功! /将生成图层加入MapControl int index = strOutputPath.LastIn

    22、dexOf( this.axMapControl1.AddShapeFile(strOutputPath.Substring(0, index), strOutputPath.Substring(index);运行程序,添加一个图层(多个图层时本例中默认选择的图层为第一个图层),点击“生成缓冲区”,运行结果如图。图 9缓冲区生成效果7.2.1.3 小结本例中,我们使用Geoprocessor工具实现了缓冲区分析。从中我们可以得到Geoprocessor工具使用的一般方法,在使用Geoprocessor时,一般需先定义一个Geoprocessor对象,然后设置该对象的参数,如本例中的OverwriteOutput,再定义一个具体的操作类,如本例中的Buffer类,在设置完操作类的参数后,则通过Geoprocessor的Excute函数来执行。至此,我们已经实现了一个简


    注意事项

    本文(实习指导书-第七章--ArcGIS-EngineWord格式文档下载.doc)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开