Setting scale-based visibility for a layer

Sometimes, a GIS layer only makes sense when it is displayed at a certain scale, for example, a complex road network. PyQGIS supports scale-based visibility to programmatically set the scale range, in which a layer is displayed. In this recipe, we'll investigate scale-dependent layers.

Getting ready

You will need the sample census tract shapefile available as a ZIP file from https://geospatialpython.googlecode.com/files/GIS_CensusTract.zip.

Extract the zipped layer to a directory named census in your qgis_data directory.

How to do it...

We will load the vector layer, toggle scale-based visibility, set the visibility range, and then add the layer to the map. To do this, perform the following steps:

  1. First, we load the layer:
    lyr = QgsVectorLayer("/Users/joellawhead/qgis_data/census/GIS_CensusTract_poly.shp", "Census", "ogr")
    
  2. Next, we toggle scale-based visibility:
    lyr.toggleScaleBasedVisibility(True)
    
  3. Then, we set the minimum and maximum map scales at which the layer is visible:
    lyr.setMinimumScale(22945.0)
    lyr.setMaximumScale(1000000.0)
    
  4. Now, we add the layer to the map:
    QgsMapLayerRegistry.instance().addMapLayer(lyr)
    
  5. Finally, manually zoom in and out of the map to ensure that the layer disappears and reappears at the proper scales.

How it works...

The map scale is a ratio of map units to physical map size, expressed as a floating-point number. You must remember to toggle scale-dependent visibility so that QGIS knows that it needs to check the range each time the map scale changes.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset