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

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

字段增删及数据过滤
  • 字段增删
    • 手动设置图层属性进行字段增删
      • 新增
      • 删除
    • 使用python代码进行字段增删
  • 数据过滤
    • 手动进行filter设置进行过滤
    • 使用python进行过滤
【qgis开发|[QGIS]常用操作--字段增删与数据过滤】
字段增删 手动设置图层属性进行字段增删 新增
  • 选中需要操作的图层,点击鼠标右键,选择"属性",打开属性图层属性信息窗口
    qgis开发|[QGIS]常用操作--字段增删与数据过滤
    文章图片
  • 选中左侧"字段"栏,根据下图步骤,打开编辑,新增字段
    qgis开发|[QGIS]常用操作--字段增删与数据过滤
    文章图片
删除
  • 删除操作与新增操作都是在"字段"栏进行,如下图
    qgis开发|[QGIS]常用操作--字段增删与数据过滤
    文章图片

    注意:以上操作需要打开编辑,操作的结果在关闭编辑时才会同步到数据源
使用python代码进行字段增删
  • QGIS支持使用python代码处理数据,如下图所示,使用python代码新增和删除字段,本文演示了新增字段,下方提供了删除字段的代码,感兴趣的读者可以自行测试
    qgis开发|[QGIS]常用操作--字段增删与数据过滤
    文章图片
import os import sys from qgis.gui import * from qgis.core import * import qgis.utils from 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)) curlayer.commitChanges() print("%s:图层[%s]字段处理完成" % ("Info", curlayer.name()))

数据过滤
  • 在查看数据时,我们有时候需要从大量数据中对某一字段为特定值的进行过滤,此时可以使用filter进行属性过滤得到想要的数据,类似数据库查询的where语句
手动进行filter设置进行过滤
  • 在非编辑状态,右键选中的图层,选择"过滤"
  • 在弹出的"查询构建器"中,点击字段列表中某个,在右侧点击全部,可以获得该字段在图层的所有取值
  • 在过滤表达式区域,可以参照SQL的WHERE子句设置过滤表达式,支持精确查找,模糊查找等过滤方式,如下图所示
使用python进行过滤
  • 对字段过滤查询,同样可以使用代码进行,这里使用python代码向大家演示下模糊查询,其它类型的查询大家可以根据自己需要,修改sql即可,代码如下
import os import sys from qgis.gui import * from qgis.core import * import qgis.utils from qgis.core import QgsProjectmapCanvas = iface.mapCanvas() curlayer = mapCanvas.currentLayer()if curlayer is None: print("%s:%s" % ("Error","图层不可用")) else: field = "NAME" value = "https://www.it610.com/article/%湖%" 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()))

qgis开发|[QGIS]常用操作--字段增删与数据过滤
文章图片

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

    推荐阅读