Adding a line feature to a vector layer
Adding a line to a vector layer in QGIS is identical to adding a single point, but you just add more points to the QgsGeometry
object.
Getting ready
For this recipe, you will need to download a zipped line shapefile containing two line features from the following URL:
https://github.com/GeospatialPython/Learn/raw/master/paths.zip
Extract the ZIP file to a directory named paths
in your /qgis_data
directory.
How to do it...
We will load the line layer from the shapefile, build a list of points, create a new geometry object and add the points as a line, create a new feature, set the geometry, and add it to the layer's data provider. Finally, we will update the extents of the layer to make sure the bounding box of the layer encapsulates the new feature:
- Start QGIS.
- From the Plugins menu, select Python Console.
- First, we load the line layer and ensure it is valid:
vectorLyr=QgsVectorLayer('/qgis_data/paths/paths.shp', 'Paths',"ogr") vectorLyr.isValid()
- Next, we access the layer's data provider:
vpr = vectorLyr.dataProvider()
- Now, we build our list of points for a new line:
points = [] points.append(QgsPoint(430841.61703,5589485.34838)) points.append(QgsPoint(432438.36523,5575114.61462)) points.append(QgsPoint(447252.64015,5567663.12304))
- Then, we create a geometry object from the line:
line = QgsGeometry.fromPolyline(points)
- Create a feature and set its geometry to the line:
f = QgsFeature() f.setGeometry(line)
- Finally, we add the feature to the layer data provider and update the extents:
vpr.addFeatures([f]) vectorLyr.updateExtents()
How it works...
As with all geometry in QGIS, we use the 4-step building process of points, geometry, feature, and data provider to add the line. Interestingly, the QgsGeometry
object accepts Python lists for collections of points instead of creating a formal object, as is done with the QgsPoint
API.