I have a point layer representing wells in a region. i am able to rasterize it and write the well density into the raster as integer, so far so good.

What I aim for is to create a raster with values in each cell that weight the distance to well-bearing-cells. Raster cells with wells in them (cell value > 1) should get assigned a value of 1.0, cells more than 100km away from well-cells should get a value of 2.0. The cells in between should get values ranging from 1.01 to 1.99, depending on their distance to a well-bearing-cell.

I am not the most profound GIS profesisonal and lack a good approach to that problem. The heat map function seems to go into that direction but i dont get into the finer controls of it. The "weigthed distance to power" tool could be it but if the regression is to a power than its a exponential function (I might be wrong here?) while I am looking to implement a linear function.

Hope someone might have an idea.

I am used to QGIS but getting into R, so I might be able to handle solutions going in that directions.

schematic abstraction of how the resulting raster should be composed. Cells with wells get value=0:

enter image description here

  • would you consider a GRASS GIS solution too?
    – SaultDon
    Mar 14, 2019 at 1:59
  • sure! every approach much appreciated!
    – a.urbanite
    Mar 14, 2019 at 2:19
  • you open to a python GDAL scripting solution? Mar 14, 2019 at 11:31
  • no, dont know a bit of python, unfortunately
    – a.urbanite
    Mar 15, 2019 at 9:12

1 Answer 1


It sounds like you want a simple cost-distance calculation. There are plenty of options available in QGIS such as r.walk.points (from GRASS in Processing Toolbox) and, if I have understood your use-case, then this is the option I'd go for out of nearly 10 algorithms available... so if it isn't quite right you can just type 'cost' into the Processing Toolbox search and check out the others).

r.walk.points calculates the accumulated cost distance from you points over a cost-surface raster. The cost will be uniform so you just need to create a raster of an appropriate extent and resolution to fit your costs above. I would go from 0.01 to 0.99 in the first instance and then add 1 to the result as this will keep your cost-surface simple. Note, if you are using only 2 decimal places for your cost, then the resolution will be about 1km. Travelling 100km has a cumulative cost of 1 (0 -1 or 1 - 2 - it's the same difference) so each cell has a cost of 0.01 @ 1km. If you want a raster resolution of 100m then you need a cost of 0.001.

  • ok that is a technically sound solution but it doesn't work in my use-case because my input is a point layer with lets say 100 features. The cell neighbouring a well-bearing cell should have value=0.001 but it ends up with e.g. 134.38 because the cost value adds up with the accumulated cost value of every other feature of the input-layer for that specific cell, or so i reckon.
    – a.urbanite
    Mar 15, 2019 at 9:20
  • Alright I got it! r.walk.points is hardcoded to use the time-based Langmuir 1984 algorithm, hence i ended up with these wrong high values. I got what i wanted with r.cost as it really only accumulates whats on the the cost surface. It also allows to set a maximum cumulative value. when i changed the incremental unit of the cost surface to 1 this maximum value could be easily calculated by maximum distance/cellsize. I used SAGA raster normalisation tool to rescale what was below the maximum to [0,1] and r.null to fill the cells above the maximum since r.cost leaves them as nodata. Thanks!
    – a.urbanite
    Mar 24, 2019 at 12:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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