Ebenenausdehnung in PyQGIS erhalten?

10

Ich versuche, ein Verarbeitungsskript mit dem Grasalgorithmus r.neighborsfür Raster zu schreiben . Wenn Sie die GUI für diesen Algorithmus verwenden, können Sie das GRASS-Ebenenausdehnungsfeld leer lassen, um die minimale Ausdehnung zu verwenden. Im Gegenteil, wenn ich in der Python-Konsole verwendet werde, kann ich nicht finden, wie diese Art von "Standard" -Wert eingegeben werden kann.Geben Sie hier die Bildbeschreibung ein

Ich habe auf https://docs.qgis.org/2.2/en/docs/user_manual/processing/console.html gesehen, dass es obligatorisch zu sein scheint, die vier Koordinaten für einen Extent-Parameter einzugeben. Ich habe versucht, zu verwenden, iface.mapCanvas().extent()aber das zurückgegebene Objekt wird nicht als Parameter akzeptiert und ich kann nicht finden, wie ich seine Koordinaten erhalten kann.

Gibt es eine Möglichkeit, xmin, ymin, xmax, ymaxdie Ebene in PyQGIS dazu zu bringen, sie in den Algorithmus einzugeben? Mache ich das total falsch

Clement
quelle
Vielen Dank für Ihre Antworten, ich habe diese Lösung auch an meiner Seite gefunden ... Tatsächlich wurde sie auch in gis.stackexchange.com/questions/213428/… auf ähnliche Weise beantwortet, aber Klammern danach extentfehlen, sodass sie nicht funktionierten. .
Clement

Antworten:

12

Die Antwort ist fast vollständig in einem Beitrag enthalten, den ich kürzlich geschrieben habe.

Der Extent wird als QgsRectangle () -Objekt mit dem folgenden Code zurückgegeben:

layer = iface.activeLayer() # load the layer as you want
ext = layer.extent()

Um die Koordinaten der Eckpunkte für die aktuelle Ebene abzurufen, können Sie diesen Code ausführen:

xmin = ext.xMinimum()
xmax = ext.xMaximum()
ymin = ext.yMinimum()
ymax = ext.yMaximum()
coords = "%f,%f,%f,%f" %(xmin, xmax, ymin, ymax) # this is a string that stores the coordinates

Schließlich können Sie den folgenden Code für die Verwendung des r.neighborsModuls in der Python-Konsole ausführen :

processing.runalg("grass7:r.neighbors",layer,0,3,False,False,"",coords,0,None)
mgri
quelle
5

Sie waren auf dem richtigen Weg, Sie müssen nur noch einen Schritt weiter gehen. Weitere Informationen finden Sie in der QGIS-Dokumentation zu QgsRectangle

Grundsätzlich tun Sie:

  • Holen Sie sich die aktuelle Ebene

    layer = iface.activeLayer()
  • Holen Sie sich das Ausmaß, das ein QgsRectangle-Objekt ist

    ex = layer.extent()
  • und extrahiere dort die Werte mit:

    xmax = ex.xMaximum()
    ymax = ex.yMaximum()
    xmin = ex.xMinimum()
    ymin = ex.yMinimum()
    
LaughU
quelle