from PyQt5.QtCore import QVariant
from qgis.core import QgsVectorLayer, QgsFeature, QgsField, QgsPointXY, QgsGeometry, QgsProject
# 创建矢量图层
point_layer = QgsVectorLayer("Point", "十六国", "memory")
pr = point_layer.dataProvider()
pr.addAttributes([QgsField("national_name", QVariant.String), # 国名
QgsField("nationality", QVariant.String), # 民族
QgsField("princes_numbers", QVariant.Int), # 君主人数
QgsField("first_monarch", QVariant.String), # 首任君主
QgsField("last monarch", QVariant.String), # 末任君主
QgsField("surname", QVariant.Int), # 国祚
])
# 更新字段列表
point_layer.updateFields()
# 添加数据列表
sixteen_states = [
{'x': 1, 'y': 90, '国名': '前赵', '民族': '匈奴', '君主人数': 6, '首任君主': '刘渊', '末任君主': '刘熙', '国祚': 25},
{'x': 2, 'y': 58, '国名': '后赵', '民族': '羯', '君主人数': 7, '首任君主': '石勒', '末任君主': '刘熙', '国祚': 32},
{'x': 3, 'y': 10, '国名': '成汉', '民族': '巴氐', '君主人数': 5, '首任君主': '李雄', '末任君主': '李势',
'国祚': 41},
{'x': 4, 'y': 58, '国名': '前凉', '民族': '汉', '君主人数': 8, '首任君主': '张寔', '末任君主': '张天锡',
'国祚': 75},
{'x': 5, 'y': 79, '国名': '前燕', '民族': '鲜卑', '君主人数': 3, '首任君主': '慕容皝', '末任君主': '慕容暐',
'国祚': 18},
{'x': 6, 'y': 31, '国名': '前秦', '民族': '氐', '君主人数': 6, '首任君主': '苻健', '末任君主': '苻崇', '国祚': 44},
{'x': 7, 'y': 47, '国名': '后燕', '民族': '鲜卑', '君主人数': 7, '首任君主': '慕容垂', '末任君主': '慕容熙',
'国祚': 23},
{'x': 8, 'y': 25, '国名': '后秦', '民族': '羌', '君主人数': 3, '首任君主': '姚苌', '末任君主': '姚泓', '国祚': 33},
]
# 添加点几何及设置属性
for rec in sixteen_states:
f = QgsFeature()
pt = QgsPointXY(rec['x'], rec['y'])
f.setGeometry(QgsGeometry.fromPointXY(pt))
f.setAttributes([rec['国名'], rec['民族'], rec['君主人数'], rec['首任君主'], rec['末任君主'], rec['国祚']])
pr.addFeature(f)
point_layer.updateExtents()
# 添加地图至图层面板
QgsProject.instance().addMapLayer(point_layer)
PyQGIS中创建要素及属性赋值操作
于 2023-05-11 21:48:01 首次发布