Index de l'article

Edit layers

Add a point in a shape

(Attention to &)

monCheminDeBase = r'C:\\Users\\georg\\Downloads\\'
 
project = QgsProject.instance()
project.removeAllMapLayers()
project.clear()
iface.mapCanvas().refresh()
 
myLayer = QgsVectorLayer(monCheminDeBase + 'peaks_selection/peaks_selection.shp', 'Sommets', 'ogr')
project.addMapLayer(myLayer)
 
crs = QgsCoordinateReferenceSystem.fromEpsgId(4326)
project.setCrs(crs)
project.setEllipsoid('EPSG:4326')
 
# ADD A POINT
myPoints = project.mapLayersByName('Sommets')[0]
aPoint = QgsVectorLayer(myPoints.dataProvider().dataSourceUri(), '', 'ogr')
caps = aPoint.dataProvider().capabilities()
 
if caps & QgsVectorDataProvider.AddFeatures:
    feat = QgsFeature(aPoint.fields())
    feat.setAttributes([1, 'Université de Cergy-Pontoise'])
    feat.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(2.0616833, 49.0297879)))
    res, outFeats = aPoint.dataProvider().addFeatures([feat])

Add fields in a layer

myLayer = QgsVectorLayer(r'C:/Users/Georges/Downloads/my layer/new_file.tab', 'new file', 'ogr')
myLayerInstance = QgsProject.instance().mapLayersByName('new file')[0]
 
myLayerInstance.startEditing()
 
myLayerInstance.dataProvider().addAttributes(
[QgsField("newfield1", QVariant.String), QgsField("newfield2", QVariant.String)])
 
myLayerInstance.updateFields()
 
myLayerInstance.commitChanges()

Fill a field

myLayerInstance = QgsProject.instance().mapLayersByName('new file')[0]
 
with edit(myLayerInstance):
    for feature in myLayerInstance.getFeatures():
        # A VALUE
        feature['newfield1'] = 'Abc Xyz'
 
        # CONCATENATE OTHER FIELD
        feature['newfield2'] = feature['name'] + '-' + feature['id']
 
        myLayerInstance.updateFeature(feature)

Create a shape

layer = QgsProject.instance().mapLayersByName('peaks')[0]
layer.selectByExpression('"NAME" LIKE \'Aiguille%\'')
 
root = r'C:/Users/georg/Downloads/Aiguilles/'
if not os.path.exists(root):
    os.makedirs(root)
 
file = str(root)+'Aiguilles.shp'
writer = QgsVectorFileWriter.writeAsVectorFormat(layer, file, 'utf-8', driverName='ESRI Shapefile', onlySelected=True)