# Method to buffer points using euclidean distance and change in elevation [closed]

I am looking for a method to buffer a set of thousands of points with known elevations by 150m Euclidean distance, and then limit the area in each buffer to 50m higher or lower in elevation than each point using a DEM.

What methods and tools (proprietary or open-source) would you recommend with the goal of developing an automatic workflow, tool or script to create a Euclidean buffer with an elevation condition?

## closed as too broad by PolyGeo♦Jan 30 '17 at 20:23

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

• Do buffers overlap? – FelixIP Jan 30 '17 at 19:10
• What is the most likely GIS software that you will use? What have you already tried? – PolyGeo Jan 30 '17 at 20:31
• Buffers may overlap since it is a large point dataset, and the decision to use 150m in Euclidean distance may be extended to a larger buffer at some point. I have been looking at options in ArcGIS but also standard QGIS operations. Ultimately I would be interested in developing and automating the workflow using Python. – h.Augustin Jan 31 '17 at 11:27

I would take a look at R package `gDistance` package. It has the function `costDistance` which makes rasters of cost distance which can then be transform to buffer manually. It may not be that efficient, but until somebody here propose a better option, here is what I would (approximately) do:
1. take one point independently and extract your DEM a little over your wanted 150m (so a simple buffer, without that elevation managment). (`gdal_translate` with the `te` parameter is super efficient for that.
3. Call the `costDistance` function on it (you'll have to run `transition` first) making sure it know what NA are so it goes around it.
4. Take the raster it produce and filter it (e.g. `raster<150`)