Page 23 sur 25
Écriture de points
Dans un shape
Le code ci-dessous est inspiré de l'excellent site opensourceoptions.com.
En partant du principe que vous avez ouvert un shape nommé my_points, en 4326, contenant un champ id et un champ text, le code suivant crée un point sur l'Université de Cergy-Pontoise :
[code]layers = QgsProject.instance().mapLayersByName('my_points')[0]
layer = QgsVectorLayer(layers.dataProvider().dataSourceUri(), '', 'ogr')
caps = layer.dataProvider().capabilities()
if caps & QgsVectorDataProvider.AddFeatures:
feat = QgsFeature(layer.fields())
feat.setAttributes([1, 'Université de Cergy-Pontoise'])
feat.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(49.0297879, 2.0616833)))
res, outFeats = layer.dataProvider().addFeatures([feat])[/code]
Dans un shape, éditer seulement un champ
[code]with edit(mylayer):
for feature in mylayer.getFeatures():
feature['myfield'] = 'Nouvelle valeur'
mylayer.updateFeature(feature)[/code]
Dans une couche virtuelle ou un GEOJSON
Le code ci-dessous est inspiré de l'excellent site opensourceoptions.com.
Nous créons une couche virtuelle de points, y ajoutons deux champs id et name, avant d'y écrire un 1er point :
[code]point_vector = QgsVectorLayer("Point", "my_points", "memory")
QgsProject.instance().addMapLayer(point_vector)
from qgis.PyQt.QtCore import QVariant
pr = point_vector.dataProvider()
pr.addAttributes([QgsField("id", QVariant.Int), QgsField("name", QVariant.String)])
point_vector.updateFields()
f = QgsFeature()
f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(49.0297879, 2.0616833)))
f.setAttributes([1,'Université de Cergy-Pontoise'])
pr.addFeature(f)
point_vector.updateExtents()
QgsProject.instance().addMapLayer(point_vector)[/code]