Ich bin neu in Python und habe einige Schwierigkeiten. Ich möchte mit Python eine einfache Ebene mit einer Linie in der Konsole von QGIS erstellen. Wie kann ich das machen?
Ich bin neu in Python und habe einige Schwierigkeiten. Ich möchte mit Python eine einfache Ebene mit einer Linie in der Konsole von QGIS erstellen. Wie kann ich das machen?
Antworten:
Sie müssen zunächst verstehen, wie PyQGIS mit Geometrie umgeht ( Geometry Handling ).
Das wichtigste Element ist der Punkt:
QgsPoint (x, y)
und eine Linie oder ein Liniensegment bestehen aus zwei Punkten:
QgsGeometry.fromPolyline ([QgsPoint (x1, y1), QgsPoint (x2, y2)]);
So konstruieren Sie eine Linie:
line_start = QgsPoint(50,50)
line_end = QgsPoint(100,150)
line = QgsGeometry.fromPolyline([line_start,line_end])
und mit einer Speicherschicht (nur Geometrie, ohne die Attribute):
# 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])
Das Ergebnis ist:
Fügen Sie es mit 3 Punkten einfach als neues Feature hinzu:
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])
und das Ergebnis ist:
Und mit einer for-Schleife können Sie eine Linie mit vielen Segmenten erstellen: