Как увеличить масштаб выбранной функции с помощью 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?
Мартин
Вы работаете над плагином или отдельным приложением?
Натан W
Да, понял. Я работаю над плагином. Я забыла gis.utils.iface. Теперь это работает отлично. Еще раз спасибо!
Мартин
5

Приближение к выбранным функциям также можно выполнить, активировав опцию «Zoom to Selection» в меню View.

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

Примечание. Номер индекса может отличаться в зависимости от версии QGIS.


Или более прямо:

iface.actionZoomToSelected().trigger()
SJS
источник
2
Я бы не использовал этот метод. Что если в новой версии qgis функции переместятся на индекс 13? Устранение таких проблем определенно не очень весело ...
mozzbozz
@mozzbozz Я согласен. Первый ответ - лучший выбор. Это может быть второй альтернативный вариант. Отредактировал ответ по вашему предложению. Спасибо!
Sjs
3
Если вы хотите активировать опцию, я думаю, что iface.actionZoomToSelected().trigger()это немного безопаснее :)
Джозеф
@ Джозеф, можешь ли ты редактировать ответ по твоему предложению?
Sjs
1
@ Джозеф, я бы не возражал против этого;) рад, что ты сделал ответ еще лучше!
Sjs
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();
user107473
источник