Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I am trying to get the X, Y coordinates of all the cells of a raster file, using Python 2.6 and ArcGIS 10.0.

I would like to get the X, Y coordinates in the center of the cell.

Is there any way to do so?

share|improve this question
    
the raster is equally spaced, so you just need to know the max X, min X, max Y, max Y and the raster resolution value. –  A.R Nov 27 '12 at 8:51
    
Hasn't ESRI retained analogs of $$XMap and $$YMap in Python yet? See this forums post for a discussion of the issue and an expeditious workaround. –  whuber Nov 27 '12 at 17:47
    
Finally I tried the code of Marcin. It was really useful... –  irini Nov 29 '12 at 10:26
    
Thank you all very much for your time!!! –  irini Nov 29 '12 at 10:26
add comment

2 Answers 2

If you convert the raster to points add the X,Y fields and then use the calculate geometry function to add values to the X and Y fields.

share|improve this answer
    
I am actually programming in Python language and I would like to do the former procedure in Python. –  irini Nov 27 '12 at 7:55
1  
so maybe you could have a look at arcpy.RasterToPoint_conversion(), arcpy.AddFeild() and arcpy.UpdateCursor() –  dango Nov 27 '12 at 9:42
add comment

You can use the arcpy module's GetRasterProperties command to get the xmin, xmax, ymin and ymax coordinates for the raster. By converting these values, which are returned using getOutput as unicode, to floats simple arithmetic can be performed to give the center coordinates of the raster file.

import arcpy

path = r'C:\dem\profile-dtm_57583\grids\ns78ne1'

xmin = arcpy.GetRasterProperties_management(path,'LEFT')
xmax = arcpy.GetRasterProperties_management(path,'RIGHT')
ymin = arcpy.GetRasterProperties_management(path,'BOTTOM')
ymax = arcpy.GetRasterProperties_management(path,'TOP')

centerX = (float(xmax.getOutput(0)) + float(xmin.getOutput(0))) / 2
centerY = (float(ymax.getOutput(0)) + float(ymin.getOutput(0))) / 2

print centerX, centerY

EDIT:

To get the coordinates of every cell in the raster, you can take the raster cellsize, and use it as a step to iterate through all the values from xmin to xmax and ymin to ymax to get pass through the coordinates for each cell.

#assuming square cells
cellsize = arcpy.GetRasterProperties_management(path,'CELLSIZEX')
cellsize = int(cellsize.getOutput(0))

for x in xrange(int(xmin.getOutput(0)), int(xmax.getOutput(0)), cellsize):
    for y in xrange(int(ymin.getOutput(0)), int(ymax.getOutput(0)), cellsize):
        print x,y

Note this code will take a long time to run with this print statement as it must print a new line for every cell in your raster.

Another method for this would be to read the convert the raster to an ASCII raster and read it into a 2D numpy array. The array indexes would then correspond to the coordinates of the cells.

share|improve this answer
    
I have a 5x5 grid of cells. With the help of the above code we can get the X, Y coordinates location of the whole cell, but what if we need to get the X, Y coordinates of every cell? –  irini Nov 27 '12 at 9:41
    
I have updated the answer to give coordinated for each cell. –  sgrieve Nov 27 '12 at 9:53
    
Would you please explain me how the 2D numpy array indexes correspond to the coordinates of the cells? I have created this numpy array for my raster file... and I have already read every cell value! Is there any extra command to read at the same time the coordinates of every cell? But I am also wondering whether I can obtain the coordinates in the center of every grid cell. I really thank you very much for your time!!! –  irini Nov 27 '12 at 10:31
    
To find the center of a cell simply add half the cell size to each x and y coordinate. The numpy array index will count from 0,0 but you can translate that index to your coordinate system by adding xmin, ymin to each index value. –  sgrieve Nov 27 '12 at 10:56
    
But how can I get the numpy array index? and how can I obtain the X, Y coordinates from the index? i am a really new user in Python scripting... please excuse me for my really stupid queries... –  irini Nov 27 '12 at 12:22
show 1 more comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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