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 ...
随机推荐
- Web Service 和 WCF的比较
Web Service 和WCF的比较 Web Service 的工作原理 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intra ...
- 品优购商城项目(三)安全框架SpringSecurity
品优购商城项目第三阶段 1.springSecurity的基本用法与shiro类似. 2.BCrypt加密算法比MD5更加智能和安全,能自动加盐再加密,生成的密码是60位比md5的32位更占空间(可以 ...
- ES6深入浅出-10 ES6新增的数据类型-1.Symbol与隐藏属性
ES5现有的数据类型.7种数据类型. 新的类型是属于Object 最普通的类型.plain object 数组array 函数function 下面这些都属于Object类型. 今天要讲的 set类型 ...
- 提供Web相关的个工具类
package com.opslab.util.web; import com.opslab.util.ConvertUtil;import com.opslab.util.StringUtil; i ...
- 【429】关于ADT的访问权限
在看老师代码的时候,发现ADT中的 struct 有时候写到了 adt.c 里面,有时候写到了 adt.h 里面,其实有些困惑,经过仔细研究,发现写在 adt.h 中的 struct 可以在 test ...
- Python subprocess中的run方法
调用subprocess的推荐方法是对于它可以处理的所有使用场景都使用run()函数. run()函数是在Python 3.5中添加的,如果在老版本中使用,需要下载并扩展. 扩展安装方式: $ pip ...
- Django安全配置(settings.py)详解
必须配置项 PASSWORD_HASHER 这个配置是在使用Django自带的密码加密函数的时候会使用的加密算法的列表.默认如下: PASSWORD_HASHERS = ( 'django.contr ...
- (一)eclipse Dynamic web project 工程目录以及文件路径问题
如图,我创建了一个work 的web project,当工程完成之后,部署在服务器上时,整个work工程会被打包成一个war包,如 除了可以在eclipse上运行,工具会帮我们自动部署在服务器上之外, ...
- mongodb多个条件查询in,日期查询,嵌套查询,统计集合总数等常用实例
1. 多个条件查询in in db.inventory.find( { qty: { $in: [ 5, 15 ] } } ) 2. 日期查询 db.books.find({}) 查询时间大于6-,结 ...
- Swift4.0复习控制流语句
1.do语句块: Swift编程语言中可使用 do 语句块作为类似C语言中的一般语句块进行使用.与C语言的语句块类似,Swift中的 do 语句块单独作为一个作用域,该语句块中声明的局部对象在其外部将 ...