I'm modelling the distributions of Australian parrots in response to climate change. I have two climate scenarios (present and future), and have used Maximum Entropy modelling to generate maps of future distributions. These distribution maps are binary maps consisting only of 'presence pixels' or 'absence pixels'.

I want to use three different dispersal scenarios in the future projections to limit how far each parrot species can disperse; for example 'no dispersal' and 'unlimited dispersal'. The third scenario is what I am needing help with: contiguous dispersal. I want to create a raster layer that limits the future distribution of a species only to pixels that directly or indirectly touch presence pixels from the current distribution, i.e. limiting the distribution to presence pixels (under the future scenario) that are indirectly contiguous with presence pixels of the current climate scenario. 

For example I've included a diagram of one of the species. I have a species that has a relatively small distribution under current conditions (purple pixels), and a much larger projected range under future conditions (yellow pixels), the area of presence overlap between the two scenarios is shown by brown pixel, areas of absence in both scenarios are grey. I want to create a presence-absence raster layer that excludes all yellow pixels that do not form a contiguous surface with a brown or purple pixel - i.e. exclude yellow pixels that are separated from purple/brown pixels (and the yellow pixels that are contiguous with them) by areas of absence. 

I'm hoping there is a tool that will allow me to exclude these 'discontinuous' yellow pixels so that the extent of the presence pixels in the presence-absence raster layer is restricted.

enter image description here

  • Convert yellow to polygon, do not simplify. Convert brown and purple to polygons, no simplify. Merge last two. Select yellow polygons by merge. Switch selection and delete. Convert to raster what remains
    – FelixIP
    Jul 28, 2016 at 6:21

2 Answers 2


If you have access to the ArcGIS Spatial Analyst extension, I would use the Region Group tool, then filter on value and count using the Con or SetNull and Lookup tools.

You could chain them together in the Raster Calculator, using something like (completely untested...!): (assuming a value of 2 = "yellow" pixels and grey pixels are NoData/null)

SetNull(("yourraster" == 2) & (Lookup(RegionGroup("yourraster", "EIGHT", "CROSS"), "Count") == 1), "yourraster")

If grey pixels are not NoData/null (i.e 0), you need to use an extra SetNull in the RegionGroup function:

SetNull(("yourraster" == 2) & (Lookup(RegionGroup(SetNull("yourraster" == 0, "yourraster") , "EIGHT", "CROSS"), "Count") == 1), "yourraster")






I've taken a slightly different approach to this same problem in the past. If you invert your habitat suitability model and run a cost distance analysis from the original occurrence points this would give you the ability to separate suitable but inaccessible habitat from suitable and accessible. You'd need to manually come up with a threshold that separates accessible from inaccessible. If you strongly believe that the gray areas create a barrier or near barrier you can re-assign them very high cost. The result is that the small satellite "islands" will have a prohibitively high cost and will nearly always beyond the accessibility threshold.

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.