文章中使用的QGIS版本为:3.10.7-A Coru?a
字段增删
手动设置图层属性进行字段增删
新增
- 选中需要操作的图层,点击鼠标右键,选择"属性",打开属性图层属性信息窗口
- 选中左侧"字段"栏,根据下图步骤,打开编辑,新增字段
删除
- 删除操作与新增操作都是在"字段"栏进行,如下图
注意:以上操作需要打开编辑,操作的结果在关闭编辑时才会同步到数据源
使用python代码进行字段增删
- QGIS支持使用python代码处理数据,如下图所示,使用python代码新增和删除字段,本文演示了新增字段,下方提供了删除字段的代码,感兴趣的读者可以自行测试
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))
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 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 = '''{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中图层字段增删及按照字段过滤要素的方法,希望能对您有所帮助,如对上述有疑问或者建议,欢迎私信~~
|