9 votos

¿Creando cientos de mapas que muestran diferentes capas pero la misma área utilizando QGIS?

Quiero crear mapas de ubicación de especies de aves para una sola área (y hay varias áreas). Hay muchas especies, cada una necesita un mapa individual, así que me enfrento a más de 100 mapas por área. ¿Hay alguna manera más allá de crear manualmente la misma extensión de mapa para cada especie? Me imagino que puedo manejar la visibilidad de especies específicas con un estilo basado en $ id = @atlasfeatureid, pero no me gustaría copiar y pegar el mismo rectángulo más de 100 veces para cada área.

3voto

Oto Kaláb Puntos 121

Yo tenía el mismo problema antes. Lo resuelto por los siguientes pasos:

  • crear una tabla con la lista de capas de identificación (layer_id)
  • utilice esta tabla como un atlas covarage capa
  • establecer la regla basada en la simbología de las capas: @layer_id = @atlas_pagename
  • vista previa del atlas

Para automatizar este proceso escribí un script de python que toma el grupo de capas, crear una .csv tabla con capa de identificación de cada capa en el grupo, establecer el adecuado de la simbología y de la tabla de carga de proyecto. Usted tiene que sólo manualmente grupo de su especie capas y definir su group_name y csv_path de entrada en el script y ejecutarlo en la consola de python. A continuación, utilice la tabla creada como atlas covarage capa.

Las capas agrupadas:

enter image description here Secuencia de comandos para la consola de Python:

group_name = "group1"
csv_path = "output/csv/path/table.csv"

root = QgsProject.instance().layerTreeRoot()

group_layers = []
for i in root.findGroup(group_name).findLayers():
    group_layers.append(i.layerId())
    layer = i.layer()
    symbol = QgsSymbol.defaultSymbol(layer.geometryType())
    renderer = QgsRuleBasedRenderer(symbol)
    root_rule = renderer.rootRule()
    rule = root_rule.children()[0]
    rule.setLabel("Atlas")
    rule.setFilterExpression('@layer_id = @atlas_pagename')
    layer.setRenderer(renderer)

with open(csv_path, "w") as f:
    for item in group_layers:
        f.write("%s\n" % item)

uri = (
    'file://{}?type=csv&useHeader=No&geomType=none'
).format(csv_path)

layer = iface.addVectorLayer(
    uri, group_name + "_list", "delimitedtext"
)

https://github.com/kalab-oto/QGIS-Microtools/blob/master/console_scripts/layer_list_csv.py

Tabla generada:

enter image description here Atlas de vista previa: enter image description here

0voto

Graham Dumpleton Puntos 23711

Una idea si tienes la ocurrencia de la especie en una cuadrícula. crear una sola tabla con la lista de todas las especies. En el diseño, configure la función Atlas con esa tabla. Luego vaya a las propiedades de la capa de la especie y en Simbología defina su tipo de leyenda y luego para la columna una expresión como esta

 eval( '"' || attribute( @atlas_feature , 'specie') || '"')
 

0voto

Dawid Zyskowski Puntos 36

Ok, gracias a todos, parece que por ahora no hay una manera rápida de hacer clic aquí y allá y esto requiere algunos ajustes manuales con las capas de una forma u otra. Como ahora, el flujo de trabajo más rápido es: 1. asignar ID individual a cada especie en una capa 2. asignar visibilidad basándose en la función del atlas actual número 3. crear una capa de extensión de atlas con un solo polígono pegado y copiado en el mismo lugar tantas veces como allí son especies

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