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.hijm...@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.lust...@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@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@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to