Jak powiększyć wybraną funkcję za pomocą pyQGIS

10

Chcę utworzyć funkcję, która wybiera funkcję i przybliża ją (podobnie w QGIS). Dlatego istnieje następująca funkcja:

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)

Wybrane obiekty są podświetlone na mapie. Ale nie mam pojęcia, jak wykonać „zbliżenie” do wybranych obiektów lub jakoś ustawić je na środku mapy.

Jaskółka oknówka
źródło

Odpowiedzi:

14

Musisz ustawić zakres obszaru roboczego mapy na zakres wybranych elementów:

box = layer.boundingBoxOfSelected()
iface.mapCanvas().setExtent(box)
iface.mapCanvas().refresh()
Nathan W.
źródło
Dziękuję Ci! Jak mogę powiązać iface z rzeczywistą otwartą mapą QGIS?
Martin
Czy pracujesz nad wtyczką lub samodzielną aplikacją?
Nathan W
Tak, mam to. Pracuję nad wtyczką. Zapomniałem gis.utils.iface. Teraz działa idealnie. Jeszcze raz dziękuję!
Martin
5

Zoom do wybranych funkcji można także wykonać, uruchamiając opcję „Zoom to Selection” w menu View.

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

Uwaga: Numer indeksu może się różnić w zależności od wersji QGIS.


Lub bardziej bezpośrednio:

iface.actionZoomToSelected().trigger()
Sjs
źródło
2
Nie użyłbym tej metody. Co się stanie, jeśli w nowej wersji qgis funkcje przejdą do indeksu 13? Rozwiązywanie tego rodzaju problemów zdecydowanie nie jest zbyt zabawne ...
mozzbozz
@mozzbozz Zgadzam się. Pierwsza odpowiedź to najlepszy wybór. Może to być druga alternatywna opcja. Edytowałem odpowiedź zgodnie z twoją sugestią. Dzięki!
Sjs
3
Jeśli chcesz uruchomić tę opcję, myślę, że iface.actionZoomToSelected().trigger()jest trochę bezpieczniejsza :)
Joseph
@Joseph, czy możesz edytować odpowiedź zgodnie z twoją sugestią?
Sjs
1
@Joseph Nie miałbym nic przeciwko;) szczęśliwy, że sprawiłeś, że odpowiedź wygląda jeszcze lepiej!
Sjs
0

# Pierwszy QMessageBox wyświetla wszystkie wybrane funkcje:

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

# Drugi zoom do wybranych funkcji:

iface.actionZoomToSelected().trigger();
107473
źródło