Using SVG for layer symbols

Scalable Vector Graphics (SVG) are an XML standard that defines vector graphics that can be scaled at any resolution. QGIS can use SVG files as markers for points. In this recipe, we'll use Python to apply one of the SVG symbols included with QGIS to a point layer.

Getting ready

For this recipe, download the following zipped point shapefile layer from https://geospatialpython.googlecode.com/files/NYC_MUSEUMS_GEO.zip.

Extract it to your qgis_data directory.

How to do it...

In the following steps, we'll load the vector layer, build a symbol layer and renderer, and add it to the layer, as follows:

  1. First, we'll define the path to the shapefile:
    src = "/Users/joellawhead/qgis_data/NYC_MUSEUMS_GEO/NYC_MUSEUMS_GEO.shp"
    
  2. Next, we'll load the layer:
    lyr = QgsVectorLayer(src, "Museums", "ogr")
    
  3. Now, we define the properties of the symbol, including the location of the SVG file as a Python dictionary:
    svgStyle = {}
    svgStyle['fill'] = '#0000ff'
    svgStyle['name'] = 'landmark/tourism=museum.svg'
    svgStyle['outline'] = '#000000'
    svgStyle['outline-width'] = '6.8'
    svgStyle['size'] = '6'
    
  4. Then, we create an SVG symbol layer:
    symLyr1 = QgsSvgMarkerSymbolLayerV2.create(svgStyle)
    
  5. Now, we change the layer renderer's default symbol layer:
    lyr.rendererV2().symbols()[0].changeSymbolLayer(0, symLyr1)
    
  6. Finally, we add the layer to the map in order to view the SVG symbol:
    QgsMapLayerRegistry.instance().addMapLayer(lyr)
    

How it works...

The default SVG layers are stored in the QGIS application directory. There are numerous graphics available that cover many common uses. You can also add your own graphics as well. The following map image shows the recipe's output:

How it works...
..................Content has been hidden....................

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