Index de l'article

Edit layer (geopackage)

from qgis.core import (QgsVectorLayer, QgsField, QgsFields, QgsFeature, QgsGeometry, QgsPointXY, QgsVectorFileWriter, QgsCoordinateReferenceSystem, QgsCoordinateTransformContext)
from qgis.PyQt.QtCore import QVariant
 
# Define path and name
cheminGeopackage = r'C:\\Users\\georg\\Downloads\\mon_geopackage.gpkg'
nomCouche = 'Mes points'
monEpsg = 'EPSG:4326'
 
# QGIS projetc
project = QgsProject.instance()
project.removeAllMapLayers()
project.clear()
iface.mapCanvas().refresh()
 
# SRID/CRS/projection
crs = QgsCoordinateReferenceSystem(monEpsg)
 
# Layer
fields = QgsFields()
fields.append(QgsField('ville', QVariant.String))
fields.append(QgsField('spot', QVariant.String))
 
# Memory
coucheTemporaire = QgsVectorLayer('Point?crs=' + monEpsg, nomCouche, 'memory')
monProvider = coucheTemporaire.dataProvider()
monProvider.addAttributes(fields)
coucheTemporaire.updateFields()
 
# Features
f = QgsFeature()
f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(2.0751661, 49.0397097)))
f.setAttributes(['Cergy-Pontoise', 'Les Chênes 1'])
monProvider.addFeatures([f])
 
f = QgsFeature()
f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(2.0741189, 49.0388195)))
f.setAttributes(['Cergy-Pontoise', 'Les Chênes 2'])
monProvider.addFeatures([f])
 
f = QgsFeature()
f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(2.0750590, 49.0387535)))
f.setAttributes(['Cergy-Pontoise', 'Maison des étudiants'])
monProvider.addFeatures([f])
 
coucheTemporaire.updateExtents()
 
# Save
options = QgsVectorFileWriter.SaveVectorOptions()
options.driverName = 'GPKG'
options.layerName = nomCouche
options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteLayer
 
res, err = QgsVectorFileWriter.writeAsVectorFormatV2(
coucheTemporaire,
cheminGeopackage,
QgsCoordinateTransformContext(),
options
)
 
if res == QgsVectorFileWriter.NoError:
    print('GeoPackage créé avec succès :', cheminGeopackage)
 
    # Ouvrir
    mes_points_geopackage = QgsVectorLayer(cheminGeopackage, nomCouche, 'ogr')
    project.addMapLayer(mes_points_geopackage)
 
else:
    print('Erreur :', err)