ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:26.95KB ,
资源ID:7177484      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7177484.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ArcGIS Engine二次开发 提高篇.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ArcGIS Engine二次开发 提高篇.docx

1、ArcGIS Engine二次开发 提高篇ArcGIS Engine二次开发提高篇1 缩略图(鹰眼)鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地图的范围。在本小节中我们将学习如何制作这种鹰眼。1.1 添加控件新建一个C#.Net项目,项目名称为OverView,将Form1的名字设置为MainForm,并添加ToolbarControl 、两个MapControl和LicenceControl等四个控件。布局如下图所示。左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。图 1 界面布局在ToolbarContr

2、ol 加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。图 2添加按钮1.2 代码添加及解释鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在ArcMap中使用一个线框在鹰眼视图中标识。当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼视图中的红线框时,主视图中的视图范围也随之改变。 下面开始实现鹰眼功能,添加、三个引用。首先在axMapControl1中视图范围改变时鹰眼窗体要做出对应的响应,即绘制线框并显示,在OnExtentUpdated事件中添加代码如下:private void axMapContr

3、ol1_OnExtentUpdated(object sender, e) et项目,项目名称为Buffer,将Form1的名字设置为MainForm,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五个控件。并将ToolbarControl 、TOCControl的伙伴控件设为MapControl,Button控件的Name属性设定为btnBuffer,Text属性设定为“缓冲区分析”。控件布局效果如下图所示。图 7控件布局效果在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示。图 8

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

5、 sender, EventArgs e) hp)|*.shp; hp != (输出路径错误!); return; et项目,项目名称为OverLay,将Form1的名字设置为MainForm,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五个控件。并将ToolbarControl 、TOCControl的伙伴控件设为MapControl,Button控件的Name属性设定为btnIntersect,Text属性设定为“叠置求交”。控件布局效果如下图所示。图 12控件布局效果在ToolbarControl 加载添加

6、数据按钮和地图浏览的功能按钮,如下图所示。图 13添加按钮1.2.2 代码添加及解释首先添加如下引用:using 与缓冲区分析的实现类似,在使用Geoprocessor工具实现叠置分析时,需要首先定义一个Geoprocessor对象,因为命名空间“也包含Geoprocessor类,为了避免混淆,我们使用命名空间来定义Geoprocessor,然后设置Geoprocessor中的环境参数,这里我们使用默认参数。然后定义一个操作类,这里为Intersect,然后设置其操作参数,这里我们仅设置输入的要素,最后使用已定义的Geoprocessor对象执行即可。双击“生成缓存区”按钮,添加代码如下: p

7、rivate void btnIntersect_Click(object sender, EventArgs e) hp)|*.shp; = 选择第一个要素; hp)|*.shp; = 选择第二个要素; hp)|*.shp; hp; ; string strName = (index); Unionet项目,项目名称为OverLay,将Form1的名字设置为MainForm,Text属性设为“地图编辑”,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl、四个Button、两个ComboBox、两个Label和一个GroupBox等

8、控件。将ToolbarControl 、TOCControl的伙伴控件设为MapControl,ToolbarControl 加载添加数据按钮和地图浏览的功能按钮。控件布局效果如下图所示。图 39界面效果控件属性设置如下:表 3控件属性设置控件类型Name属性Text属性控件说明Label选择图层:Label编辑任务:ComboBoxcboLayersMapControl中的图层ComboBoxcboTasks编辑的方式ButtonbtnRefreshLayers更新图层cboLayers载入图层名称ButtonbtnStartEditing开始编辑开始编辑状态ButtonbtnSave保存保

9、存编辑ButtonbtnStopEditing结束编辑结束编辑状态GroupBox地图编辑控件容器1.3 添加引用和代码ArcEngine中的地图编辑使用IWorkspaceEdit接口来进行编辑状态的管理,在需要对指定的工作空间进行编辑时,首先使用IWorkspaceEdit获取该工作空间的数据,然后使用StartEditing方法开始编辑状态,StartEditOperation方法打开具体编辑的操作,编辑完成后,使用StopEditOperation方法关闭编辑操作,使用StopEditing方法关闭编辑状态,完成编辑。在本例中,我们实现了新的点线面要素的创建和移动的功能,涉及到了比较复

10、杂的鼠标与地图间的交互,这个功能的实现中,IDisplayFeedback是一个十分关键的接口,它具有涉及创建要素,移动要素、编辑节点等31个实现类,能够实现鼠标与地图交互中的事件的追踪,返回新的几何对象。本例的实现,我们首先来添加一个编辑类,将涉及到的编辑的相关方法抽象到这个类中。在项目中添加“Edit”类。添加如下引用。using 定义如下成员变量。 private bool mIsEditing; orkspace; mWorkspaceEdit = pWorkspace as IWorkspaceEdit; if (mWorkspaceEdit = null) return; cree

11、nDisplay; pNewLineFeedback = mDisplayFeedback as INewLineFeedback; creenDisplay; pNewPolygonFeedback = mDisplayFeedback as INewPolygonFeedback; creenDisplay; et项目,项目名称为MapRender,将Form1的名字设置为MainForm,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五个控件。并将ToolbarControl 、TOCControl的伙伴控件

12、设为MapControl。控件布局效果如下图所示。图 42控件布局效果在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示。图 43工具栏设置效果添加Buttom按钮的属性设置如下 :表 4控件属性设置控件类型Name属性Text属性控件说明ButtonbtnSimpIeRenderer简单着色对图层简单着色ButtonbtnCIassBreakRenderer分级着色对图层分级着色ButtonbtnUniqueValueRenderer唯一值着色对图层唯一值着色ButtonbtnSymbolRenderer依比例符号着色对图层依比例符号着色ButtonbtnCha

13、rtRenderer质量图着色对图层质量图着色ButtonbtnDotDensityRenderer点密度着色对图层点密度着色1.4 代码添加及解释该工程需要添加如下引用:using using usingusing using 在axMapControl1控件中添加图层,如图所示:图 44添加初始化图层1. 简单着色代码添加添加btnSimpIeRenderer按钮的Click事件代码:private void btnSimpIeRenderer_Click(object sender, EventArgs e) IMap pMap = ; 分级着色代码添加在前面代码的基础上添加如下引用:u

14、sing using 然后添加btnCIassBreakRenderer按钮的Click事件代码: private void btnCIassBreakRenderer_Click(object sender, EventArgs e) IGeoFeatureLayer pGeoFeatureL; ITable pTable; IClassifyGEN pClassify; ITableHistogram pTableHistogram; IBasicHistogram pHistogram; object dataFrequency; object dataValues; double Cl

15、asses; int ClassesCount; IClassBreaksRenderer pClassBreaksRenderer; IHsvColor pFromColor; IHsvColor pToColor; IAlgorithmicColorRamp pAlgorithmicCR; IEnumColors pEnumColors; bool ok; IColor pColor; ISimpleFillSymbol pSimpleFillS; int lbreakIndex; string strPopField = POP1990; int numDesiredClasses =

16、5; IMap pMap = ; = 0; pGeoFeatureL = (IGeoFeatureLayer)(0); ET中必须使用IClassifyGEN这个借口定义的对象才能实现分级。3. 唯一值着色代码添加添加btnUniqueValueRenderer按钮的Click事件代码: private void btnUniqueValueRenderer_Click(object sender, EventArgs e) IGeoFeatureLayer m_pGeoFeatureL; IUniqueValueRenderer pUniqueValueR; IFillSymbol pFil

17、lSymbol; IColor pNextUniqueColor; IEnumColors pEnumRamp; ITable pTable; int lfieldNumber; IRow pNextRow; IRowBuffer pNextRowBuffer; ICursor pCursor; IQueryFilter pQueryFilter; string codeValue; IRandomColorRamp pColorRamp; string strNameField = State_Name; IMap pMap = ; = 0; m_pGeoFeatureL = (IGeoFe

18、atureLayer)(0); pUniqueValueR = new UniqueValueRendererClass(); pTable = (ITable)m_pGeoFeatureL; lfieldNumber = (strNameField); if (lfieldNumber = -1) (未能找到字段 + strNameField); return; 唯一值着色代码添加在前面代码的基础上添加引用using stdole;然后添加btnSymbolRenderer按钮的Click事件代码:private void btnSymbolRenderer_Click(object sen

19、der, EventArgs e) IGeoFeatureLayer pGeoFeatureLayer; IFeatureLayer pFeatureLayer; IProportionalSymbolRenderer pProportionalSymbolR; ITable pTable; IQueryFilter pQueryFilter; ICursor pCursor; IFillSymbol pFillSymbol; ICharacterMarkerSymbol pCharaterMarkerS; IDataStatistics pDataStatistics; IStatistic

20、sResults pStatisticsResult; pFontDisp; IRotationRenderer pRotationRenderer; IMap pMap = ; = 0; pFeatureLayer = (IGeoFeatureLayer)(0); pGeoFeatureLayer = (IGeoFeatureLayer)pFeatureLayer; pTable = (ITable)pGeoFeatureLayer; pQueryFilter = new QueryFilterClass(); (); pCursor = (pQueryFilter, true); 质量图着

21、色代码添加这里以柱状图为例,先添加引用如下:然后添加btnChartRenderer按钮的Click事件代码:private void btnChartRenderer_Click(object sender, EventArgs e) IGeoFeatureLayer pGeoFeatureL; IFeatureLayer pFeatureLayer; ITable pTable; ICursor pCursor; IQueryFilter pQueryFilter; IRowBuffer pRowBuffer; int numFields = 2; int fieldIndecies =

22、new intnumFields; int lfieldIndex; double dmaxValue; bool firstValue; double dfieldValue; IChartRenderer pChartRenderer; IRendererFields pRendererFields; IFillSymbol pFillSymbol; IMarkerSymbol pMarkerSymbol; ISymbolArray pSymbolArray; IChartSymbol pChartSymbol; 简单着色代码添加添加btnDotDensityRenderer按钮的Clic

23、k事件代码:private void btnDotDensityRenderer_Click(object sender, EventArgs e) IGeoFeatureLayer pGeoFeatureL; IDotDensityRenderer pDotDensityRenderer; IDotDensityFillSymbol pDotDensityFillS; IRendererFields pRendererFields; ISymbolArray pSymbolArray; ISimpleMarkerSymbol pSimpleMarkerS; string strPopFiel

24、d = POP1990; IMap pMap = ; pGeoFeatureL = (IGeoFeatureLayer)(0); pDotDensityRenderer = new DotDensityRendererClass(); pRendererFields = (IRendererFields)pDotDensityRenderer; /添加点密度着色的字段名 (strPopField, strPopField); pDotDensityFillS = new DotDensityFillSymbolClass(); /设置着色符号的大小和颜色 = 4; IRgbColor colo

25、r = new RgbColorClass(); = 0; = 0; = 0; = color; /设置着色符号的背景颜色 = 239; = 228; = 190; = color; pSymbolArray = (ISymbolArray)pDotDensityFillS; /设置点符号样式 pSimpleMarkerS = new SimpleMarkerSymbolClass(); = ; = 4; = 128; = 128; = 255; = color; (ISymbol)pSimpleMarkerS); = pDotDensityFillS; /设置一个点代表的值 = 200000

26、; /创建图例 (); = (IFeatureRenderer)pDotDensityRenderer; null, null); 着色的效果如下图所示:图 49根据POP1990字段的点密度着色图效果1.5 小结 地图专题图制作是GIS中数据显示和分析的重要环节,涉及到的对象和接口也比较多,上面实例只是简单的实现了五种专题图的显示。读者也可以尝试在当前工程中添加TOCControl控件,然后在每次专题图生成代码的最后添加如下代码: ) ;();看看TOCControl控件中会有什么样的变化,如果读者对二次开发感兴趣,可以自己试着阅读GIS二次开发相关书籍,了解与编辑相关的接口和方法,自己实现

27、丰富的着色效果。2 网络分析在ArcGIS中,网络是由一组边和接点按照一定的拓扑关系彼此连接而成的,边是具有一定长度和物流的网络要素,接点是两条或两条以上边的交汇处,实现两条边之间的物流的转换,边与接点是网络的两类基本组成要素。ArcGIS所涉及的网络,是由一系列要素类别组成的,可以度量并能够用图形形式表达的网络,所以又称为几何网络(Geometric Network)。组成几何网络的各要素被限制存在于网络中,作为网络要素(Network Feature)。ArcGIS自动维护几何网络要素之间的基于几何的一致性拓扑关系。本节中的网络分析包括两个模块,网络生成和进行网络分析。本小节中的网络分析是

28、针对网络生成中的数据进行操作的。路径与权重的设置注意文档中的”注意”。2.1 生成几何网络在进行网络分析功能实现之前,我们需要使用ArcGIS来创建一个几何网络文件。1) 创建Geodatabase。打开ArcCatalog,在“GIS设计与开发例子数据Network”文件夹下单击右键,选择“New”,“Personal Geodatabase”,名称设为“USA_Highway_Network_GDB”。2) 创建Feature Dataset。右键单击“USA_Highway_Network_GDB”,选择“New”,“Feature Dataset”。在弹出窗口设置要素数据集的名字为“h

29、igh”。在弹出的坐标系统设置界面单击“Import”按钮,选择文件“”,即将该文件的坐标系统导入到数据集中,如图所示。然后单击“Next”,直到Finish,完成要素数据集的创建。图 50创建Feature Dataset图 51坐标系统设置3) 添加FeatureClass。右键单击要素数据集“high”,选择“Import”,“FeatureClass(Single)”,在弹出对话框中设置“Input Features”为“”,输出要素名称为“high”,输出路径为默认。单击“OK”,完成添加。图 52添加FeatureClass图 53输出设置4) 创建几何网络。右击“high”数据集,选择“New”,“Geometric Network”,准备开始生成网络。图 54创建几何网络 进入几何网络生成向导。图 55几何网络生成向导 选择几何网络生成方式,这里选择根据已存在要素创建。图 56选择几何网络生成方式 选择生成几何网络的要素,并设置名称,这里保留默认名称不做修改。图 57选择生成几何网络的要素 选择几何网络中是否保留原要素的属性值,这里选择“Yes”。图 58选择几何网络属性值 选择网络中的边的类型为复杂边(complex ed

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

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