文档详情

Engine100轻松入门级教程(3)

m****
实名认证
店铺
DOCX
464.79KB
约47页
文档ID:438319667
Engine100轻松入门级教程(3)_第1页
1/47

ArcGIS EnginelO.O轻松入门级教程(3) ――ArcEnginelO.O查询分析功能目录⑺卜]1.属性及空间查询2.缓冲区查询3.叠置分析4.网络分析GIS中的查询分析功能是非常重要的,本节将实现这些功能1属性及空间査询在Forms文件夹右击点击“添加"一>"Windows窗体",添加两个窗体,分别用于空间查询和属性查 询,参数设置如下表窗体名称(Name) Text属性描述SpatialQueryForm 空间查询用于空间查询参数设置AttributeQueryForm属性查询用于属性查询参数设置同时在主窗体上的菜单项上添加一二级菜单查询(menuQuery) 属性查询(menuAttributeQuery) 空间查询(menuSpatialQuery)实现属性查询,首先打开"属性查询"窗体的设计器添加三个Label控件,两个ComboBox,两个Button 和一个TextBox各控件属性设置如下:名称(Name) Text属性描述lblLayer选择图层:标签lblField字段名称:标签lblFind查找内容:标签cboLayerMapControl中的图层名称cboFieldcboLayer选中图层的所有字段名称txtValue输入的查询对象名称btnOk查找查询按钮btnCancel取消取消查询按钮界面效果如下:进入窗体的代码编辑界面,首先添加三个引用:using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geodatabase;然后定义两个成员变量,一个用于存储地图数据,一个用于存储当前选中图层,如下〃地图数据private AxMapControl mMapControl;〃选中图层private IFeatureLayer mFeatureLayer;然后修改其构造函数,构造函数中添加一个参数MapControl,用于获取MapControl中的数据,如下所示:public AttributeQueryForm(AxMapControl mapControl){lnitializeComponent();this.mMapControl = mapControl;在窗体的Load事件中添加代码,用于初始化cboLayer,获取MapControl中的图层名称,如下://MapControl中没有图层时返回if (this.mMapControl.LayerCount <= 0)return;〃获取MapControl中的全部图层名称,并加入ComboBox〃图层ILayer pLayer;〃图层名称string strLayerName;for (int i = 0; i < this.mMapControl.LayerCount; i++){pLayer = this.mMapControl.get_Layer(i);strLayerName = pLayer.Name;〃图层名称加入cboLayerthis.cboLayer.ltems.Add(strLayerName);}〃默认显示第一个选项this.cboLayer.SelectedIndex = 0;在CboLayer的SelectedIndexChanged事件中添加代码,当选中图层发生变化时,cboField中的字段名称重新获取,代码如下://获取cboLayer中选中的图层mFeatureLayer = mMapControl.get_Layer(cboLayer.Selectedlndex) as IFeatureLayer;IFeatureClass pFeatureClass = mFeatureLayer.FeatureClass;〃字段名称string strFldName;for (int i = 0; i < pFeatureClass.Fields.FieldCount;i++ ){strFldName = pFeatureClass.Fields.get_Field(i).Name;〃图层名称加入cboFieldthis.cboField.ltems.Add(strFldName);}〃默认显示第一个选项this.cboField.Selectedlndex = 0;查找按钮添加事件:private void button1_Click(object sender, EventArgs e){〃定义图层,要素游标,查询过滤器,要素IFeatureCursor pFeatureCursor;IQueryFilter pQueryFilter;IFeature pFeature;IPoint pPoint;IEnvelope pEnv;pEnv = mMapControl.ActiveView.Extent;pPoint = new PointClass();pPoint.X = pEnv.XMin + pEnv.Width / 2;pPoint.Y = pEnv.YMin + pEnv.Height / 2;if (this.mMapControl.LayerCount <= 0)return;〃获取图层mFeatureLayer = mMapControl.get_Layer(cboLayer.Selectedlndex) as IFeatureLayer;〃清除上次查询结果this.mMapControl.Map.ClearSelection();this.mMapControl.ActiveView.Refresh();//pQueryFilter 的实例化pQueryFilter = new QueryFilterClass();〃设置查询过滤条件pQueryFilter.WhereClause = cboField.Text + "=" + txtValue.Text;〃查询pFeatureCursor = mFeatureLayer.Search(pQueryFilter, true);〃获取查询到的要素pFeature = pFeatureCursor.NextFeature();〃判断是否获取到要素if (pFeature != null){〃选择要素this.mMapControl.Map.SelectFeature(mFeatureLayer, pFeature);〃放大到要素pFeature.Shape.Envelope.CenterAt(pPoint);this.mMapControI.Extent = pFeature.Shape.Envelope;}else{〃没有得到pFeature的提示MessageBox.Show("没有找到相关要素!","提示”);}取消按钮添加事件:private void btnCancel_Click(object sender, EventArgs e){this.Close();点击运行,这样就实现了属性查询的功能。

运行效果如下图:这一小结,我们进一步实现空间查询窗体的设计实现,我们的设想是通过该窗体选择查询的图层和 查询的方式,然后将这两个参数传递给主窗体,主窗体实现查询,将查询得到的要素的属性显示在 DataGridView控件中,下面开始动手吧首先打开"属性查询"窗体的设计器添加两个Label控件,两个ComboBox,两个Button各控件属性设置 如下:名称(Name)Text属性描述lblLayer选择图层:标签lblMode查询方式:标签cboLayerMapControl中的图层名称cboMode空间查询的方式btnOk确定 确定查询按钮btnCancel取消 取消查询按钮进入窗体的代码编辑界面,首先添加三个引用:using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Carto;然后定义两个成员变量,一个用于存储地图数据,一个用于存储当前选中图层,如下//获取主界面的MapControl对象private AxMapControl mMapControl;//查询方式public int mQueryMode;//图层索引public int mLayerlndex;然后修改其构造函数,构造函数中添加一个参数MapControl,用于获取MapControl中的数据,如 下所示:public SpatialQueryForm (AxMapControl mapControl){InitializeComponent();this.mMapControl = mapControl;}在窗体的Load事件中添加代码,用于初始化cboLayer,获取MapControl中的图层名称,并初始 化查询方式,代码如下://MapControl中没有图层时返回if (this.mMapControl.LayerCount <= 0)return;//获取MapControl中的全部图层名称,并加入ComboBox//图层ILayer pLayer;//图层名称string strLayerName;for (int i = 0; i < this.mMapControl.LayerCount; i++){pLayer = this.mMapControl.get_Layer(i);strLayerName = pLayer.Name;//图层名称加入ComboBox this.cboLayer.Items.Add(strLayerName);//加载查询方式this.cboMode.Items.Add("矩形查询”);this.cboMode.Items.Add("线查询”);this.cboMode.Items.Add("点查询”);this.cboMode.Items.Add("圆查询”);//初始化ComboBox默认值this.cboLayer.Selectedlndex = 0;this.cboMode.Selectedlndex = 0;在“确定”按钮添加代码如下://设置鼠标点击时窗体的结果this.DialogResult = DialogResult.OK;//判断是否存在图层if (this.cboLayer.Items.Count <= 0){MessageBox.Show("当前 MapControl 没有添加图层!",”提示”); return;}//获取选中的查询方式和图层索引this.mLayerlndex = this.cboLayer.Selectedlndex;this.mQueryMode = this.cboMode.S。

下载提示
相似文档
正为您匹配相似的精品文档