Come eseguire lo zoom su una funzione selezionata con pyQGIS


10

Voglio creare una funzione che seleziona una funzione e ingrandisce (simile in QGIS). Pertanto esiste la seguente funzione:

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)

Le funzioni selezionate sono evidenziate sulla mappa. Ma non ho idea di come fare uno "zoom" sulle caratteristiche selezionate o di focalizzarle in qualche modo al centro della mappa.

Risposte:


14

Devi impostare l'estensione della tela della mappa all'estensione delle selezioni:

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

Grazie! E come posso mettere in relazione l'iface con l'attuale mappa QGIS aperta?
Martin,

Stai lavorando a un plug-in o un'app autonoma?
Nathan W,

Sì, ho capito. Sto lavorando a un plugin. Ho dimenticato il gis.utils.iface. Ora funziona perfettamente. Grazie ancora!
Martin,

5

Lo zoom sulle funzioni selezionate può essere eseguito anche attivando l'opzione "Zoom sulla selezione" del menu Visualizza.

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

Nota: il numero di indice può variare con diverse versioni di QGIS.


O più direttamente:

iface.actionZoomToSelected().trigger()

2
Non userei questo metodo. Cosa succede se in una nuova versione di qgis le funzioni passano all'indice 13? Risolvere i problemi di questo tipo non è sicuramente molto divertente ...
mozzbozz

@mozzbozz Sono d'accordo. La prima risposta è la scelta migliore. Questa può essere una seconda opzione alternativa. Modificato la risposta in base al tuo suggerimento. Grazie!
SS

3
Se vuoi attivare l'opzione, penso che iface.actionZoomToSelected().trigger()sia un po 'più sicuro :)
Joseph,

@Joseph puoi modificare la risposta in base al tuo suggerimento?
SS

1
@Joseph non mi dispiacerebbe;) felice di aver reso la risposta ancora migliore!
SS

0

# Il primo a QMessageBox mostra tutte le funzionalità selezionate:

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

# Secondo zoom sulle funzioni selezionate:

iface.actionZoomToSelected().trigger();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.