So zoomen Sie mit pyQGIS auf eine ausgewählte Funktion


10

Ich möchte eine Funktion erstellen, die ein Feature auswählt und darauf zoomt (ähnlich in QGIS). Daher gibt es folgende Funktion:

QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)

def zoomTo(self):
    layer = self.vlayer
    atable = self.ui.table

    selectList=[]
    for i in atable.selectionModel().selectedRows():
        ID = atable.item(i.row(),0).text()
        selectList.append(int(ID))

    layer.setSelectedFeatures(selectList)

Die ausgewählten Features werden auf der Karte hervorgehoben. Ich habe jedoch keine Ahnung, wie ich die ausgewählten Features "zoomen" oder in der Mitte der Karte fokussieren soll.

Antworten:


14

Sie müssen die Ausmaße des Kartenbereichs auf die Ausmaße der Auswahl festlegen:

box = layer.boundingBoxOfSelected()
iface.mapCanvas().setExtent(box)
iface.mapCanvas().refresh()

Vielen Dank! Und wie kann ich das iface mit der tatsächlich geöffneten QGIS-Karte in Beziehung setzen?
Martin

Arbeiten Sie an einem Plugin oder einer eigenständigen App?
Nathan W

Ja, verstanden. Ich arbeite an einem Plugin. Ich habe das vergessen gis.utils.iface. Jetzt funktioniert es perfekt. Danke nochmal!
Martin

5

Das Zoomen auf ausgewählte Funktionen kann auch durch Auslösen der Option "Auf Auswahl zoomen" im Menü "Ansicht" ausgeführt werden.

eMenu = self.iface.viewMenu()
eMenu.actions() [12].trigger()

Hinweis: Die Indexnummer kann je nach QGIS-Version variieren.


Oder direkter:

iface.actionZoomToSelected().trigger()

2
Ich würde diese Methode nicht verwenden. Was ist, wenn in einer neuen qgis-Version die Funktionen auf Index 13 verschoben werden? Die Fehlerbehebung bei solchen Problemen macht definitiv keinen großen Spaß ...
Mozzbozz

@mozzbozz Ich stimme zu. Die erste Antwort ist die beste Wahl. Dies kann eine zweite alternative Option sein. Bearbeiten Sie die Antwort gemäß Ihrem Vorschlag. Vielen Dank!
Sjs

3
Wenn Sie die Option auslösen möchten, denke ich, iface.actionZoomToSelected().trigger()ist ein wenig sicherer :)
Joseph

@ Joseph Kannst du die Antwort nach deinem Vorschlag bearbeiten?
Sjs

1
@ Joseph Ich hätte nichts dagegen;) froh, dass du die Antwort noch besser aussehen lässt!
Sjs

0

# Die erste QMessageBox zeigt alle ausgewählten Funktionen an:

lyr = iface.activeLayer();
fts = lyr.selectedFeatures();
ftsCount = lyr.selectedFeatureCount();
sFts = str(ftsCount);
msgBox = QMessageBox();
msgBox.setText(sFts +' selected features');
msgBox.exec_();

# Zweiter Zoom auf ausgewählte Funktionen:

iface.actionZoomToSelected().trigger();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.