Marco, there are not a lot of example resources for using the QGIS API, per se. You can find some snippets at plugins.qgis.org and in the PyQGIS Cookbook, and online tutorials like QGIS Workshop v1.0.0.
However, your best resource for examples are in existing, working plugins. Load up a bunch of plugins that seem to do what your wanting and do multi-file searches for QGIS API calls.
For example, searching the core plugins and user-installed plugins directories for QgsFeature, depending on your installed plugins, will bring up lots of examples of how to add/edit/manipulate features. Specifically look to fTools for good examples on working with vector features. (Best to learn from the masters than re-invent the wheel here.)
Concerning the pictures you want to add: are they just photos with EXIF data or they georeferenced rasters? With georef'd rasters, you can use the API to add it to the map canvas in QGIS (see this snippet). For getting a shape file of points for your EXIF-with-GPS data photos, look to the photo2shape plugin.
If your photos are just to be placed on print output, you will want to manipulate the Print Composer. Look to plugins that already do similar things with Composer for examples, like Atlas or EasyPrint. You'll want to work with addComposerPicture() in the QgsComposition class.
I suggest to add the polygon data twice, one filtered for the lakes and one filtered for the forests. Then you can arrange the three layers in the order you want.
If you want to specify the rendering order within one layer, Rightclick on the layer -> Properties
, Style
tab, Advanced
Icon -> Symbol levels
. there you can define the order of all categorized symbols.
EDIT
second try:
Create a Difference layer from river - lake with Vector -> Geoprocessing Tools -> Difference
, and put only that on top:
You could as well subtract the islands from the lake, and use my first attempt.
Best Answer
To this kind of interesting but recurring cartographic question, there is different approaches (some suggested in the comments):