QGIS – How to Load a Raster Layer at the Top of the Table of Contents

layerspyqgispythonqgistable of contents

The following code inserts my new_layer just above the active layer in the QGIS ToC.

new_layer = iface.addRasterLayer(...) 

Instead, I'd like my new_layer to be inserted at the top of the QGIS ToC.

Do you know how can I do it?

Best Answer

By using the new Layer tree (aka legend or ToC) added by Martin Dobias since QGIS v.2.4, you can load a layer to the top of the ToC following these steps:

  1. Get a reference of the layer tree

    root = QgsProject.instance().layerTreeRoot()
    
  2. Create the layer object

    from PyQt4.QtCore import QFileInfo
    fileName = "/path/to/raster/file.tif"
    fileInfo = QFileInfo(fileName)
    baseName = fileInfo.baseName()
    mylayer = QgsRasterLayer(fileName, baseName)
    
  3. Add the layer to the QGIS Map Layer Registry

    QgsMapLayerRegistry.instance().addMapLayer(mylayer, False)
    
  4. Insert the layer at the top of the ToC (position 0)

    root.insertLayer(0, mylayer)
    

That's it!