0

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:

<GeoTransform>  
   7.8087700868360430e+05,  9.9974951285737870e+00,  0.0000000000000000e+00,  
   2.0276558410121971e+06,  0.0000000000000000e+00, -1.0000024189695811e+01
</GeoTransform>

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?

Devdatta Tengshe
  • 41,311
  • 35
  • 139
  • 263
  • See here: https://www.gdal.org/gdal_datamodel.html#gdal_datamodel_dataset_gtm

    Replace "Xpixel" and "Yline" with either 0, the image width, or the image height, depending on which corner you're trying to find the coordinates of.

    – mikewatt Aug 03 '18 at 19:50

1 Answers1

1

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.

Jose
  • 3,332
  • 20
  • 21