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.
Respuestas
¿Demasiados anuncios?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:
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:
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') || '"')
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