[GRASS-stats] Nearest neighbour distance distribution but between polygons

Roger Bivand Roger.Bivand at nhh.no
Mon May 7 12:30:08 EDT 2012


On Mon, 7 May 2012, Rainer M Krug wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 07/05/12 14:42, Rainer M Krug wrote:
>> On 07/05/12 14:25, Roger Bivand wrote:
>>> On Mon, 7 May 2012, Rainer M Krug wrote:
>>
>>> Hi
>>
>>> I have the following (presumibly simple?) question:
>>
>>> I have a certain number of patches (islands) in a landscape of which I need to know the
>>> nearest neighbour distance. As the problem is related to dispersal, I would need to know the
>>>  actual shortest distance between the actual polygons and not only the centroids. Is there an
>>>  easy way to obtain these in R or in GRASS? I am only aware of nearest neighbour distance
>>> between points.
>>
>>
>> Hi Roger
>>
>>
>>>> In R, if the coordinates are projected, use gDistance(..., byid=TRUE) in the rgeos package
>>>> to get a matrix in the metric of the projection. If not projected, project if possible.
>>
>> Exactly what I was looking for - the geometries are projected, so absolutely no problem.
>
> I thought that it would be no problem, but it is.
>
> I am loading the layer from a shape file and it consists of 40 different polygons. Now I want to
> calculate the distance between all of the individual polygons in the layer, and I am stuck.
>
> I understand the principle, but I a struggling at accessing each polygon in the
> SpatialPolygonsDataFrame to calculate the differences. My code:
>
> I am reading from the shapefile:
>
> x <- readShapePoly( "shapefile" )
>
> Now I want to do:
>
> d <- matrix(ncol=length(x), nrow=length(x))
> for (i in length(x):1) {
>  cat (i, ": ")
>  for (j in 1:i) {
>    cat( j )
>    p_i <- ### Polygon i - How?
>    p_j <- ### Polygon j - How?
>    d[i, j] <- gDistance(p_i, p_j)
>  }
>  cat("\n")
> }
>
> I tried x[i], x[[i]] and x at polygons..... but nothing worked so far - I 
> am stuck here.

p_i <- x[i,]

etc., x is a SpatialPolygonsDataFrame. I don't think that calculating the 
other triangle is a problem.

But isn't it easier to do:

library(rgdal)
dsn <- system.file("vectors", package = "rgdal")[1]
scot_BNG <- readOGR(dsn=dsn, layer="scot_BNG")
is.projected(scot_BNG)
library(rgeos)
dmat <- gDistance(scot_BNG, scot_BNG, byid=TRUE)

# As of now, you need to include the geometries twice, will be fixed

scot_BNG$d0 <- dmat[1,]
scot_BNG$NAME[1]
spplot(scot_BNG, "d0", col.regions=bpy.colors(20), col="grey",
   sp.layout=list("sp.text", coordinates(scot_BNG),
   as.character(scot_BNG$NAME), col="grey", cex=0.8))

Roger

>
> Any help welcome,
>
> Thanks,
>
> Rainer
>
>
>>
>> Thanks a lot,
>>
>> Rainer
>>
>>
>>>> I don't think that the geosphere package provides for the unprojected case.
>>
>>>> Roger
>>
>>
>>> Thanks,
>>
>>> Rainer
>>
>>
>>>> _______________________________________________ grass-stats mailing list
>>>> grass-stats at lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/grass-stats
>>>>
>>
>>
>
> - --
> Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys.
> (Germany)
>
> Centre of Excellence for Invasion Biology
> Stellenbosch University
> South Africa
>
> Tel :       +33 - (0)9 53 10 27 44
> Cell:       +33 - (0)6 85 62 59 98
> Fax :       +33 - (0)9 58 10 27 44
>
> Fax (D):    +49 - (0)3 21 21 25 22 44
>
> email:      Rainer at krugs.de
>
> Skype:      RMkrug
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iEYEARECAAYFAk+n61AACgkQoYgNqgF2egoG/ACfayPJO6EM5kffc5fhFLZLTYKi
> QOIAn265F2+eyb0FE5x2tQ9GKdhoesHr
> =0fHz
> -----END PGP SIGNATURE-----
>

-- 
Roger Bivand
Department of Economics, NHH Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no



More information about the grass-stats mailing list