Geographic Information Systems Asked by matandked on July 29, 2021
I need to load a raster file from the provided file path. I wish to use it further in the Raster Calculator.
I wrote a function which converts string (I assume it is a file path) to a raster object.
from qgis.core import QgsRasterLayer
from PyQt4.QtCore import QFileInfo
def StringToRaster(raster):
# Check if string is provided
if isinstance(raster,basestring):
fileInfo = QFileInfo(raster)
baseName = fileInfo.baseName()
path = fileInfo.filePath()
if (baseName and path):
raster = QgsRasterLayer(path, baseName)
if not raster.isValid():
print "Layer failed to load!"
return
else:
print "Unable to read basename and file path - Your string is probably invalid"
return
return raster
I have no idea why, but raster.isValid() always returns False.
When I take exactly the same path which I provided to my function, I am able to add this layer to QGIS from the interface (from the menu Layer –> Add layer —> Add raster layer).
My layer is a Float32 GeoTIFF with one band only.
If you keep getting non valid layers, even defining them correctly, you're probably missing the QGIS prefix definition in your script (in case that you work out of QGIS).
qgis_prefix="/usr"
QgsApplication.setPrefixPath(qgis_prefix, True)
QgsApplication.initQgis()
If you work on Windows, your qgis_prefix should be something like this:
qgis_prefix="C:Program FilesQGIS Wienaappsqgis"
Now your raster layer should be valid.
Correct answer by Germán Carrillo on July 29, 2021
This code works in my Python Console:
from qgis.core import QgsRasterLayer
from PyQt4.QtCore import QFileInfo
def StringToRaster(raster):
# Check if string is provided
fileInfo = QFileInfo(raster)
path = fileInfo.filePath()
baseName = fileInfo.baseName()
layer = QgsRasterLayer(path, baseName)
QgsMapLayerRegistry.instance().addMapLayer(layer)
if layer.isValid() is True:
print "Layer was loaded successfully!"
else:
print "Unable to read basename and file path - Your string is probably invalid"
raster = '/home/zeito/Desktop/output2.tif'
StringToRaster(raster)
After running the code in the Python Console of QGIS:
For those who will work with QGIS 3:
from qgis.core import QgsRasterLayer
from PyQt5.QtCore import QFileInfo
def StringToRaster(raster):
# Check if string is provided
fileInfo = QFileInfo(raster)
path = fileInfo.filePath()
baseName = fileInfo.baseName()
layer = QgsRasterLayer(path, baseName)
QgsProject.instance().addMapLayer(layer)
if layer.isValid() is True:
print ("Layer was loaded successfully!")
else:
print ("Unable to read basename and file path - Your string is probably invalid")
raster = '/home/zeito/Desktop/output2.tif'
StringToRaster(raster)
Answered by xunilk on July 29, 2021
The QGIS documentation also proposes a second way, I found very helpful:
[R]aster layers can be loaded using the addRasterLayer function of the
QgisInterface
:
iface.addRasterLayer("/path/to/raster/file.tif", "layer name you like")
Answered by Jeremy on July 29, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP