失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > [QGIS]常用操作--字段增删与数据过滤

[QGIS]常用操作--字段增删与数据过滤

时间:2019-12-21 04:04:28

相关推荐

[QGIS]常用操作--字段增删与数据过滤

文章中使用的QGIS版本为:3.10.7-A Coruña

字段增删及数据过滤

字段增删手动设置图层属性进行字段增删新增删除使用python代码进行字段增删数据过滤手动进行filter设置进行过滤使用python进行过滤

字段增删

手动设置图层属性进行字段增删

新增

选中需要操作的图层,点击鼠标右键,选择"属性",打开属性图层属性信息窗口

选中左侧"字段"栏,根据下图步骤,打开编辑,新增字段

删除

删除操作与新增操作都是在"字段"栏进行,如下图

注意:以上操作需要打开编辑,操作的结果在关闭编辑时才会同步到数据源

使用python代码进行字段增删

QGIS支持使用python代码处理数据,如下图所示,使用python代码新增和删除字段,本文演示了新增字段,下方提供了删除字段的代码,感兴趣的读者可以自行测试

import osimport sysfrom qgis.gui import *from qgis.core import *import qgis.utilsfrom qgis.core import QgsProjectmapCanvas = iface.mapCanvas()curlayer = mapCanvas.currentLayer()if curlayer is None:print("%s:%s" % ("Error","图层不可用"))else:print("%s:图层[%s]开始字段处理" % ("Info", curlayer.name()))curlayer.startEditing()# 新增字段# 判断字段是否存在,若不存在再创建for field in ["LineName", "RoadName"]:if curlayer.fields().indexFromName(field) < 0:# 字段不存在lineNameField = QgsField(field, QVariant.String)ret = curlayer.addAttribute(lineNameField)if ret is False:print("%s:图层[%s]添加字段[%s]失败!" % ("Error", curlayer.name(), field))else:print("%s:图层[%s]添加字段[%s]成功!" % ("Info", curlayer.name(), field))else:print("%s:图层[%s]不需要添加字段[%s]" % ("Info", curlayer.name(), field))# 删除字段# 判断字段是否存在,若存在再删除# del_field = "LineName"# idx = curlayer.fields().indexFromName(del_field)# if idx > 0:## 字段存在#ret = curlayer.deleteAttribute(idx)#if ret is False:# print("%s:图层[%s]删除字段[%s]失败!" % ("Error", curlayer.name(), del_field))#else:# print("%s:图层[%s]删除字段[%s]成功!" % ("Info", curlayer.name(), del_field))# else:#print("%s:图层[%s]不需要删除字段[%s]" % ("Info", curlayer.name(), del_field))mitChanges()print("%s:图层[%s]字段处理完成" % ("Info", curlayer.name()))

数据过滤

在查看数据时,我们有时候需要从大量数据中对某一字段为特定值的进行过滤,此时可以使用filter进行属性过滤得到想要的数据,类似数据库查询的where语句

手动进行filter设置进行过滤

在非编辑状态,右键选中的图层,选择"过滤"在弹出的"查询构建器"中,点击字段列表中某个,在右侧点击全部,可以获得该字段在图层的所有取值在过滤表达式区域,可以参照SQL的WHERE子句设置过滤表达式,支持精确查找,模糊查找等过滤方式,如下图所示

使用python进行过滤

对字段过滤查询,同样可以使用代码进行,这里使用python代码向大家演示下模糊查询,其它类型的查询大家可以根据自己需要,修改sql即可,代码如下

import osimport sysfrom qgis.gui import *from qgis.core import *import qgis.utilsfrom qgis.core import QgsProjectmapCanvas = iface.mapCanvas()curlayer = mapCanvas.currentLayer()if curlayer is None:print("%s:%s" % ("Error","图层不可用"))else:field = "NAME"value = "%湖%"value2 = "%河%"print("%s:图层[%s]开始过滤" % ("Info", curlayer.name()))# 先要保证图层已取消编辑if curlayer.isEditable():mitChanges()# 精确查找# sql = '''{} = \'{}\''''.format(field, value)# 模糊查找sql = '''{name} LIKE \'{v}\' OR {name} LIKE \'{v2}\''''.format(name=field, v=value, v2=value2)ret = curlayer.setSubsetString(sql)if ret:print("%s:对图层[%s]按照[%s]过滤完成." % ("Info", curlayer.name(), sql))else:print("%s:对图层[%s]按照[%s]过滤失败!" % ("Error", curlayer.name(), sql))print("%s:图层[%s]过滤结束" % ("Info", curlayer.name()))

以上就是关于qgis中图层字段增删及按照字段过滤要素的方法,希望能对您有所帮助,如对上述有疑问或者建议,欢迎私信~~

如果觉得《[QGIS]常用操作--字段增删与数据过滤》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。