Viac

Kontrola viditeľnosti vrstiev s mierkou založenou na mierke v QGIS


Píšem metódu Pythonu, ku ktorej sa chcem pripojiť k udalosti kliknutia myšou. Metóda vyberá objekty z vrstiev, ktoré vyhovujú určitým podmienkam. Chcem vybrať z ktorejkoľvek viditeľnej vrstvy, ktorá má prvky v aktuálnom rozsahu mapy.

Na vyhodnotenie, ktorá vrstva je viditeľná, skontrolujem vlastnosť:

QgsProject.instance (). LayerTreeRoot (). FindLayer (layer.id ()). IsVisible ()

Existujú vrstvy s viditeľnosťou závislou od mierky. Nechcem vyberať objekty z vrstiev, ktoré nie sú viditeľné kvôli aktuálnej mierke mapy.

isVisible () z riadku kódu vyššie vráti True, aj keď vrstva nie je viditeľná kvôli aktuálnej mierke, ale je zaškrtnutá v strome legendy.

Moja otázka: Existuje iný spôsob, ako skontrolovať, či je vrstva s viditeľnosťou na základe mierky mimo viditeľného dielika, potom porovnať mierku mapy s minimumScale () a maximumScale () každej vrstvy?


Môžete použiťiface.mapCanvas (). layers ()metóda, ktorá vám dá v TOC iba začiarknuté vrstvy, t. j. nie je potrebné opakovať všetky vrstvy mapy.

Potom by ste mali prechádzať skontrolovanými vrstvami a vyhodnotiť, či ich viditeľnosť na základe mierky obsahuje aktuálnu mierku mapy, napríklad takto:

canvas = iface.mapCanvas () pre vrstvu v canvas.layers (): if layer.hasScaleBasedVisibility (): if layer.maximumScale ()> canvas.scale () a layer.minimumScale () 

Nie som si vedomý inej metódy PyQGIS, ako to urobiť.


Pozri si video: QGIS Sochi 01 extract OSM (Október 2021).