ArcGIS Engine二次开发 - 基础篇 联系客服

发布时间 : 星期五 文章ArcGIS Engine二次开发 - 基础篇更新完毕开始阅读c1826921192e45361066f5ac

ArcGIS Engine二次开发——基础篇

图 5引用添加位置

之后在控件TextBox的事件中选择KeyUp,在KeyUp事件中添加以下代码:

图 6KeyUp方法

private void txtStateName_KeyUp(object sender, KeyEventArgs e) {

//判断鼠标键值,如果Enter键按下抬起后,进入查询 if (e.KeyCode==Keys.Enter) {

//定义图层,要素游标,查询过滤器,要素 IFeatureLayer pFeatureLayer; IFeatureCursor pFeatureCursor;

ArcGIS Engine二次开发——基础篇

IQueryFilter pQueryFilter; IFeature pFeature;

//获取图层

pFeatureLayer = this.axMapControl1.Map.get_Layer(0) as IFeatureLayer; //如果图层名称不是states,程序退出 if (pFeatureLayer.Name != \bou2_4p\) return; //清除上次查询结果

this.axMapControl1.Map.ClearSelection();

//pQueryFilter的实例化

pQueryFilter = new QueryFilterClass(); //设置查询过滤条件

pQueryFilter.WhereClause = \ + txtStateName.Text + \; //查询

pFeatureCursor = pFeatureLayer.Search(pQueryFilter, true); //获取查询到的要素

pFeature = pFeatureCursor.NextFeature();

//判断是否获取到要素 if (pFeature!=null) {

//选择要素

this.axMapControl1.Map.SelectFeature(pFeatureLayer, pFeature); //放大到要素

this.axMapControl1.Extent = pFeature.Shape.Envelope; } else {

//没有得到pFeature的提示

MessageBox.Show(\没有找到名为\ + txtStateName.Text + \的省\, \提示\); } } }

运行程序,分别向编辑框中输入“吉林省”和“长春省”,键入回车,如下图所示:

ArcGIS Engine二次开发——基础篇

图 7吉林省查询结果

图 8长春省查询结果

注释:

if (e.KeyCode==Keys.Enter)

上述代码是一个判断语句,即当用户输入回车的时候,开始进行查询。

下面两行代码是定义查询的范围,默认为上一小节中添加的图层“bou2_4p”,如果找

ArcGIS Engine二次开发——基础篇

不到这个图层则自动退出。

//获取图层

pFeatureLayer = this.axMapControl1.Map.get_Layer(0) as IFeatureLayer; //如果图层名称不是states,程序退出 if (pFeatureLayer.Name != \ bou2_4p \) return;

//清除上次查询结果

this.axMapControl1.Map.ClearSelection();

下面部分是生成一个新的查询器,选择条件(WhereClause)就是检索是否有与用户输

入相符的州,并将结果从查询得到的pCursor中读取出来。

//pQueryFilter的实例化

pQueryFilter = new QueryFilterClass(); //设置查询过滤条件

pQueryFilter.WhereClause = \ + txtStateName.Text + \; //查询

pFeatureCursor = pFeatureLayer.Search(pQueryFilter, true); //获取查询到的要素

pFeature = pFeatureCursor.NextFeature();

下面部分是一个判断语句,若查询得到的结果为空,则刷新地图,弹出对话框通知用户没有查询到结果,并退出程序。如果查询得到的结果不为空,则将这个结果加入地图的选择集,并将地图的显示范围定为查询结果的外轮廓,这样得到的州将高亮显示同时居中放大到屏幕中心。

//判断是否获取到要素

if (pFeature!=null) {

//选择要素

this.axMapControl1.Map.SelectFeature(pFeatureLayer, pFeature); //放大到要素

this.axMapControl1.Extent = pFeature.Shape.Envelope; } else {

//没有得到pFeature的提示

MessageBox.Show(\没有找到名为\ + txtStateName.Text + \的省\, \提示\); }

1.2.3 小结

这一部分中,我们接触到了基本的属性查询。但是在这个例子中,我们不能实现对属性表中任意属性字段的查询(在这个程序中,我们只能查询省名——NAME,而不能对别的字段进行查询),而且这个查询不支持模糊查询。为了使查询变的更加丰富,更加人性化,