ArcEngine开发代码集合
### ArcEngine开发代码集合知识点详解 #### 一、C#制作Symbol选择对话框 在ArcEngine开发中,经常需要自定义或修改地图符号(Symbol),尤其是当涉及到特定的图层样式时。本文档提供了如何利用C#语言实现一个类似于ArcMap中的Symbol选择对话框的方法。 ##### 实现原理及步骤: 1. **事件监听**:首先需要监听`TocControl`(目录控制)上的双击事件。当用户双击某个图层时,触发相应事件。 2. **位置识别**:利用`HitTest`方法确定双击的位置,并获取该位置对应的图层信息。这一步骤对于准确地识别用户操作至关重要。 3. **图层类型判断**:根据`m_TocItem`判断当前双击的对象是否为图例类(esriTOCControlItemLegendClass)。如果是,则继续执行下一步。 4. **获取图例类**:通过`ILegendGroup`接口获取图例组,进而获取具体的图例类(`ILegendClass`)。 5. **展示符号选择器**:使用`ISymbolSelector`接口创建一个符号选择器,并将当前图例类的符号添加到选择器中。用户可以选择新的符号。 6. **应用新符号**:如果用户选择了新的符号,则更新图例类的符号,并刷新视图。 ##### C#示例代码: ```csharp private void axTOCCtl_OnDoubleClick(object sender, ESRI.ArcGIS.TOCControl.ITOCControlEvents_OnDoubleClickEvent e) { IBasicMap map = null; object pOther = null; object index = null; if (e.button == 1) { m_TOCControl.HitTest(e.x, e.y, ref m_TocItem, ref map, ref m_TocLayer, ref pOther, ref index); System.Drawing.Point pos = new System.Drawing.Point(e.x, e.y); if (this.m_TocItem == esriTOCControlItem.esriTOCControlItemLegendClass) { ESRI.ArcGIS.Carto.ILegendClass pLC = new LegendClassClass(); ESRI.ArcGIS.Carto.ILegendGroup pLG = new LegendGroupClass(); if (pOther is ILegendGroup) { pLG = (ILegendGroup)pOther; } pLC = pLG.get_Class((int)index); ISymbol pSym = pLC.Symbol; ESRI.ArcGIS.DisplayUI.ISymbolSelector pSS = new ESRI.ArcGIS.DisplayUI.SymbolSelectorClass(); bool bOK = false; pSS.AddSymbol(pSym); bOK = pSS.SelectSymbol(0); if (bOK) { pLC.Symbol = pSS.GetSymbolAt(0); } this.axMapCtl.ActiveView.Refresh(); this.axTOCCtl.Refresh(); } } } ``` #### 二、实现在MAP空间里选择一块区域打印 在GIS应用中,经常需要针对地图上选定的区域进行打印输出,以满足各种业务需求。下面介绍一种基于ArcEngine实现的解决方案。 ##### 实现思路: 1. **区域选择**:允许用户在地图上选择一个感兴趣区域(Region of Interest, ROI),通常通过绘制多边形完成。 2. **图层切割**:对每个图层应用区域选择的结果,即对每个图层进行裁剪,保留选择区域内部分的数据。 3. **数据保存**:将裁剪后的图层数据保存为Shapefile格式的文件。 4. **加载与打印**:将保存的Shapefile文件加载到一个新的地图控件中,并通过此控件将数据打印出来。 ##### 关键代码片段(VB.NET): ```vbnet Public Function TrimFeatureClass2ShpFile(pFC As esriGeoDatabase.IFeatureClass, pPolygon As esriGeometry.IPolygon, strShpFileName As String, bShowProgress As Boolean) As esriGeoDatabase.IFeatureClass On Error GoTo ErrorHandler Set TrimFeatureClass2ShpFile = Nothing Dim i As Long Dim pos As Long Dim pFeatureCursor As esriGeoDatabase.IFeatureCursor Dim pFeature As esriGeoDatabase.IFeature Dim pNewFeatureCursor As esriGeoDatabase.IFeatureCursor '... 其他代码省略 ... End Function ``` #### 三、自己做插值程序 插值是GIS领域的一个重要概念,用于估计未知点处的属性值。在ArcEngine开发中,可以通过编写自定义插值程序来实现这一功能。 ##### 插值算法简介: 常见的插值方法包括反距离权重(IDW)、克里金(Kriging)等。不同的插值方法适用于不同类型的数据和场景。 1. **反距离权重插值**(IDW):这是一种基于距离的简单插值方法,它假设未知点的值与周围已知点的值呈负相关性,距离越近影响越大。 2. **克里金插值**:这是一种统计学方法,能够提供插值结果及其置信区间。克里金插值需要先确定变差函数模型。 ##### 实现插值程序的关键步骤: 1. **数据准备**:收集用于插值的数据点及其属性值。 2. **算法选择**:根据应用场景选择合适的插值算法。 3. **参数设置**:根据所选算法配置相应的参数,如权重系数等。 4. **结果验证**:通过交叉验证等方法评估插值结果的准确性。 本文档介绍了ArcEngine开发中关于Symbol选择对话框的实现方法、地图上选择区域并打印的技术方案以及如何构建自定义插值程序。这些技术点对于GIS开发者来说具有较高的实用价值。
剩余63页未读,继续阅读
- ting86498882013-01-19同上 内容较老 但是用来学习挺好的
- gisbiancheng2012-12-25谢谢分享 虽然是Word但是很有帮助
- dk12012-12-19是word文档,内容较老了
- 粉丝: 1
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言-leetcode题解之28-implement-strstr.c
- C语言-leetcode题解之27-remove-element.c
- C语言-leetcode题解之26-remove-duplicates-from-sorted-array.c
- C语言-leetcode题解之24-swap-nodes-in-pairs.c
- C语言-leetcode题解之22-generate-parentheses.c
- C语言-leetcode题解之21-merge-two-sorted-lists.c
- java-leetcode题解之Online Stock Span.java
- java-leetcode题解之Online Majority Element In Subarray.java
- java-leetcode题解之Odd Even Jump.java
- 计算机毕业设计:python+爬虫+cnki网站爬