arcgis java 二次开发_arcgis二次开发_cad二次开发_java arcgis二次开发
属性查询是GIS应用不可缺少的重要功能,尤其是在各种业务系统中,根据用户输入相应的查询条件,从属性要素中快速定位到用户感兴趣的要素,为业务应用提供了便利。本文就来聊一聊QGis二次开发中如何实现属性查询功能。
其实这个功能我在写属性表格功能的实现时就提到过相应的参考源码了,只不过当时没有给出具体的实现方案。
还是简单描述一下功能的使用。
首先来看看通过属性来筛选属性表,打开属性表,见下图
在左下角分别点击 “Show All Features In Initial Canvas Extent” – “Column Filter”就能看到几个字段列表了。
选择要查询的一个字段,并输入这个字段的可查询的属性信息,如下图。
回车之后,属性表会变成下图这样。
这时候属性表已经查询到“cat”字段为“4”的要素。
这里输入相应的查询语句就行了。
要实现这个功能,首先还是定位到QGis的属性表功能的源代码上来。
打开 qgsattributetabledialog.cpp 这个文件,找到 filterQueryChanged() 这个方法,代码如下
void QgsAttributeTableDialog::filterQueryChanged( const QString& query )
{
QString str; // 这个是最后完整的查询字符串
if ( mFilterButton->defaultAction() == mActionAdvancedFilter )
{
str = query;
}
else
{
QString fieldName = mFilterButton->defaultAction()->text();
const QgsFields& flds = mLayer->pendingFields();
int fldIndex = mLayer->fieldNameIndex( fieldName );
if ( fldIndex < 0 )
{
return;
}
// 判断属性字段是否为数字
QVariant::Type fldType = flds[fldIndex].type();
bool numeric = ( fldType == QVariant::Int || fldType == QVariant::Double || fldType == QVariant::LongLong );
// 如果属性是字符串,判断应该用“ILIKE”或者“LIKE”
QString sensString = "ILIKE";
if ( mCbxCaseSensitive->isChecked() )
{
sensString = "LIKE";
}
QSettings settings;
QString nullValue = settings.value( "qgis/nullValue", "NULL" ).toString();
if ( mFilterQuery->displayText() == nullValue )
{
str = QString( "%1 IS NULL" ).arg( QgsExpression::quotedColumnRef( fieldName ) );
}
else
{
str = QString( "%1 %2 '%3'" )
.arg( QgsExpression::quotedColumnRef( fieldName ) )
.arg( numeric ? "=" : sensString )
.arg( numeric
? mFilterQuery->displayText().replace( "'", "''" )
:
"%" + mFilterQuery->displayText().replace( "'", "''" ) + "%" ); // escape quotes
}
}
// 以上为解析字符串, str才是最后的查询字符串
setFilterExpression( str );
updateTitle(); // 更新属性窗口标题
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-26597-1.html
arcgis java 二次开发_arcgis二次开发_cad二次开发_java arcgis二次开发相关推荐
- arcgis python实例_arcgis二次开发_arcgis二次开发python_arcgis二次开发实例
[1.rar] - QQ连连看的源码.单消秒杀挂机等功能喜欢的朋友请拿去研究 [qqCHAR.rar] - qq 验证码识别程序 可以叫准确的识别出qq登陆前的验证码 [1.rar] - 本书以Vis ...
- arcgis python二次开发_arcgis二次开发python_arcgis二次开发是什么_arcgis二次开发
VS2013中ArcGIS二次开发部分问题问题解决方法VS2013中新建项目时没有ArcGIS模板解决办法:安装ArcGIS10.x会自动生成C:\Program Files x86 \Microso ...
- 支付宝支付开发实践总结-Java-支付宝当面付-支付宝小程序-二维码生成-支付宝退款-APP调起支付宝支付
虽然目前相对较火的支付方式是微信支付,但是本人更喜欢支付宝支付,有积分拿,还可以部分提现免手续费,每月还有信用卡还款免手续费额度,捐步数,蚂蚁森林等等,扯远了,总之,对我来说,微信用于沟通,支付宝是支 ...
- 二选一的时候到了,Qt Widgets 还是 Qt Quick ? 致Qt开发伙伴
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Qt QWidgets 和 Qt Quick 各自有什么特性.特点? 1.Qt QWidgets 2.Qt Qui ...
- 一人一本一年N手机,仿滴滴出行开发含700个功能网约车APP源码(二)
继上一篇仿照滴滴出行开发的网约车顺风车代驾APP软件源码功能开发文章,继续聊一下司机端具有哪些功能. 在开发司机端的APP过程中,从只有一个早期的高德地图安卓版本,发展到大改框架.新增高德地图安卓版司 ...
- 《Java语言程序设计与数据结构》编程练习答案(第二章)(二)
<Java语言程序设计与数据结构>编程练习答案(第二章)(二) 英文名:Introduction to Java Programming and Data Structures, Comp ...
- java语言:创建一个二维数组,将古诗《春晓》的内容赋值于二维数组,然后分别用横版和竖版两种方式输出。
问题:创建一个二维数组,将古诗<春晓>的内容赋值于二维数组,然后分别用横版和竖版两种方式输出. 前两天上java课的时候老师,给我们出了这道题.要求:要用java语言来写. 根据要求创建的 ...
- 【JAVA秒会技术之秒杀面试官】JavaSE常见面试题(二)
21.在Java中,如何跳出当前的多重嵌套循环? 答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环.(Java中支持带标签的break和continue语句,作用有点类似于C和 ...
- 二维数组在c语言中的作用,C语言中的二维数组
1.二维数组的定义和引用 一. 数据类型 数组名[常量表达式1][常量表达式2]; (1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1 (2)列下标的取值范围0~m-1 (3) ...
- java程序设计及应用开发_Java程序设计及应用开发
前言第1章Java程序设计概述1.1Java程序平台1.2Java的特性1.3Java程序设计环境1.3.1下载.安装和了解JDK1.3.2集成开发环境Eclipse1.4Java应用程序1.4.1J ...
最新文章
- mysql read only参数_MySQL 参数解析 tx_read_only transaction_read_only
- AsyncTask工作机制简介
- caffe多个gpu数据合并到一起
- Android笔记之模拟器
- 第三十五讲:tapestry Ajax zone组件无黄色闪烁的背景
- librosa能量_librosa与python_speech_features
- java 遍历map集合
- 西安理工大学计算机专业毕业,西安理工大学什么专业好找工作?毕业工资大概多少?答案在这里...
- Serdes 原理及调试学习
- 机器语言入门 w3c,编程语言
- Python实现的爬取百度文
- 报表生成器FastReport .Net使用Windows.Forms教程
- 逻辑谬误_新网络谬误
- 百度百科爬虫爬人物信息
- 联通速品简易测试报告
- android主题切换框架,Prism(棱镜)——一款优秀的Android 主题动态切换框架
- eclipse的简介
- MySql ORDER BY排序用法
- ubuntu下安装navicat
- maven settings.xml文件