This is probably a map algebra problem. I have a 2D map with values ranging 0.0 to 1.0 spread all over it. The algorithm that produces them is an application of the fractional Brownian motion. The map measures 101x101 pixels or cells.

My problem: I want to find in the map the regions (or islands) which values exceed a given threshold, e.g. 0.3 (we can call them the hotspots). I then want to calculate the number of pixels or cells that fall within the boundaries of that island. Given that there might be more than one island, I could end up with:

  1. Situation 1: 1 island with, say, 1000 pixels or cells;
  2. Situation 2: 2 islands with 500 pixels or cells each;
  3. Additional combinations.

Since I must be able to distinguish between the various situations, I was thinking of somehow weighing the total number of cells with respect to the number of islands. How could I do this, other than considering the average number of cells (which I see as a trivial solution)?

I am asking this since if I were to evaluate the impact of those hotspots on a system that is embedded in the map, there might be huge differences between having one big hotspot located in the center of the map and having multiple, although smaller, hotspots scattered all over the place.

Below is a visual example of what I mean by islands or regions.

enter image description here

  • 1
    You want to do this in any particular software?
    – dmh126
    Commented Nov 21, 2015 at 13:34
  • I am working in Python.
    – FaCoffee
    Commented Nov 21, 2015 at 13:52
  • would love to figure this out in postgis raster....!!! got any sample data you could post? Commented Nov 21, 2015 at 17:33
  • I have a bunch of csv files I can send over... would it work?
    – FaCoffee
    Commented Nov 22, 2015 at 11:21
  • 1
    @FC84 I would greatly appreciate it - I'm really trying to figure out PostGIS Raster and this looks like a great workflow to test it out... thank you! (sorry for the delay - holiday week off!) Commented Nov 28, 2015 at 20:41

1 Answer 1


I think the most simple way to do this is:

  1. Generate contours. You can do this in ArcGiS, QGIS with plugin or even with pure python (but you need to find a proper script or write it by yourself). Generate them with breaks 0.1, 0.2, 0.3 etc.
  2. Now all values with 0.3=< are surrounded by 0.3 value line features. Select these lines, create a new layer and convert this layer to polygon.
  3. Calculate the min. area of hotspot. Simply get a resolution of raster (V and H pixel size), calculate pixel area and multiply this value by number of pixels in hotspot you want.
  4. Iterate by features in your polygons created from 0.3 contour and check if area of feature is greater then a calculated value from point 3. If true, write it to new layer.

And now you should have a polygon layer with your "islands". If you need them as lines or points, simply convert to lines or get centroids.

This is the simple way, other things that you can do are more complicated, for example Radial Basis Functions are nice tools to classification, or maybe other neural network approach would do the job.

  • Ok, thanks. Anyhow, this is mostly a GIS procedure for identifying the islands. I already have a procedure for doing this, which is numerical (the map of course is a matrix). What I am after is an aggregate way of evaluating the impact of these events on my system. Which is to say: 1) I can plot how the response of the system varies with the overall number of cells within the islands; 2) I can plot the response against the number of islands. But I am looking for a sensible way of condensing the two plots into one.
    – FaCoffee
    Commented Nov 22, 2015 at 11:24

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.