在ArcGis Engine二次开发过程中,经常会需要用到查询统计的功能,而IQueryFilter是最常见的属性字段查询接口,可以用来做一些简单的查询工作。

现在有一些公交站点和公交路线的数据,可视化效果如下:

其中站点数据的属性信息中记录了站点名称和经过的路线,如下图所示:

功能需求为:用户输入一条公交路线,程序运行并返回这条路线经过的所有站点。

在AE程序中先建立查询的窗体,如下图所示:

这个功能需要从MapControl中获取图层,因此调用此窗体的时候需要将MapControl作为参数传入,另外还需要用到ArrayList接口,在代码中添加如下引用:

 using System.Collections;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;

构建一个用于属性查询的函数,返回结果为ArrayList数组,具体代码如下:

 //查询函数
private ArrayList Query(AxMapControl axMapControl1, int layerIndex, string inputField, string outputField, string inputTxt)
{
IFeatureLayer pFeatureLayer = axMapControl1.Map.get_Layer(layerIndex) as IFeatureLayer; //获取查询的图层
IFeatureClass pFeatCls = pFeatureLayer.FeatureClass;
IQueryFilter pQueryfilter = new QueryFilterClass();
pQueryfilter.WhereClause = inputField + "='" + inputTxt + "'"; //设置属性查询条件
IFeatureCursor pFeatCur = pFeatCls.Search(pQueryfilter, false);
IFields pFields = pFeatCls.Fields; //获取图层的字段
int iField = pFields.FindField(outputField); //找出输出字段的位置
IFeature pFeat = pFeatCur.NextFeature();
ArrayList OutputList = new ArrayList(); //新建输出列表
while (pFeat != null)
{
OutputList.Add(pFeat.get_Value(iField).ToString());
pFeat = pFeatCur.NextFeature();
}
return OutputList;
}

在“查询”按钮的点击响应函数下添加如下代码:

     private void button1_Click(object sender, EventArgs e)
{
string inputTxt = textBox1.Text; //获取线路值
if (inputTxt != null && inputTxt != "")
{
ArrayList outListBus = Query(mapControl, , "lineName", "name", inputTxt);
ArrayList outListSubway = Query(mapControl, , "lineName", "name", inputTxt);
if (outListBus.Count != || outListSubway.Count != )
{
string outList = null;
if (outListBus.Count > ) //若查询路线为公交路线
{
for (int i = ; i < outListBus.Count - ;i++ )
{
outList += outListBus[i].ToString() + "-->";
}
richTextBox1.Text = "经过站点:" + outList + outListBus[outListBus.Count - ].ToString();
}
else //若查询路线为地铁路线
{
for (int i = ; i < outListSubway.Count - ; i++)
{
outList += outListSubway[i].ToString() + "-->";
}
richTextBox1.Text = "经过站点:" + outList + outListSubway[outListSubway.Count - ].ToString();
}
}
else
{
MessageBox.Show("查无此线路,请输入正确的线路值!");
} }
else
{
MessageBox.Show("请输入正确的线路值!");
} }

最终运行结果如下:

至此,一个简单的属性查询窗体已经完成!

AE开发—利用IQueryFilter接口进行属性查询的更多相关文章

  1. ArcGIS Engine开发之属性查询

    属性查询即基于空间数据的属性数据的查询,通过用户提交SQL语言中的where语句定义的查询条件,对属性数据进行搜索,从而得到查询结果的操作. 相关的类与接口 与属性查询功能相关的类主要有QureyFi ...

  2. openlayers4 入门开发系列之地图属性查询篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  3. 利用 Task\Query 实现定位 , FeatureLayer 的属性查询

    放纵了几天,又有了学习的动力.今天实现了利用对 FeatureLayer 进行属性查询在地图上进行跳转. 一.我下载了一幅浙江省的县界面地图,存在NAME字段,利用Name就能进行查询了: var n ...

  4. SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型

    SQL 横转竖 .竖专横 (转载)   普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...

  5. Arc Engine二次开发——弹窗进行属性查询

    在Arcmap中使用Sapefile格式的矢量数据时,经常会用到其属性查询的功能,弹出窗体然后用户鼠标点击或手动输入查询条件,进而查询到感兴趣的要素.在AE二次开发中也经常需要这个功能,于是在此记录整 ...

  6. SuperMap iObject入门开发系列之五管线属性查询

    本文是一位好友“托马斯”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢. 管线属性查询功能针对单一管线图层进行特定的条件查询,然后将查询结果输出为列表,并添加点位闪烁功能,例如查询污水管线中, ...

  7. [原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略

    原文:[原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 .NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 前言:之前的讨论一直关注在怎么从D ...

  8. 利用IIdentify接口实现点选和矩形选择要素

    duckweeds 原文利用IIdentify接口实现点选和矩形选择要素 Identify接口定义了获得要素图层单个要素的属性的捷径方法.它有一个Identify方法,返回一个IArray数组对象. ...

  9. AE开发概念辨析

    樱木 原文 AE开发之概念辨析2,AE开发涉及相关概念,AE开发相关概念 1 AE中的类库 AE总共包括了21个子库,分别是SYSTEM,SYSTEMUI,GEOMETRY,DISPLAY,SERVE ...

随机推荐

  1. 如何解决Access操作或事件已被禁用模式阻止

    操作或事件已被禁用模式阻止.本来是Access安全设置的一部分,可以防止一些危险性的宏自动运行损坏数据,但是如果是自己在设计或是修改Access数据库的时候,这个就比较烦人了,一次次的提示,每次都需要 ...

  2. WPF窗体自适应分辨率

    使用WPF创建一个窗体(Window)时,如果设置了固定的高度(Height)和宽度(Width),一旦用户的电脑分辨率过低,就会使得窗体及其中的内容无法完整地显示出来.要解决这个这个问题,有以下几个 ...

  3. FastDFSClient工具类

    import org.csource.common.NameValuePair;import org.csource.fastdfs.ClientGlobal;import org.csource.f ...

  4. Linux系统调优——网络(四)

    (1).查看网络(Network)运行状态相关工具 1)nload监控总体带宽使用情况 nload需要自己安装,而且在安装前需要安装epel-release [root@youxi1 ~]# yum ...

  5. 改进初学者的PID-手自动切换

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  6. vue-cli4.0 基于 antd-design-vue 二次封装发布到 npm 仓库

    1. 安装 cli npm install -g @vue/cli vue create winyh-ui 2.安装 antd-design-vue cnpm i ant-design-vue --s ...

  7. 深层对象转深层数组(重点:先把对象转数组,直接for in 遍历对象不太可行)

    var json: { PRow0: { style: { width: 10 } }, PTable1: { style: { height: 20 } } } const jsonToArrTre ...

  8. SignalR 传Model类型的参数

    目录 集线器方法 js调用 集线器方法 集线器写了一个方法是这样的 public void test(string name, Customer customer) 第一个参数是string类型的,第 ...

  9. Elasticsearch - 处理冲突

    http://blog.csdn.net/xifeijian/article/details/49615559

  10. composer autoload优化

    为生产环境作准备 最后提醒一下,在部署代码到生产环境的时候,别忘了优化一下自动加载: composer dump-autoload --optimize 安装包的时候可以同样使用--optimize- ...