Using expression-based labels

Expressions are a kind of mini-programming language or SQL-like language found throughout different QGIS functions to select features. One important use of expressions is to control labels. Maps easily become cluttered if you label every single feature. Expressions make it easy to limit labels to important features. You can filter labels using expressions from within Python, as we will do in this recipe.

Getting ready

You will need to download the zipped shapefile and decompress it to a directory named ms in your qgis_data directory from the following:

https://geospatialpython.googlecode.com/files/MS_UrbanAnC10.zip

How to do it...

We'll use the QGIS PAL labeling engine to filter labels based on a field name. After loading the layer, we'll create our PAL settings and write them to the layer. Finally, we'll add the layer to the map. To do this, we need to perform the following steps:

  1. First, we'll set up the path to our shapefile:
    pth = "/Users/joellawhead/qgis_data/ms/MS_UrbanAnC10.shp"
    
  2. Next, we'll load our layer:
    lyr = QgsVectorLayer(pth, "Urban Areas", "ogr")
    
  3. Now, we create a labeling object and read the layer's current labeling settings:
    palyr = QgsPalLayerSettings()
    palyr.readFromLayer(lyr)
    
  4. We create our expression to only label the features whose population field is greater than 50,000:
    palyr.fieldName = 'CASE WHEN "POP" > 50000 THEN NAME10 END'
    
  5. Then, we enable these settings:
    palyr.enabled = True
    
  6. Finally, we apply the labeling filter to the layer and add it to the map:
    palyr.writeToLayer(lyr)
    QgsMapLayerRegistry.instance().addMapLayer(lyr)
    

How it works...

While labels are a function of the layer, the settings for the labeling engine are controlled by an external object and then applied to the layer.

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

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