[R-sig-Geo] assigning raster cell values based on predefined criteria

Marcelino de la Cruz marcelino.delacruz at upm.es
Thu Apr 22 15:21:18 CEST 2010


Sorry, that was the distance to the border of the polygon.




For the distance to the centroid:

# A example of polygon:
  ho_sp <- 
SpatialPolygons(list(Polygons(list(Polygon(cbind(c(0,1,1,0,0), 
c(0,0,1,1,0)))), ID="ho")))

ho.win <- as(ho_sp,"owin")

centroide <- centroid.owin(ho.win)
h2.ppp<-ppp(centroide$x, centroide$y, window=ho.win)
ho.dist<-distmap(h2.ppp)

plot(ho.dist)
ho.dist$v[1:5,1:5]



HNTH,

Marcelino


At 14:54 22/04/2010, Marcelino de la Cruz wrote:

>How about this?:
>
>library(spatstat)
>
>library(maptools)
>
># A example of polygon:
>  ho_sp <- 
> SpatialPolygons(list(Polygons(list(Polygon(cbind(c(0,1,1,0,0), 
> c(0,0,1,1,0)))), ID="ho")))
>plot(ho_sp)
>ho.win <- as(ho_sp,"owin")
>ho.mask <- as.mask(ho.win)
>ho.dist<-bdist.pixels(ho.mask)
>plot(ho.dist)
>
>ho.dist$v[1:10,1:5]
>
>
>
>HTH,
>
>Marcelino
>
>
>
>
>
>
>
>
>
>
>At 14:05 22/04/2010, Roman Luštrik wrote:
>>Content-Type: text/plain
>>Content-Disposition: inline
>>Content-length: 3181
>>
>>This is the normal behavior (see image
>>here<http://imagepaste.nullnetwork.net/viewimage.php?id=837>)
>>when I use option A-ish (calculating distance to a single point).
>>
>>Intuitively, however, I would expect the plot to look something like
>>this (crudely
>>drawn for your 
>>amusement<http://imagepaste.nullnetwork.net/viewimage.php?id=838>).
>>Can someone explain the logic behind the "tiled" pattern?
>>
>>They say a picture is worth a thousand words - hopefully, this is the case
>>here and my question is clear.
>>
>>
>>
>>Cheers,
>>Roman
>>
>>
>>On Tue, Apr 20, 2010 at 6:55 PM, Robert J. 
>>Hijmans <r.hijmans at gmail.com>wrote:
>>
>> > Dear Roman,
>> >
>> > I think it depends on your data. Below are two examples (both assuming
>> > your polygons do not overlap).
>> >
>> > A) works if each cell in a polygon is closest to its own centroid (and
>> > not that of another polygon). It makes a distance surface with
>> > distanceFromPoints() and then uses mask() to mask out the areas not
>> > covered by polygons.
>> >
>> > B) uses linesToRaster() to set up a raster with impenetrable
>> > boundaries (the polygon outlines) and then use gridDistance()  (i.e.
>> > the distance when only allowed to traverse certain cells). This method
>> > would fail if you have a polygon representing several islands; or a
>> > polygon with a hole with the centroid inside that hole. Also, you do
>> > not have values for the outer cells of a polygon. This is perhaps OK
>> > when polygons are adjacent (whose cell is it anyway?). If they are not
>> > adjacent yo could use edge() with 'outer' argument on the rasterized
>> > polygons instead of linesToRaster
>> >
>> > library(raster)
>> > p1 <- rbind(c(-180,-20), c(-140,55), c(-20, 0), c(-140,-60), c(-180,-20))
>> > hole <- rbind(c(-150,-20), c(-100,-10), c(-110,20), c(-150,-20))
>> > p2 <- rbind(c(-10,0), c(140,60), c(160,0), c(140,-55), c(-10,0))
>> > pols <- SpatialPolygons( list(  Polygons(list(Polygon(p1)), 1),
>> > Polygons(list(Polygon(p2)), 2)))
>> > xy <- coordinates(pols)
>> >
>> > #A
>> > r <- raster(nrow=18, ncol=36)
>> > r <- polygonsToRaster(pols, r)
>> > d <- distanceFromPoints(r, xy)
>> > x <- mask(d, r)
>> > plot(x)
>> >
>> > #B
>> > r <- raster(nrow=18, ncol=36)
>> > r <- polygonsToRaster(pols, r)
>> > l <- linesToRaster(pols, r)
>> > l[l>0] <- 0
>> > p <- pointsToRaster(r, xy)
>> > pp <- cover(p, l)
>> > gd <- gridDistance(pp)
>> > gd[!is.na(l)] <- NA
>> > plot(gd)
>> >
>> >
>> > Robert
>> >
>> > On Tue, Apr 20, 2010 at 12:23 AM, Roman Luðtrik <roman.lustrik at gmail.com>
>> > wrote:
>> > > Dear list,
>> > >
>> > > I have a polygon that I converted to raster (kudos to
>> > polygonsToRaster()). I
>> > > would like to assign values (through a custom function) to cells within
>> > this
>> > > polygon (now as raster). Roughly speaking, cell value will depend on its
>> > > distance from the central cell (polygon 
>> centroid). How would you go about
>> > > doing this? Is there a more efficient way of doing this, or will I have
>> > to
>> > > hard code it, cell by cell?
>> > >
>> > > Cheers,
>> > > Roman
>> > >
>> > >        [[alternative HTML version deleted]]
>> > >
>> > > _______________________________________________
>> > > R-sig-Geo mailing list
>> > > R-sig-Geo at stat.math.ethz.ch
>> > > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>> > >
>> >
>>
>>
>>
>>--
>>In God we trust, all others bring data.
>>
>>         [[alternative HTML version deleted]]
>>
>>
>>_______________________________________________
>>R-sig-Geo mailing list
>>R-sig-Geo at stat.math.ethz.ch
>>https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>________________________________
>
>Marcelino de la Cruz Rot
>
>Departamento de  Biología Vegetal
>E.U.T.I. Agrícola
>Universidad Politécnica de Madrid
>28040-Madrid
>Tel.: 91 336 54 35
>Fax: 91 336 56 56
>marcelino.delacruz at upm.es
>_________________________________
>_______________________________________________
>R-sig-Geo mailing list
>R-sig-Geo at stat.math.ethz.ch
>https://stat.ethz.ch/mailman/listinfo/r-sig-geo

________________________________

Marcelino de la Cruz Rot

Departamento de  Biología Vegetal
E.U.T.I. Agrícola
Universidad Politécnica de Madrid
28040-Madrid
Tel.: 91 336 54 35
Fax: 91 336 56 56
marcelino.delacruz at upm.es
_________________________________ 



More information about the R-sig-Geo mailing list