How to best approach creating a fuzzy suitability surface for land cover?

1426
9
05-19-2017 05:59 AM
johnmonks
New Contributor II

So I am in the process of creating a fuzzy suitability map for a species of bird and for the most part its fine and I have the values to create my functions. The only dataset that is causing me an issue is that of land cover.

What i have done is create buffers to denote home range and then have masked off the rest of the map so I only have the values of interest.

Within these values I have simplified a Corine land cover layer to "forest" "cropland" etc and have statistics regarding these covers. The part I am struggling with is how to best approach generating a fuzzy surface. Should I take each cover individually? Would a good approach be to take a "window" based on the mean home range and somehow classify the the surface using that?

Any insight would be greatly appreciated.

John

Tags (3)
0 Kudos
9 Replies
DanPatterson_Retired
MVP Emeritus

There is fuzzy overlay and fuzzy membership  the latter requiring 2 rasters from the former.  Since you have discretized the land cover types, there is no overlay capabilities, so what process are you using for fuzzy suitability?

johnmonks
New Contributor II

Basically I am trying to generate a fuzzy suitability map for habitat using data derived from gps. The GPS points have been summerised into a "home range" using kernel density estimators and then merged to form a blotchy mask which I used to extract relevant data. What I have now is simply the data within the home ranges. For elements like DEM, NDVI etc there are just values from the one parameter and with that I will create membership functions using regression analysis (if there is a good method you know of then feel free to share) which I still need to work out. The Corine Land cover layer is a different issue altogether.

From masking off the data I can see that there is a strong preference for crop areas but I cannot negate the other land covers as they are still significant. I cannot partition them into say 20x20km squares because an area might become more suitable taking into account both areas in the middle...

I just don't really know what the best way to approach this in order to give it suitability values

0 Kudos
DanPatterson_Retired
MVP Emeritus

When you say regression analysis.. were you referring to geographically weighted regression?

0 Kudos
johnmonks
New Contributor II

Well for that element I was thinking to take each variable and do them individually. Say altitude, plotting alt in y-axis and cell count or area in x-axis and then create a membership function for each parameter in that way... although I'm very open to criticism

0 Kudos
DanPatterson_Retired
MVP Emeritus

wasn't criticism... was just trying to see how you were arriving at your regression and where fuzzy fit in

0 Kudos
johnmonks
New Contributor II

oh no i meant if you see another way that I am overlooking I am fully open to suggestions as stats is not my forte.

0 Kudos
MervynLotter
Occasional Contributor III

Hi John

An approach I have used is to reclassify the land cover into quantitative scores of suitability, ranging from 1 to 100, and then transform to values between 0 and 1. Getting suitable quantitative values on the suitability of certain land cover classes for your bird species can be tricky.

If your observations are not heavily biased to sampling locations that may skew land cover counts, one approach would be to first use the Extract Value to Points tool, using your land cover as input raster. There is an option to append all the input raster attributes to the output features, so you will get the raster value as well as land cover class name. You will need the latter.

Open attribute table and summarise on the land cover filed name. The Case field with be land cover name and under Field name again select the land cover class name and count as statistic type. 

This will provide you with a count of the number of times your bird species was observed in each of the land cover types. You can now convert these counts to a value out of a 100 so that you can use the Reclassify tool to reclassify your land cover raster into a new raster with scores ranging from 1-100. One cant use decimals in the reclassify tool, so once you have done this, add a column as float data type and divide by 100 to covert to values between 0 and 1.

To counteract the effect of land cover class size, for example where there is twice as much cropland to forest, then it is best to also determine the size of the different land cover classes and then normalize your count data against the size of the land cover class sizes.  This will give you a rate of suitability or preference, which would be a better measure to use in your model. 

johnmonks
New Contributor II

So I have been thinking hard about this... because although that would give me somewhat of a landcover suitability it doesnt quite manage it in terms of habitat use... even taking into account the statistics I need to know more what thresholds of land composition are more suitable...

So I've decided to break them down into individual landcovers in a simplified version containing grassland, cropland forest etc.

I need to work out what % of each land cover is considered most suitable within the home ranges of the kites so because saying one type of land cover is more suitable etc doesn't really cover the issue.

Basically the best way I can see to do it is to create a custom filter whos size is determined by the average home range of my birds... so about  60 sqkm. I want it to pass over classifying each cell based on surrounding cells to kind of give it a % cover... so say its a 3x3 pixel filter and 5 out of the 9 cells surrounding the centre cell are forest it will give it 100*5/9 value, doing that for each cell in the raster. Then I can plot it and fit a function to it.

Any input on the best way of creating the filter? I hope its not too confusing how I have written it

0 Kudos
johnmonks
New Contributor II

I suppose using focal statistics to calculate the sum then raster calculator to x100 /#cells

0 Kudos