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

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

字段增删

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

新增

  • 选中需要操作的图层,点击鼠标右键,选择"属性",打开属性图层属性信息窗口
    attribute_info
  • 选中左侧"字段"栏,根据下图步骤,打开编辑,新增字段
    add_field

删除

  • 删除操作与新增操作都是在"字段"栏进行,如下图
    delete_field
    注意:以上操作需要打开编辑,操作的结果在关闭编辑时才会同步到数据源

使用python代码进行字段增删

  • QGIS支持使用python代码处理数据,如下图所示,使用python代码新增和删除字段,本文演示了新增字段,下方提供了删除字段的代码,感兴趣的读者可以自行测试
    code
import os
import sys
from qgis.gui import *
from qgis.core import *
import qgis.utils
from qgis.core import QgsProject

mapCanvas = 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))
    curlayer.commitChanges()
    print("%s:图层[%s]字段处理完成" % ("Info", curlayer.name()))

数据过滤

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

手动进行filter设置进行过滤

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

使用python进行过滤

  • 对字段过滤查询,同样可以使用代码进行,这里使用python代码向大家演示下模糊查询,其它类型的查询大家可以根据自己需要,修改sql即可,代码如下
import os
import sys
from qgis.gui import *
from qgis.core import *
import qgis.utils
from qgis.core import QgsProject

mapCanvas = 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():
        curlayer.commitChanges()
    # 精确查找
    # 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()))

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

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

young_always

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值