# Getting latitude and longitude raster from DEM using ArcGIS Desktop?

Could anyone provide with a way to calculate latitude and longitude from DEM, for each raster cell?

In previous posts about this, I have seen that some suggest calculating lat and long in certain sample point locations. This doesn't work for me, as I need complete rasters.

Also, I use ArcGIS 10.2 version so \$\$XMAP, \$\$YMAP does not work for me.

Is there any other way inside ArcGIS to get lat and long?

• marika, you can convert your raster to points and than use the x and y of each point representing each raster cell. – Gorgens Mar 13 '15 at 15:57
• Another option is to export your raster as asc and use the coordinates reference and the pixel size to get all your cells. – Gorgens Mar 13 '15 at 15:58
• The coordinate boundary (ulx/uly/lrx/lry) is a property of any raster. Coordinate location not generally seen as a property of individual cells, per se, since such an extraction would increase the size manifold. What are you going to do with this information, and in what programming language? – Vince Mar 13 '15 at 16:01
• I want to use latitude and longitude as explanatory variables in a multiple regression model. I will use R. – Maria Karypidou Mar 13 '15 at 16:16
• read the dem with raster() and use functions coordinates, xFromCol, yFromRow, xyFromCell etc. – mdsumner Mar 13 '15 at 19:50

Per Bill Huber's (whuber) clever workaround:

xmap = (FlowAccumulation(1) + 0.5)*cellsize + xmin

ymap = (FlowAccumulation(64) + 0.5)*cellsize + ymin

Curtis Price has developed a python script to do this:

``````from arcpy.sa import *
from arcpy import env as E
# Calculate \$\$NROWS and \$\$NCOLS from current environment
cellSize = float(E.cellSize)
nrows = int((E.extent.YMax - E.extent.YMin) / float(E.cellSize))
ncols = int((E.extent.XMax - E.extent.XMin)  / float(E.cellSize))
# Bill Huber's method for \$\$XMAP and \$\$YMAP: "1" flows "right", "64" (63+1) flows "up"
tmpg = CreateConstantRaster(1)
xmap = (FlowAccumulation(tmpg) + 0.5) * cellSize + E.extent.XMin
ymap = (FlowAccumulation(tmpg + 63) + 0.5) * cellSize + E.extent.YMin
# applying the same method for \$\$ROWMAP and \$\$COLMAP
colmap = Int(FlowAccumulation(tmpg))
rowmap = Int(FlowAccumulation(tmpg + 3))  # flowdir "4" is "down" (top row is 0)
``````

You can also still use \$\$XMAP/\$\$YMAP in ArcGIS 10+ by using the old arcgisscripting API

``````import arcgisscripting
gp = arcgisscripting.create(9.3) #This works in ArcGIS 10
xmap='path/to/output'
ymap='path/to/output'

#you need to set appropriate extent and cellsize gp environments
result=gp.SingleOutputMapAlgebra('\$\$XMAP', xmap)
result=gp.SingleOutputMapAlgebra('\$\$YMAP', ymap)
``````
• In the first example, what the (1) and (64) stand for? – NewAtGis Jun 4 '15 at 16:59
• @NewAtGis They are direction constants/codes. See the help - resources.arcgis.com/en/help/main/10.1/index.html#/… – user2856 Jun 5 '15 at 3:03
• thanks @Luke. I got the FlowAcc rasters, but I do not know how to put to work that formula in the RasterCalculator. I mean, I have read the arcGIS documentation, and I got the idea of the direction codes. But, once I got the FlowAcc rasters, there is some other step to take before using the formula? – NewAtGis Jun 5 '15 at 7:31
• @NewAtGis You don't need to create flow accumulation rasters. Just open the raster calculator, set your environment (extent, snap raster and cell size) appropriately and enter the expression. ie `(FlowAccumulation(1) + 0.5)* cellsize + xmin` substituting cell size and xmin with the actual values. – user2856 Jun 5 '15 at 9:22
• Thanks @Luke. I have circumvented the problem, as I described here: gis.stackexchange.com/questions/149736/… – NewAtGis Jun 5 '15 at 9:31

Another approach with R

``````library(raster)
r <- raster('dem.tif')
lon <- init(r, 'x', filename='lon.tif')
lat <- init(r, 'y', filename='lat.tif')
``````
• Your "another approach with R" was not tested. It doesn't work. See my "Editing Note 2". – xunilk Mar 18 '15 at 9:35
• That probably means that you are using an old version of R/raster. – Robert Hijmans Mar 19 '15 at 15:59