Converting a map coordinate to a pixel location

When you receive a map coordinate as user input or from some other source, you must be able to convert it back to the appropriate pixel location on a raster.

Getting ready

We will use the SatImage raster available at:

https://geospatialpython.googlecode.com/files/SatImage.zip

Place this raster in your /qgis_data/rasters directory.

How to do it...

Similar to the previous recipe, we will define a function, extract the GDAL GeoTransform object from our raster, and use it for the conversion.

  1. Start QGIS.
  2. From the Plugins menu select Python Console
  3. We need to import the gdal module:
    from osgeo import gdal
    
  4. Then, we need to define the reusable function that does the coordinate to pixel conversion. We get the GDAL GeoTransform object containing the raster georeferencing information and the map x,y coordinates:
    def world2Pixel(geoMatrix, x, y):
      ulX = geoMatrix[0]
      ulY = geoMatrix[3]
      xDist = geoMatrix[1]
      yDist = geoMatrix[5]
      rtnX = geoMatrix[2]
      rtnY = geoMatrix[4]
      pixel = int((x - ulX) / xDist)
      line = int((y - ulY) / yDist)
      return (pixel, line)
    
  5. Next, we open the source image:
    src = gdal.Open("/qgis_data/rasters/satimage.tif")
    
  6. Now, get the GeoTransform object:
    geoTrans = src.GetGeoTransform()
    
  7. Finally, perform the conversion:
    world2Pixel(geoTrans, -89.59486002580364, 30.510227817850406)
    
  8. Verify your output is the following:
    (1296, 1346)
    

How it works...

This conversion is very reliable over small areas, but as the area of interest expands you must account for elevation as well, which requires a far more complex transformation depending on how an image was generated.

Note

The following presentation from the University of Massachusetts does an excellent job of explain the challenges of georeferencing data:

http://courses.umass.edu/nrc592g-cschweik/pdfs/Class_3_Georeferencing_concepts.pdf

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

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