Engine10.0轻松入门级教程(3)

上传人:飞*** 文档编号:26985522 上传时间:2018-01-04 格式:PDF 页数:47 大小:1.01MB
返回 下载 相关 举报
Engine10.0轻松入门级教程(3)_第1页
第1页 / 共47页
Engine10.0轻松入门级教程(3)_第2页
第2页 / 共47页
Engine10.0轻松入门级教程(3)_第3页
第3页 / 共47页
Engine10.0轻松入门级教程(3)_第4页
第4页 / 共47页
Engine10.0轻松入门级教程(3)_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《Engine10.0轻松入门级教程(3)》由会员分享,可在线阅读,更多相关《Engine10.0轻松入门级教程(3)(47页珍藏版)》请在金锄头文库上搜索。

1、ArcGIS Engine10.0 轻松入门级教程( 3) ArcEngine10.0 查询分析功能目录 (?)-1. 属性及空间查询2. 缓冲区查询3. 叠置分析4. 网络分析GIS 中的查询分析功能是非常重要的,本节将实现这些功能。1 属性及空间查询在 Forms 文件夹右击点击“添加” “ Windows窗体”,添加两个窗体,分别用于空间查询和属性查询,参数设置如下表。窗体名称( Name ) Text 属性 描述SpatialQueryForm 空间查询 用于空间查询参数设置AttributeQueryForm 属性查询 用于属性查询参数设置同时在主窗体上的菜单项上添加一二级菜单。查询

2、( menuQuery ) 属性查询( menuAttributeQuery ) 空间查询( menuSpatialQuery )实现属性查询, 首先打开 “ 属性查询 ” 窗体的设计器。 添加三个 Label 控件, 两个 ComboBox, 两个 Button和一个 TextBox 。各控件属性设置如下:名称( Name) Text 属性 描述lblLayer 选择图层: 标签lblField 字段名称: 标签lblFind 查找内容: 标签cboLayer MapControl 中的图层名称cboField cboLayer 选中图层的所有字段名称txtValue 输入的查询对象名称bt

3、nOk 查找 查询按钮btnCancel 取消 取消查询按钮界面效果如下:进入窗体的代码编辑界面,首先添加三个引用:using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geodatabase;然后定义两个成员变量,一个用于存储地图数据,一个用于存储当前选中图层,如下/ 地图数据private AxMapControl mMapControl;/ 选中图层private IFeatureLayer mFeatureLayer;然后修改其构造函数,构造函数中添加一个参数 MapControl ,用于获取 MapC

4、ontrol 中的数据,如下所示:public AttributeQueryForm(AxMapControl mapControl)InitializeComponent();this.mMapControl = mapControl; 在窗体的 Load 事件中添加代码,用于初始化 cboLayer,获取 MapControl 中的图层名称,如下:/MapControl 中没有图层时返回if (this.mMapControl.LayerCount 0)cboLayers.SelectedIndex = 0;/ 设置生成文件的默认输出路径和名称string tempDir = D:Temp

5、; txtOutputPath.Text = System.IO.Path.Combine(tempDir, (string)cboLayers.SelectedItem + _buffer.shp);/ 设置默认地图单位lblUnits.Text = Convert.ToString(mHookHelper.FocusMap.MapUnits);双击路径设置按钮,进入代码编辑界面,添加如下代码:private void btnOutputLayer_Click(object sender, EventArgs e)/ 定义输出文件路径SaveFileDialog saveDlg = new

6、SaveFileDialog();/ 检查路径是否存在saveDlg.CheckPathExists = true;saveDlg.Filter = Shapefile (*.shp)|*.shp;/ 保存时覆盖同名文件saveDlg.OverwritePrompt = true;saveDlg.Title = 输出路径 ;/ 对话框关闭前还原当前目录saveDlg.RestoreDirectory = true;saveDlg.FileName = (string)cboLayers.SelectedItem + _buffer.shp;/ 读取文件输出路径到 txtOutputPathDi

7、alogResult dr = saveDlg.ShowDialog(); if (dr = DialogResult.OK)txtOutputPath.Text = saveDlg.FileName;双击 “ 分析 ” 按钮,添加代码如下:private void btnBuffer_Click(object sender, EventArgs e)/ 缓冲距离double bufferDistance;/ 输入的缓冲距离转换为 doubledouble.TryParse(txtBufferDistance.Text.ToString(),out bufferDistance);/ 判断输出

8、路径是否合法if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(txtOutputPath.Text) |.shp != System.IO.Path.GetExtension(txtOutputPath.Text)MessageBox.Show( 输出路径错误 !);return;/ 判断图层个数if (mHookHelper.FocusMap.LayerCount = 0)return;/ 获取图层 IFeatureLayer pFeatureLayer = GetFeatureLayer(string)cboLa

9、yers.SelectedItem);if (null = pFeatureLayer)MessageBox.Show( 图层 + (string)cboLayers.SelectedItem + 不存在 !rn);return;/ 获取一个 geoprocessor 的实例Geoprocessor gp = new Geoprocessor();/OverwriteOutput 为真时,输出图层会覆盖当前文件夹下的同名图层gp.OverwriteOutput = true;/ 缓冲区保存路径strOutputPath = txtOutputPath.Text;/ 创建一个 Buffer 工具

10、的实例ESRI.ArcGIS.AnalysisTools.Buffer buffer = new ESRI.ArcGIS.AnalysisTools.Buffer(pFeatureLayer, strOutputPath, bufferDistance.ToString();/ 执行缓冲区分析IGeoProcessorResult results = null;results = (IGeoProcessorResult)gp.Execute(buffer, null);/ 判断缓冲区是否成功生成if (results.Status != esriJobStatus.esriJobSuccee

11、ded)MessageBox.Show( 图层 + pFeatureLayer.Name + 缓冲区生成失败! ); elsethis.DialogResult = DialogResult.OK;MessageBox.Show( 缓冲区生成成功! );双击 “ 取消 ” 按钮,添加代码如下:private void btnCancel_Click(object sender, EventArgs e)this.Dispose();进入 ZZUMap 的主窗体,双击菜单中的“缓冲区分析”,添加代码如下:BufferForm bufferForm = new BufferForm(this.ax

12、MapControl1.Object);if (bufferForm.ShowDialog() = DialogResult.OK)/ 获取输出文件路径string strBufferPath = bufferForm.strOutputPath;/ 缓冲区图层载入到 MapControlint index = strBufferPath.LastIndexOf(); this.axMapControl1.AddShapeFile(strBufferPath.Substring(0, index), strBufferPath.Substring(index);至此,代码编辑完成,运行程序,添

13、加数据选择图层,设置缓冲区半径,点击“分析”,效果如下图所示。3 叠置分析这一小节我们将实现叠置分析中三种最常用的叠置方式, Union( 叠置求并 ) 、 Intersect (叠置求交)和 Identify (叠置标识)。 Intersect (叠置求交)在上节已经介绍,下面简要介绍一下 Union( 叠置求并 )和 Identify (叠置标识)。叠置求并 ( Union ) 保留了两个叠置图层的空间图形和属性信息, 进行叠置求和的两个图层须是多边形图层。输入图层的一个多边形被叠加图层中的多边形弧段分割成多个多边形,输出图层综合了两个图层的属性。所有要素都将被写入到输出要素类,输出结果具

14、有来自与其叠置的输入要素的属性。Identify (叠置标识)是以输入图层为界,保留边界以内两个多变形的所有多边形,出入图层切割后的多边形也被赋予叠加图层的属性。如下图所示。在通过 ArcEngine 中的 Geoprocessor 实现这三种叠置分析时, 我们将实现输入图层和叠置图层的可选设置,叠置方式的可选设置,输出路径的可选设置。打开项目在主菜单 “分析”中添加子菜单“叠置分析”, Name属性修改为“ menuOverlay ”。项目中添加一个新的窗体, 名称为 “ OverlayForm ” , Name属性设为 “叠置分析” , 添加四个 Label 、 一个 ComboBox、四

15、个 TextBox 、五个 Button 控件和一个 GroupBox,控件属性设置如下:控件类型 Name属性 Text 属性 Readonly 属性控件说明Label 输入要素 : Label 叠置要素 : Label 叠置方式 : Label 输出图层 : TextBox txtInputFeat True 保存输入要素路径TextBox txtOverlayFeat True 保存叠置要素路径TextBox txtOutputPath True 叠置结果的输出路径TextBox txtMessage True 叠置分析处理过程消息, Multiline 属性设为 True ,ScrollBars 属性设为 Vertical Dock 属性设为 Fill ComboBox cboOverLay 叠置分析的方式Button btnInputFeat , 选择输入要素Button btnOverlayFeat , 选择叠置要素Button btnOutputLayer , 选择叠置分析结果的输出路径Button btnBuffer 分析 进行叠置分析Button btnCancel 取消 取消GroupBox 处理过程消息作为 txtMessage 的容器该工程需要添加如下引用:using ESRI.ArcGIS.Controls;using ESR

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 经营企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号