5

Is there a way to get the XY cordinates of a pixel based on the array index using numpy/gdal?

I have a new set of extents for a raster and, based on these newer extents, want to determine the centroid of the raster (polygon). Wondering if there are any functions which can return the coordinate values based on the pixel indices.

Michael B
  • 777
  • 4
  • 22
VeeJay
  • 53
  • 1
  • 6
  • 1
    Welcome to GIS SE! As a new user be sure to take the [Tour]. You have tagged your question with [tag:arcgis-10.2] but make no mention of using that software in your question body. Would you be able to [edit] your question to explain the relevance of that tag (or remove it), please? – PolyGeo Aug 24 '15 at 08:42

2 Answers2

3

Try something like that, where dx,dy are number of indexes:

from osgeo import gdal
file = gdal.Open( ’file.tif ’)

def pixel(dx,dy):
    px = file.GetGeoTransform()[0]
    py = file.GetGeoTransform()[3]
    rx = file.GetGeoTransform()[1]
    ry = file.GetGeoTransform()[5]
    x = dx/rx + px
    y = dy/ry + py
    return x,y

GetGeoTransform() function returns tuple with 6 values (coordinates of origin, resolution, angle), more in documentation.

dmh126
  • 6,732
  • 2
  • 21
  • 36
2

Gdal probably has a handy function. Have you looked at these links?

But knowing that the header of the image contains the bounding coordinates and projection information, you could calculate them yourself (not recommended unless you enjoy learning things the hard way). EX: I knew my pixel size was 30m. For point 3,4 from the origin it's simple algebra: 3x30 +/- Origin's X, 4x30 +/- Origin's Y Caveats:

  • assumes you're nowhere near zone boundaries
  • not very accurate beyond locating the right pixel
  • remember to deal with negative coordinates properly (the +/- in the example)
Clay
  • 512
  • 3
  • 14