Cara memperbesar ke fitur yang dipilih dengan pyQGIS

10

Saya ingin membuat fungsi yang memilih fitur dan memperbesarnya (serupa dengan QGIS). Oleh karena itu ada fungsi berikut:

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)

Fitur yang dipilih disorot pada peta. Tapi saya tidak tahu cara membuat "zoom" ke fitur yang dipilih atau memfokuskan mereka di tengah peta.

Martin
sumber

Jawaban:

14

Anda perlu mengatur luasan kanvas peta ke luasan pilihan:

box = layer.boundingBoxOfSelected()
iface.mapCanvas().setExtent(box)
iface.mapCanvas().refresh()
Nathan W
sumber
Terima kasih! Dan bagaimana saya bisa menghubungkan iface dengan peta QGIS terbuka yang sebenarnya?
Martin
Apakah Anda mengerjakan plugin, atau aplikasi mandiri?
Nathan W
Ya, mengerti. Saya sedang mengerjakan sebuah plugin. Saya lupa gis.utils.iface. Sekarang ini berfungsi dengan baik. Terima kasih lagi!
Martin
5

Zoom ke fitur yang dipilih juga dapat dilakukan dengan memicu opsi "Zoom ke Pilihan" pada menu Tampilan.

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

Catatan: Nomor indeks dapat bervariasi dengan versi QGIS yang berbeda.


Atau lebih langsung:

iface.actionZoomToSelected().trigger()
Sjs
sumber
2
Saya tidak akan menggunakan metode ini. Bagaimana jika dalam versi qgis baru fungsi bergerak ke indeks 13? Memecahkan masalah seperti ini jelas tidak terlalu menyenangkan ...
mozzbozz
@mozzbozz saya setuju. Jawaban pertama adalah pilihan terbaik. Ini bisa menjadi opsi alternatif kedua. Edit jawaban sesuai dengan saran Anda. Terima kasih!
Sjs
3
Jika Anda ingin memicu opsi, saya pikir iface.actionZoomToSelected().trigger()sedikit lebih aman :)
Joseph
@ Joseph bisa tolong edit jawaban sesuai saran Anda?
Sjs
1
@ Joseph Saya tidak akan keberatan;) senang bahwa Anda membuat jawabannya tampak lebih baik!
Sjs
0

# QMessageBox pertama menampilkan semua fitur yang dipilih:

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

# Zoom kedua ke fitur yang dipilih:

iface.actionZoomToSelected().trigger();
pengguna107473
sumber