Page 21 sur 23
É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 :
(Attention à &)
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(2.0616833, 49.0297879))) res, outFeats = layer.dataProvider().addFeatures([feat])
Dans un shape, éditer seulement un champ
with edit(mylayer): for feature in mylayer.getFeatures(): feature['myfield'] = 'Nouvelle valeur' mylayer.updateFeature(feature)
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 :
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)