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 have an ArcMap 10 project with multiple layer groups. One layer is a raster DEM, another layer group is a bunch of vector shapefiles (including points, lines and polygons). The client wants all vector data to contain Z values.

Populating the attribute tables for the vector data with X and Y values is easy enough. But how do I populate the Z values? Is there a way that I can use Field Calculator to "grab" the height values from the DEM layer for each vector feature? I should add that we don't have a licence for the 3D Analyst or Spatial Analyst extensions.

Many thanks for helping a newbie out :)

share|improve this question

3 Answers 3

In ArcGIS, I've only ever done this with point vectors—I'm not sure how you'd do it with polygons or line features. Unfortunately you do need Spatial Analyst, though. There's a tool at Spatial Analyst Tools\Extraction\Extract Multi Values to Points and Extract Values to Points. Extract Multi Values to Points is better because it lets you rename the z field name that you are extracting your values to—Extract Values to Points doesn't let you do this. I have trouble doing this in ArcMap (the tool crashes), but it works fine in ArcCatalog.

The (free) Hawths Analysis Tools extension for ArcMap had an Intersect Point Tool but development of the extension was discontinued a couple of years ago. It's been superseded by the Geospatial Modelling Environment, which I've never used.

SAGA-GIS (freeware standalone software) has two functions at Shapes - Grid\Add Grid Values to Points and Shapes - Grid\Add Grid Values to Shapes that can probably do what you want. This is the description of the Add Grid Values to Shapes tool:

Spatial Join: Retrieves information from the selected grids at the positions of the shapes of the selected shapes layer and adds it to the resulting shapes layer. For points this is similar to 'Add Grid Values to Points' module. For lines and polygons average values will be calculated from interfering grid cells. For polygons the 'Grid Statistics for Polygons' module offers more advanced options.

SAGA is your best bet, in my opinion.

Hope this helps!

share|improve this answer
Geospatial Modeling Environment has the following tools which may do the trick: 1) isectpolyrst (Intersect Polygons With Raster) 2) isectlinerst (Intersect Lines With Raster) 3) isectpntrst (Intersect Points With Raster). These tools can be a bit tempermental at times, however they will get the job done. –  Aaron Jun 27 '12 at 2:57

maybe you could use gdallocationinfo to retrive all the Z values by passing it the X,Y values. once you have the Z values use the feild calculator to add the Z value to the points that make up each feature. There would be some scripting involved but in theory this should work.

share|improve this answer

Depending on your units or required resolution, you could always export the DEM raster into a polygon shapefile, straight from the toolbox, and then do a spatial join - this is easiest for points. If you need Z values for lines or polygons, you would obviously need defined segments or subdivisions of polygons at each change in elevation as reported by the vectorized DEM grid. That can be done via standard geoprocessing tools and spatial joins, but you need to pay close attention to your resolution requirements and the amount of processing that a large dataset will consume.

share|improve this answer

Your Answer


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.