[GRASS-user] Landscape connectivity

Hi all,

for a raster map with habitat patches separated by gaps in between, I want to know for each habitat patch 1) how far away is the nearest other habitat patch, 2) what's the id of the nearest habitat patch (each contiguous patch must have a unique ID), 3) how do I get to the nearest habitat patch, i.e. what is the shortest path connecting one patch and its nearest other patch.

Then I need to get clusters of patches, each cluster consisting of patches connected by paths not longer than max_distance, i.e. I can visit all patches within a cluster by traversing gaps not broader than max_distance (hop from one patch to the next, but I can hop only so far...)

That would be interesting for meta-populations, dispersal etc, habitats could be islands, forest fragments, trees of a particular species, any habitat type with a patchy spatial distribution and one or more species dependent on that habitat.

Any idea how to do that in grass or some other (fragment analysis-specific) application?

Using the habitat map twice as input to r.distance would be a start with r.distance maps=habitat_map,habitat_map, but r.distance is too slow for my taste (running for 2 hours by now), and I still have to get the nearest patches, shortest paths and clusters connected with max_distance. Running r.cost or r.walk for each patch as starting points and all other patches as stop points is not an option because I have ~200,000 patches in a 300 million cell raster. Converting the raster habitat map to a vector with areas and using v.net.* modules doesn't work because AFAIK these modules work with points as graph nodes, and some of the areas are quite large, using centroids would give wrong distances.

The theory of what I want to do is described in Urban and Keitt (2001) [1]

Thanks,

Markus M

[1] link to pdf: http://www.keittlab.org/~tkeitt/papers/urban-keitt-2001.pdf

PS: The grass module I would like to have for this kind of analysis would use a habitat map as input, have as optional output raster paths with distances as cell values, vector paths with costs and ids of the two patches connected by each path, one cluster map for each maxdistance=max1,max2,max3,..., and an ascii file in the same format like r.distance for all paths connecting habitat patches. X-mas is getting close :wink:

Hi Markus,

So, if I understood well the practical theory you need is not that one described by Urban & Keitt (2001), because they use nodes and edges, and you want a patch-based graph theory, isn’t it? May be Fall et all (2007) is a better technical approach?

Andrew Fall, Marie-Josee Fortin, Micheline Manseau, and DanO’Brien
Spatial Graphs: Principles and Applications for Habitat Connectivity
Ecosystems (2007) 10: 448–461 - DOI: 10.1007/s10021-007-9038-7

bests

miltinho
brazil=toronto

2009/12/2 Markus Metz <markus.metz.giswork@googlemail.com>

Hi all,

for a raster map with habitat patches separated by gaps in between, I want to know for each habitat patch 1) how far away is the nearest other habitat patch, 2) what’s the id of the nearest habitat patch (each contiguous patch must have a unique ID), 3) how do I get to the nearest habitat patch, i.e. what is the shortest path connecting one patch and its nearest other patch.

Then I need to get clusters of patches, each cluster consisting of patches connected by paths not longer than max_distance, i.e. I can visit all patches within a cluster by traversing gaps not broader than max_distance (hop from one patch to the next, but I can hop only so far…)

That would be interesting for meta-populations, dispersal etc, habitats could be islands, forest fragments, trees of a particular species, any habitat type with a patchy spatial distribution and one or more species dependent on that habitat.

Any idea how to do that in grass or some other (fragment analysis-specific) application?

Using the habitat map twice as input to r.distance would be a start with r.distance maps=habitat_map,habitat_map, but r.distance is too slow for my taste (running for 2 hours by now), and I still have to get the nearest patches, shortest paths and clusters connected with max_distance. Running r.cost or r.walk for each patch as starting points and all other patches as stop points is not an option because I have ~200,000 patches in a 300 million cell raster. Converting the raster habitat map to a vector with areas and using v.net.* modules doesn’t work because AFAIK these modules work with points as graph nodes, and some of the areas are quite large, using centroids would give wrong distances.

The theory of what I want to do is described in Urban and Keitt (2001) [1]

Thanks,

Markus M

[1] link to pdf: http://www.keittlab.org/~tkeitt/papers/urban-keitt-2001.pdf

PS: The grass module I would like to have for this kind of analysis would use a habitat map as input, have as optional output raster paths with distances as cell values, vector paths with costs and ids of the two patches connected by each path, one cluster map for each maxdistance=max1,max2,max3,…, and an ascii file in the same format like r.distance for all paths connecting habitat patches. X-mas is getting close :wink:


grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user

Hi Miltinho,

hmm I think the theory of Urban and Keitt (2001) practically applied to raster maps is what I want. But Fall et al (2007) is also very interesting and surely seems closer to what I'm looking for. Problem is, I don't have time right now to write a new module implementing these ideas, and want to avoid that I reinvent the wheel.
BTW, I think I found a very simple way to get my clusters in grass, just an idea, still have to test it.

Thanks,

Markus

Milton Cezar Ribeiro wrote:

Hi Markus,
So, if I understood well the practical theory you need is not that one described by Urban & Keitt (2001), because they use nodes and edges, and you want a patch-based graph theory, isn't it? May be Fall et all (2007) is a better technical approach?
Andrew Fall, Marie-Josee Fortin, Micheline Manseau, and DanO’Brien
Spatial Graphs: Principles and Applications for Habitat Connectivity
Ecosystems (2007) 10: 448–461 - DOI: 10.1007/s10021-007-9038-7
bests
miltinho
brazil=toronto

2009/12/2 Markus Metz <markus.metz.giswork@googlemail.com <mailto:markus.metz.giswork@googlemail.com>>

    Hi all,

    for a raster map with habitat patches separated by gaps in
    between, I want to know for each habitat patch 1) how far away is
    the nearest other habitat patch, 2) what's the id of the nearest
    habitat patch (each contiguous patch must have a unique ID), 3)
    how do I get to the nearest habitat patch, i.e. what is the
    shortest path connecting one patch and its nearest other patch.

    Then I need to get clusters of patches, each cluster consisting of
    patches connected by paths not longer than max_distance, i.e. I
    can visit all patches within a cluster by traversing gaps not
    broader than max_distance (hop from one patch to the next, but I
    can hop only so far...)

    That would be interesting for meta-populations, dispersal etc,
    habitats could be islands, forest fragments, trees of a particular
    species, any habitat type with a patchy spatial distribution and
    one or more species dependent on that habitat.

    Any idea how to do that in grass or some other (fragment
    analysis-specific) application?

    Using the habitat map twice as input to r.distance would be a
    start with r.distance maps=habitat_map,habitat_map, but r.distance
    is too slow for my taste (running for 2 hours by now), and I still
    have to get the nearest patches, shortest paths and clusters
    connected with max_distance. Running r.cost or r.walk for each
    patch as starting points and all other patches as stop points is
    not an option because I have ~200,000 patches in a 300 million
    cell raster. Converting the raster habitat map to a vector with
    areas and using v.net.* modules doesn't work because AFAIK these
    modules work with points as graph nodes, and some of the areas are
    quite large, using centroids would give wrong distances.

    The theory of what I want to do is described in Urban and Keitt
    (2001) [1]

    Thanks,

    Markus M

    [1] link to pdf:
    http://www.keittlab.org/~tkeitt/papers/urban-keitt-2001.pdf
    <http://www.keittlab.org/~tkeitt/papers/urban-keitt-2001.pdf&gt;

    PS: The grass module I would like to have for this kind of
    analysis would use a habitat map as input, have as optional output
    raster paths with distances as cell values, vector paths with
    costs and ids of the two patches connected by each path, one
    cluster map for each maxdistance=max1,max2,max3,..., and an ascii
    file in the same format like r.distance for all paths connecting
    habitat patches. X-mas is getting close :wink:

    _______________________________________________
    grass-user mailing list
    grass-user@lists.osgeo.org <mailto:grass-user@lists.osgeo.org>
    http://lists.osgeo.org/mailman/listinfo/grass-user