Як збільшити масштаб до обраної функції за допомогою pyQGIS


10

Я хочу створити функцію, яка вибирає функцію та збільшує її (аналогічно QGIS). Тому існує наступна функція:

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)

Вибрані функції виділено на карті. Але я поняття не маю, як зробити "збільшення" на вибрані функції чи якесь фокусування їх у середині карти.

Відповіді:


14

Потрібно встановити розширення полотна карти на розширення вибраних елементів:

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

Дякую! І як я можу пов'язати iface з фактично відкритою картою QGIS?
Мартін

Ви працюєте над плагіном або окремим додатком?
Nathan W

Так, це зрозуміло. Я працюю над плагіном. Я забув gis.utils.iface. Тепер його працює чудово. Ще раз дякую вам!
Мартін

5

Масштабування вибраних функцій також може бути виконано, запустивши в меню Перегляд опцію "Збільшити вибір".

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

Примітка. Номер індексу може змінюватися в різних версіях QGIS.


Або безпосередньо:

iface.actionZoomToSelected().trigger()

2
Я б не використовував цей метод. Що робити, якщо в новій версії qgis функції переходять до індексу 13? Вирішення подібних проблем, безумовно, не дуже цікаво ...
mozzbozz

@mozzbozz Я згоден. Перша відповідь - найкращий вибір. Це може бути другий альтернативний варіант. Відредагував відповідь відповідно до вашої пропозиції. Дякую!
січня

3
Якщо ви хочете запустити цей варіант, я думаю iface.actionZoomToSelected().trigger(), це трохи безпечніше :)
Йосип

@ Джозеф можете у вас редагувати відповідь за вашою пропозицією?
Sjs

1
@ Джозеф Я не заперечував би проти цього;) щасливий, що ти зробив відповідь виглядати ще краще!
січня

0

# Перший QMessageBox відображає всі вибрані функції:

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

# Другий зум для вибраних функцій:

iface.actionZoomToSelected().trigger();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.