Lebih

Menerapkan Tingkat Zoom dari beberapa lapisan QgsVector dengan Label di PyQGIS?

Menerapkan Tingkat Zoom dari beberapa lapisan QgsVector dengan Label di PyQGIS?


Saya memiliki kasus berikut:

  • Proyek terdiri dari tiga lapisan:
    1. Plugin OpenLayers dengan jalan-jalan Google
    2. Lapisan QGSVector dengan fitur Titik dan Label diaktifkan
    3. Lapisan QGSVector dengan fitur Polyline dan Label diaktifkan

Saya perlu (1) memperbesar kanvas tingkat untuk #2 dan #3 dan (2) memastikan Label terlihat untuk semua fitur yang ditempatkan pada dua lapisan ini.

Saya menggunakan kode berikut:

idList = [] idList.append(vlPoint.id()) idList.append(vlLine.id()) render = QgsMapRenderer() render.setLayerSet(idList) canvas = qgis.utils.iface.mapCanvas() canvas.setExtent( render.fullExtent()) kanvas.refresh()

Hasil dari eksekusi kode ini di bawah ini:

Seperti yang Anda lihat, fitur titik paling atas ditampilkan sebagian dan labelnya tidak ada sama sekali. Jika saya memperkecil kanvas secara manual hanya sedikit- semuanya ditampilkan OK.

Perlu tahu cara memperbesar dengan benar sejauh dalam kasus saya - untuk memastikan semua fitur dan label ditampilkan.

Jika saya hanya memiliki satu lapisan vektor - kode berikut memecahkan masalah tersebut:

vlPoint.selectAll() kanvas.zoomToSelected() vlPoint.removeSelection()

Tetapi untuk dua lapisan pendekatan ini tidak berhasil.


Anda dapat menggabungkan luasan kedua lapisan dan menambah sedikit kotak pembatas yang dihasilkan untuk memastikan semua geometri dan label terlihat.

Dalam kode berikut, saya i) mengambil lapisan pertama dan kedua dari ToC, ii) menggabungkan luasnya, dan iii) menskalakan kotak pembatas yang dihasilkan sebesar 10%:

tingkat = QgsRectangle() tingkat.setMinimal() lapisan = [ iface.mapCanvas().layers()[0], iface.mapCanvas().layers()[1] ] untuk lapisan dalam lapisan: tingkat.combineExtentWith( lapisan. tingkat() ) tingkat.scale( 1.1 ) # Tingkatkan sedikit untuk memastikan semua geometri terletak di dalam iface.mapCanvas().setExtent( tingkat ) iface.mapCanvas().refresh()

Tonton videonya: Pre-Engineering New Student Celebration Zoom Meeting