2 votos

Revisar capas con visibilidad basada en escala para visibilidad en QGIS

Estoy escribiendo un método de Python al que quiero conectar el evento de clic del mouse. El método selecciona objetos de capas que satisfacen ciertas condiciones. Quiero seleccionar de cualquier capa visible que tenga características en la extensión de mapa actual.

Para evaluar qué capa es visible, verifico la propiedad:

QgsProject.instance().layerTreeRoot().findLayer(layer.id()).isVisible()

Hay algunas capas con visibilidad dependiente de la escala. No quiero seleccionar objetos de capas que no son visibles debido a la escala de mapa actual.

isVisible() en la línea de código anterior devuelve True, incluso si la capa no es visible debido a la escala actual, pero está marcada en el árbol de leyendas.

Mi pregunta: ¿hay otra forma de verificar si una capa con visibilidad basada en la escala está fuera del intervalo de escala visible, además de comparar la escala del mapa con minimumScale() y maximumScale() de cada capa?

4voto

Elliott Maynard Puntos 11

Puede usar el método iface.mapCanvas().layers(), que le proporciona solo las capas seleccionadas en la tabla de contenido, es decir, no es necesario iterar a través de todas las capas del mapa.

Luego, debe iterar a través de las capas seleccionadas para evaluar si su visibilidad basada en escala contiene la escala actual del mapa, así:

canvas = iface.mapCanvas()
for layer in canvas.layers():
    if layer.hasScaleBasedVisibility():
        if layer.maximumScale() > canvas.scale() and layer.minimumScale() < canvas.scale():
            print "¡La capa",layer.name(),"es visible!"
    else:
            print "¡La capa",layer.name(),"es visible!"

No conozco otro método de PyQGIS para hacer eso.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X