Je suis nouveau sur Python et j'ai quelques difficultés. Je veux créer une couche simple avec une ligne dans la console de QGIS avec Python. Comment puis je faire ça?
Je suis nouveau sur Python et j'ai quelques difficultés. Je veux créer une couche simple avec une ligne dans la console de QGIS avec Python. Comment puis je faire ça?
Réponses:
Vous devez d'abord comprendre comment PyQGIS gère la géométrie ( Geometry Handling )
L'élément le plus important est le point:
QgsPoint (x, y)
et une ligne ou un segment de ligne sont composés de deux points:
QgsGeometry.fromPolyline ([QgsPoint (x1, y1), QgsPoint (x2, y2)]));
Donc, pour construire une ligne:
line_start = QgsPoint(50,50)
line_end = QgsPoint(100,150)
line = QgsGeometry.fromPolyline([line_start,line_end])
et avec une couche mémoire (géométrie uniquement, sans les attributs):
# create a new memory layer
v_layer = QgsVectorLayer("LineString", "line", "memory")
pr = v_layer.dataProvider()
# create a new feature
seg = QgsFeature()
# add the geometry to the feature,
seg.setGeometry(QgsGeometry.fromPolyline([line_start, line_end]))
# ...it was here that you can add attributes, after having defined....
# add the geometry to the layer
pr.addFeatures( [ seg ] )
# update extent of the layer (not necessary)
v_layer.updateExtents()
# show the line
QgsMapLayerRegistry.instance().addMapLayers([v_layer])
le résultat est:
avec 3 points, il suffit de l'ajouter comme nouvelle fonctionnalité:
newpoint = QgsPoint(143,125)
v_layer = QgsVectorLayer("LineString", "line_3pt", "memory")
pr = v_layer.dataProvider()
seg = QgsFeature()
seg.setGeometry(QgsGeometry.fromPolyline([line_start, line_end]))
# new feature: line from line_end to newpoint
seg = QgsFeature()
seg.setGeometry(QgsGeometry.fromPolyline([line_end, newpoint]))
pr.addFeatures( [ seg ] )
v_layer.updateExtents()
# add the line to
QgsMapLayerRegistry.instance().addMapLayers([v_layer])
et le résultat est:
Et avec une boucle for, vous pouvez créer une ligne avec de nombreux segments: