6 votos

¿Cómo utilizar QGIS Atlas con múltiples capas/archivos por cobertura?

Tengo 30 conjuntos de datos de contorno que se sitúan en la misma extensión. Cada conjunto de contornos está en su propio archivo. También tengo 30 polígonos de extensión para cada conjunto de contornos como un archivo separado.

¿Puedo utilizar el Atlas para generar una serie de mapas, cada uno de los cuales muestra un "par" de conjuntos de datos, es decir, las curvas de nivel y la extensión de cada par en la misma extensión?

Todo lo que he leído indica que se puede hacer un bucle a través de las características de una capa con Atlas, pero no a través de múltiples capas. ¿Podría solucionar esto añadiendo una "lista de visualización de capas" como atributo de la capa de cobertura?

¿Tal vez con un script de python?


Actualización:

Esto se remonta a una pregunta anterior de hace unos años que hice y para la que no encontré solución. QGIS ha avanzado unas cuantas versiones desde entonces, así que espero que haya una solución actualizada, o que alguien pueda proporcionar orientación para desarrollar un script.

Aviso previo: soy geólogo, ¡las capas de roca son mi forma de pensar! :-)

Tengo un proyecto para el que quiero elaborar una serie de mapas (un atlas). Cada mapa cubrirá exactamente la misma extensión, pero mostrará las propiedades de una capa de roca diferente. En este ejemplo, contornos de la profundidad hasta la cima de 50 capas de roca diferentes.

El resultado deseado sería 50 mapas, con la misma extensión, con diferentes capas (o conjunto de capas) mostradas

Para añadir más complejidad, me gustaría añadir "conjuntos" de capas. La capa de roca 1 también tiene shapefiles únicos que muestran la capa de polígono de extensión y también una capa de label_point.

Método actual

He intentado fusionar todas las capas de contorno en un archivo shape y utilizarlo como capa de cobertura del Atlas. Este método no produce el resultado deseado porque:

  • No puedo filtrar la capa combinada para mostrar sólo una capa (no una característica) a la vez.
  • ¡Puedo filtrar usando esta expresión de estilo basada en reglas en la capa combinada! (donde unidad es el nombre de la capa de roca):

attribute($currentfeature , 'unit') = attribute(@atlas_feature, 'unit')

  • Problema crítico: obtengo una página por contorno individual (es decir, una por rasgo, por lo que hay cientos de páginas por capa de roca). No puedo averiguar cómo filtrar para obtener sólo una página por capa de roca (o si eso es posible).
  • No puedo fusionar los diferentes "conjuntos" (puntos, polilíneas, polígonos). Solución: podría fusionar y filtrar en función del tipo de geometría, igual que en el caso anterior.
  • Fusionar 50 archivos de entrada en un shapefile maestro parece un poco redundante; seguramente un bucle de código más podría anular la necesidad de hacerlo. Solución: utilice el marco de procesamiento para combinar los archivos de entrada.

6voto

sashkello Puntos 325

Desde QGIS 2.12, con la introducción de las propiedades definidas por los datos en la opción "bloquear capas para el mapa", en las propiedades de los elementos del mapa, puedes hacer lo que buscas. Sólo tiene que crear la capa de cobertura adecuada, con la información de los extensiones, sino también de las capas a "imprimir".

Crear los preajustes de capa

Puedes "guardar" el estado actual (visible o no visible) de tus capas como presets. Sólo tienes que crear la combinación deseada y pulsar el icono del ojo en el panel de capas, y elegir "añadir preajuste".

Básicamente, tendrás que crear un preset para cada contorno, con esa capa visible (emparejada con otras capas si quieres). Este será su "conjunto de capas".

Dé a sus preajustes nombres memorables, o simplemente opte por algún tipo de secuencia.

Creación de la capa de cobertura.

Ahora tendrás que crear una capa de polígonos con todas las combinaciones posibles entre los polígonos de extensión, y todos los preajustes. Esto significa que terminará con cierta redundancia. Usted tendrá que replicar cada polígono de extensión para cada preset. Algo así:

polígono 1, preajuste a polígono 1, preajuste b ... polígono 50, preset a polígono 50, preajuste b

Usted puede hacer esto manualmente con copiar y pegar, o bien crear algún tipo de secuencia de comandos, pero yo diría que su mejor y más fácil manera sería el uso de Spatialite o Postgis base de datos. Sólo tienes que importar los polígonos allí, y crear una nueva tabla no espacial con todos los nombres de presets. A continuación, crear una vista que devuelve todas las combinaciones.

SELECT f.*, g.preset_name
FROM polygons_extent as f, presets as g

Hacer que funcione

Añada la nueva capa o vista a QGIS, utilícela como capa de cobertura en la configuración del atlas y utilice el atributo preset_name en las propiedades definidas por los datos en la opción "bloquear capas para el mapa".

2voto

Ivan Petrushev Puntos 158

Necesita un bucle en un bucle, esto no es una posibilidad fuera de la caja en el Compositor de Impresión de QGIS sin un script de Python, o alguna repetición manual en el Compositor de Impresión.

La forma manual podría ser utilizar 30 páginas en un compositor. Esto se establece en la pestaña de composición. Si utiliza una línea de alineación (la roja), podría colocar los mapas alineados. Para cada mapa tienes que "Bloquear capas para el elemento de mapa" para el contorno que quieras para el mapa. De este modo obtendrá 30 mapas en un solo PDF. Sólo tendrá que configurar el bucle de cobertura del Atlas para uno de los mapas.

Esto puede ser demasiado trabajo manual para una sola vez, pero si necesita imprimir esta configuración varias veces, puede valer la pena intentarlo.

map

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