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.

Jawaban:


14

Anda perlu mengatur luasan kanvas peta ke luasan pilihan:

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

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

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();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.