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.

Odpowiedzi:


14

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

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

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()

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();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.