Querying the value of a raster at a specified point

A common remote sensing operation is to get the raster data value at a specified coordinate. In this recipe, we'll query the data value in the center of the image. It so happens that the raster layer will calculate the center coordinate of its extent for you.

Getting ready

As with many recipes in this chapter, we will again use the SatImage raster, which is available at https://geospatialpython.googlecode.com/files/SatImage.zip.

Place this raster in your /qgis_data/rasters directory.

How to do it...

We will load the layer, get the center coordinate, and then query the value. To do this, we need to perform the following steps:

  1. First, load and validate the layer:
    rasterLyr = QgsRasterLayer("/qgis_data/rasters/satimage.tif", "Sat Image")
    rasterLyr.isValid()
    
  2. Next, get the layer's center point from its QgsRectangle extent object, which will return a tuple with the x and y values:
    c = rasterLyr.extent().center()
    
  3. Now, using the layer's data provider, we can query the data value at that point using the identify() method:
    qry = rasterLyr.dataProvider().identify(c, QgsRaster.IdentifyFormatValue)
    
  4. Because a query error won't throw an exception, we must validate the query:
    qry.isValid()
    
  5. Finally, we can view the query results, which will return a Python dictionary with each band number as the key pointing to the data values in that band:
    qry.results()
    
  6. Verify that you get the following output:
    {1: 17.0, 2: 66.0, 3: 56.0}
    

How it works...

This recipe is short compared to others, however, we have touched upon several portions of the PyQGIS raster API. First start with a raster layer and get the extents; we then calculate the center and create a point at the center coordinates, and lastly we query the raster at that point. If we were to perform this same, seemingly simple operation using the Python API of the underlying GDAL library, which does the work, this example would have be approximately seven times longer.

..................Content has been hidden....................

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