I have a Polyline and would like to add new vertex to before start point or end point or at any part of the polyline using python in qgis.
How can i do that?
Answer
First case: insert new polyline
You have to define the Polyline like so:
pLine = [QgsPoint(1,1), QgsPoint(2,1), QgsPoint(2,2)]
it is a list-of-QgsPoint. After you can put more QgsPoint into the list by append
to insert the element at the end of the list:
pLine.append(QgsPoint(3,2))
or inserting some vertex point at a specific location of the list:
## insert value at index 1
pLine.insert(1, QgsPoint(1, 0.5))
in this case the result will be:
pLine = [QgsPoint(1,1), QgsPoint(1, 0.5), QgsPoint(2,1), QgsPoint(2,2), QgsPoint(3,2)]
To add the new feature to the layer:
## create and add to map canvas a memory layer
lineLayer = iface.addVectorLayer("LineString", "Line Layer", "memory")
## create a feature
ft = QgsFeature()
## get geometry from the list-of-QgsPoint
polyline = QgsGeometry.fromPolyline(pLine)
## set geometry to the feature
ft.setGeometry(polyline)
pr = lineLayer.dataProvider()
pr.addFeatures([ft])
Second case: change an existing polyline
To change an existing geometry e.g adding a new vertex to line:
## add element to the list-of-Qgspoint at index 2
pLine.insert(2, QgsPoint(2, 0.5))
## define geometry with the new vertex
polyline = QgsGeometry.fromPolyline(pLine)
## change the geometry
pr.changeGeometryValues({ft.id():polyline})
in order to display the new vertex you have to refresh the map canvas:
iface.mapCanvas().refresh()
No comments:
Post a Comment