在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. Python基础教程(第2版 修订版) pdf

    Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识11.1安装Python11.1.1Windows11.1.2Linux和UNIX31.1.3苹果机(Macintosh)41. ...

  2. C# 实现生产者消费者队列 (转)

    按语:按照下面文档,测试成功: https://www.cnblogs.com/samgk/p/4772806.html 开发过程中经常会碰到这样的场景:需要从一个地方获取一些数据,然后处理数据并将其 ...

  3. POJ 2584 T-Shirt Gumbo 二分图的多重匹配

    题目链接:http://poj.org/problem?id=2584 题目大意:有SMLXT五种T恤型号,有N个人,每个人有一个可选的型号区间,你现在要发给N个人每人一条他可以选择的型号的T恤,问能 ...

  4. 16点睛Spring4.1-TaskScheduler

    转发:https://www.iteye.com/blog/wiselyman-2213049 16.1 TaskScheduler 提供对计划任务提供支持; 使用@EnableScheduling开 ...

  5. iOS-打印控件

    20.UIPrintFormatterUIPrintFormatter时打印格式化的抽象基类:展示了传统的可打印的内容对象可以跨页边界.由于打印格式化,打印系统,可以自动打印与打印格式化的内容相关联的 ...

  6. java四大名著及idea常用插件

    四大名著 <Java编程思想><Think in Java> https://github.com/quanke/think-in-java https://github.co ...

  7. IOPS 测试工具 FIO

    FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎. fio-2.8下载: wget http://brick.kernel.dk/snaps/fio-2.8 ...

  8. RabbitMQ官方教程二 Work Queues(GOLANG语言实现)

    RabbitMQ官方教程二 Work Queues(GOLANG语言实现) 在第一个教程中,我们编写了程序来发送和接收来自命名队列的消息. 在这一部分中,我们将创建一个工作队列,该队列将用于在多个wo ...

  9. axios 使用入门

    [Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入门   一.前言# 在没有接触 React.Angular.Vue 这类 MVVM 的前端框架之前,无法抛弃 Jquery 的重 ...

  10. SQL语言的分类(DQL、DML、DDL、DCL的概念与区别)

    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHER ...