在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. SAP 增强篇 Method1 BADI增强的查找方法

    查找BADI的方法:(1)通过SE24,输入CL_EXITHANDLER,然后在方法GET_INSTANCE中设置断点,然后运行事务代码判断 exit_name的值,操作过程如下:输入se24,然后输 ...

  2. PhpStorm文本选择范围的纵向起始位置可选

    ide一般都有这个功能. Alt+Shift+insert开启这个功能,使用效果如下,红色是默认选择的范围,绿色是我们想要的

  3. Python第一阶段01

    1.变量: name = "sisi" print(name) age = print(age) 2.常量: PIE = 3.1415926 3.注释: # password = ...

  4. mysql的驱动类com.mysql.jdbc.Driver过时了,需要用com.mysql.cj.jdbc.Driver代替

    springboot项目整合mybatis,配置文件如下: server: port: 8081 mybatis: config-location: classpath:mybatis/mybatis ...

  5. PhpStorm (强大的PHP开发环境)10.0.2 附注

    最新版PhpStorm 10正式版改进了PHP 7支持,改进代码完成功能. PhpStorm 是最好的PHP开发工具,使用它进行PHP开发将会让你感觉到编程的乐趣. 快乐无极终于从oschina看到了 ...

  6. 【Leetcode_easy】852. Peak Index in a Mountain Array

    problem 852. Peak Index in a Mountain Array solution1: class Solution { public: int peakIndexInMount ...

  7. css文本超出部分省略号&CSS强制换行总结

    word-break:break-all单词截断自动换行 word-break:break-all 例如div宽200px,它的内容就会到200px自动换行,如果该行末端有个英文单词很长(congra ...

  8. ipad 如何 Airplay 到 Windows 上?

    最近刚好有用到这个,觉得还不错,就推荐给大家.虽然个人并不喜欢苹果这一套,但是工作里难免掺杂一些会用到的ipad , mac . 纯粹技术分享. 1. 5KPlayer : https://www.5 ...

  9. 【神经网络与深度学习】【计算机视觉】RCNN- 将CNN引入目标检测的开山之作

    转自:https://zhuanlan.zhihu.com/p/23006190?refer=xiaoleimlnote 前面一直在写传统机器学习.从本篇开始写一写 深度学习的内容. 可能需要一定的神 ...

  10. 记录一下vue slot

    使用步骤: 1.在组件(panda)当中建立一个slot,定义好name.(<slot name='myname'></slot>)    2.引用组件的时候如果需要补充内容, ...