AE开发—利用IQueryFilter接口进行属性查询
在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接口进行属性查询的更多相关文章
- ArcGIS Engine开发之属性查询
属性查询即基于空间数据的属性数据的查询,通过用户提交SQL语言中的where语句定义的查询条件,对属性数据进行搜索,从而得到查询结果的操作. 相关的类与接口 与属性查询功能相关的类主要有QureyFi ...
- openlayers4 入门开发系列之地图属性查询篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- 利用 Task\Query 实现定位 , FeatureLayer 的属性查询
放纵了几天,又有了学习的动力.今天实现了利用对 FeatureLayer 进行属性查询在地图上进行跳转. 一.我下载了一幅浙江省的县界面地图,存在NAME字段,利用Name就能进行查询了: var n ...
- SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型
SQL 横转竖 .竖专横 (转载) 普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...
- Arc Engine二次开发——弹窗进行属性查询
在Arcmap中使用Sapefile格式的矢量数据时,经常会用到其属性查询的功能,弹出窗体然后用户鼠标点击或手动输入查询条件,进而查询到感兴趣的要素.在AE二次开发中也经常需要这个功能,于是在此记录整 ...
- SuperMap iObject入门开发系列之五管线属性查询
本文是一位好友“托马斯”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢. 管线属性查询功能针对单一管线图层进行特定的条件查询,然后将查询结果输出为列表,并添加点位闪烁功能,例如查询污水管线中, ...
- [原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略
原文:[原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 .NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 前言:之前的讨论一直关注在怎么从D ...
- 利用IIdentify接口实现点选和矩形选择要素
duckweeds 原文利用IIdentify接口实现点选和矩形选择要素 Identify接口定义了获得要素图层单个要素的属性的捷径方法.它有一个Identify方法,返回一个IArray数组对象. ...
- AE开发概念辨析
樱木 原文 AE开发之概念辨析2,AE开发涉及相关概念,AE开发相关概念 1 AE中的类库 AE总共包括了21个子库,分别是SYSTEM,SYSTEMUI,GEOMETRY,DISPLAY,SERVE ...
随机推荐
- 算法习题---4-8特别困的学生(UVa12108)
一:题目 课堂上有n个学生(n<=),每个学生上课都会出现一个“清醒-睡眠”周期,其中第i个学生学习Ai分钟后睡眠Bi分钟,依次重复.其中在从清醒到睡眠时有一个条件:只有到全班睡眠人数大于清醒人 ...
- Qt编写气体安全管理系统9-数据查询
一.前言 数据查询模块在整个系统中难度最低,由于Qt对数据库操作的封装堪称完美,所以各种查询都是手到擒来,不费吹灰之力.Qt中内置了sqlite数据库,你可以在数据库插件目录sqldrivers发现q ...
- 报错:Unable to read additional data from client sessionid 0x36ab52d38c20b20, likely client has closed socket
报错背景: CDH集群中,将kafka和Flume整合,将kafka的数据发送给Flume消费. 启动kafka的时候正常,但是启动Flume的时候出现了报错现象. 但是我检查了Flume,Flume ...
- 【源码解析】Flink 是如何基于事件时间生成Timestamp和Watermark
生成Timestamp和Watermark 的三个重载方法介绍可参见上一篇博客: Flink assignAscendingTimestamps 生成水印的三个重载方法 之前想研究下Flink是怎么处 ...
- 【翻译】Flink 异步I / O访问外部数据
本文来自官网翻译: Asynchronous I/O for External Data Access 需要异步I / O操作 先决条件 异步I / O API 超时处理 结果顺序 活动时间 容错保证 ...
- 基于EasyDSS流媒体解决方案创建视频点播、短视频、视频资源库等视频播放系统
随着前端技术的不断发展,视频点播早已不再是IE6时代的浏览器嵌入式Windows Media Player.也不是后来的flash media player需要的rtmp点播流,现在能够唯一满足全终端 ...
- Maven工具-简介
Maven工具-简介 定义 ①maven是一款服务于java平台的自动化构建工具 make→Ant→maven→Gradle ②构建 [1]概念:以"java源文件"." ...
- [转帖]实时流处理系统反压机制(BackPressure)综述
实时流处理系统反压机制(BackPressure)综述 https://blog.csdn.net/qq_21125183/article/details/80708142 2018-06-15 19 ...
- SecureCRT系列:生成公私钥
SecureCRT下载地址:http://www.portablesoft.org/securecrt-securefx-legacy-versions/1.打开我们的SecureCRT客户端,点击t ...
- MySQL基础操作(二)
MySQL基础操作 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.注意:使用视图时 ...