There was a very interesting feature in Map Book plugin for ArcGIS which was the possibility of not including in the resulting map book those pages where there's no feature from the layer or layers you want to map.

I've been reading QGIS documentation but I can't find an equivalent feature in Atlas tool. Is there any? Or maybe some trick to get this?

  • If you create a new layer by selecting only those sites you wish to create an atlas with, and use that as your coverage layer would that not be a similar feature? you wouldn't be getting any blank pages then. Commented Oct 27, 2016 at 13:44
  • But that means I cannot reuse that coverage layer for other atlas. And furthermore it would not be an option when using symbology based on rules where rules include a link to the feature mapped in a page.
    – DMS02
    Commented Oct 27, 2016 at 13:54
  • You wouldn't be using the coverage layer to show data, only to create the pages of the atlas. You would then check "Hidden coverage layer" to hide the new layer and retain the styling etc for the layer you wish to show. For the purpose of reusing this coverage layer, it could only be reused if you intend to show that exact atlas again. Commented Oct 27, 2016 at 14:01

3 Answers 3


Just to expand on gisnside's answer, some forethought is needed to know what atlas pages you wish to create. It can either be based on a field you already have, or you can create a new field and highlight specific rows you wish show in the atlas with a simple Boolean (integer: 1 = show, 0 = hide). Then when it come to creating the atlas, under 'Atlas Generation > Configuration', in the map composer, there is the option to filter. Check the box to enable and use the expression

'atlas_page_field' = 1

This will filter the atlas pages created to only those that meet the expression.


Depending on your data, you could imagine prior to exporting your atlas doing a spatial query to hard-code the information of the presence/absence of entities into your atlas index layer attribute table.

For example : - you select all index features that crosses your source data. - you update a column named FILTER with 1. - you filter your index layer where FILTER = 0 - The atlas won't use the filtered extents

For re-use, just point to another column like FILTER_01, FILTER_02, etc

I guess you can do something smarter with Expressions (I think I already saw something similar with a special extent based query), this is just a quick answer for your problem.

  • Maybe that's the clue: expressions. I'm thinking of ruled-based symbology linked to features in the coverage layer (adding to rules something like: attribute(@atlas_feature , 'coverage_field'). Maybe there's some way of including fields from other layers in the filter expression (something like "coverage_field" = other_layer.field)
    – DMS02
    Commented Oct 27, 2016 at 14:12
  • 1
    If found something similar to your answer : gis.stackexchange.com/questions/173399/…
    – gisnside
    Commented Oct 27, 2016 at 15:14
  • 1
    Some hints on expressions... maybe something usable here : CASE WHEN contains($geometry , centroid($atlasgeometry)) THEN my label END (source : lists.osgeo.org/pipermail/qgis-user/2014-March/026919.html). Alternates intersects(centroid($atlasgeometry), $geometry ) - within(centroid($atlasgeometry), $geometry ) - contains($geometry,centroid($atlasgeometry) ) Sorry if not appropriate, just hinting blindly :)
    – gisnside
    Commented Oct 27, 2016 at 15:38

I figured out how to do this.

You can include fields from other layers in the filter expression to get something like "coverage_field" = other_layer.field.

It's just a matter of combining this two functions:

 attribute (feature, attribute_name) 
 getFeature(layer, attribute, value)

to get this:

attribute(getFeature('otherLayer','otherLayer_field',"coverge_field"), 'otherLayer_mapped_field') IS  NOT NULL

Previously you must add a column to the layer you want to show and populate it with the intersecting coverage's feature field. This way you know what features lay within each coverage feature and you can filter them. If the getFeature function returns no feature, the attribute function will return NULL. And voilà.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.