In this chapter, we looked at many of the more advanced features of the QGIS Python API. We learned how the various built-in symbol layers can be used to draw geometries on the map, how to combine symbol layers in useful ways, and how to implement your own symbol layers using Python. We then looked at writing your own custom renderer to choose which symbol to use for each feature, and how to create your own custom map layer using Python code. We investigated the creation of custom map canvas items, and then saw how memory-based map layers can be used to programmatically add features to your map.
With this, we complete our tour of the more advanced aspects of PyQGIS. In the next chapter, we will learn how to create custom map tools that let the user select, add, edit, and delete features within a PyQGIS application.