发布时间 : 星期五 文章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,而不能对别的字段进行查询),而且这个查询不支持模糊查询。为了使查询变的更加丰富,更加人性化,