I have a process which needs to read in an Image's GeoTransform Array, and convert it to the Bounding Box

i.e. If the Input is:

   7.8087700868360430e+05,  9.9974951285737870e+00,  0.0000000000000000e+00,  
   2.0276558410121971e+06,  0.0000000000000000e+00, -1.0000024189695811e+01

I need the Output as

Upper Left:780877.009, 2027655.841
Lower Left:780877.009, 2010425.799
Upper Right:799692.295, 2027655.841
Lower Right:799692.295, 2010425.799

I see that you can do this using GDAL's Python bindings, but I need to do this without any dependencies.

Is there a formula that could be applied to get the expected Bounding Box?


You need both the geotransform and the number of rows and columns. If you look at your output, you'll see that a couple of elements of the geotransform correspond to the UL coordinates. So to get the extent you can just do

xmin = min(geo_t[0], geo_t[0] + x_size * geo_t[1])
xmax = max(geo_t[0], geo_t[0] + x_size * geo_t[1])
ymin = min(geo_t[3], geo_t[3] + y_size * geo_t[5])
ymax = max(geo_t[3], geo_t[3] + y_size * geo_t[5])

where x_size and y_size are the columns and rows, and geo_t is a (zero-indexed) array with the geotransform. In fact, this is valid Python code ;-)

As per @user30184 if there is a rotation in the geotransform, you need to take it into account. The formula for getting the coordinates of (x_coord, y_coord) as a function of the row/column pixel locations( x_pix, y_pix) is

x_coord = geo_t[0] + x_pix*geo_t[1] + y_pix*geo_t[2]
y_coord = geo_t[3] + y_pix*geo_t[5] + x_pix*geo_t[4]

In the question above, elements 2 and 4 are 0, so the first set of equations still hold.

  • It is not quite so simple if the image is rotated and the two corresponding parameters are not zeroes. – user30184 Aug 3 '18 at 11:47
  • As @user30184 says, since there is are rotation parameters geo_t[2] & geo_t[4] too need to be used. – Devdatta Tengshe Aug 3 '18 at 12:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.