[R-sig-Geo] Correctly aligning two polygon grids
Roger Bivand
Roger.Bivand at nhh.no
Thu Aug 13 20:13:13 CEST 2009
On Thu, 13 Aug 2009, Kenneth Takagi wrote:
>
> Hi,
>
> I would like to align two polygon grids, one with 100x100 cells and the
> other with 50x50 cells. The idea is that they would align so that 4
> 50x50 cells would fall within one 100x100 cell. Preferably, they would
> have a common coordinate origin so that I could also make a grid of
> 200x200 cells and they would also align properly. It seems to be
> something to do with where the centroids of each grid cell is placed?
> Below is a reproducible example of where I am at. I'm new with the sp
> package so sorry for the length of the script! I'm using R 9.1 with XP.
> Thanks!
It gets much simpler if you start from the GridTopology object:
x.range <- c(1924835, 1926426)
y.range <- c(484673, 485490)
cell.size <- 100
cellcentre.offset <- c(x.range[1], y.range[1])+(cell.size/2)
cellsize <- rep(cell.size, 2)
cells.dim <- c(ceiling(abs(diff(x.range))/cell.size),
ceiling(abs(diff(y.range))/cell.size))
GRD100 <- GridTopology(cellcentre.offset, cellsize, cells.dim)
pl100 <- as.SpatialPolygons.SpatialPixels(as(SpatialGrid(GRD100),
"SpatialPixels"))
cell.size <- 50
cellcentre.offset <- c(x.range[1], y.range[1])+(cell.size/2)
cellsize <- rep(cell.size, 2)
cells.dim <- c(ceiling(abs(diff(x.range))/cell.size),
ceiling(abs(diff(y.range))/cell.size))
GRD50 <- GridTopology(cellcentre.offset, cellsize, cells.dim)
pl50 <- as.SpatialPolygons.SpatialPixels(as(SpatialGrid(GRD50),
"SpatialPixels"))
plot(pl50, border="magenta")
plot(pl100, add=TRUE)
bbox(pl50)
bbox(pl100)
This lets you tesselate the same area, but using different offsets for the
anchoring south-west cell, giving matching bounding boxes (the north edge
doesn't match here, as the number of cells chosen to include the top of
the range differs).
Hope this helps,
Roger
>
> Code:
>
> ### Range of coordinate space
> x.range = c(1924835, 1926426)
> y.range = c(484673, 485490)
>
> ### Create 100x100 grid
> cell.size = 100
> grd100 <- expand.grid(x=seq(from=x.range[1], to=x.range[2], by=cell.size),
> y=seq(from=y.range[1], to=y.range[2], by=cell.size))
> coordinates(grd100) <- ~ x+y
> gridded(grd100) <- TRUE
> grd100.SP <- as.SpatialPolygons.SpatialPixels(grd100)
> centroids <- coordinates(grd100.SP)
> x <- centroids[,1]
> y <- centroids[,2]
> row.names100 <- sapply(slot(grd100.SP, "polygons"), function(i) slot(i, "ID"))
> grd100.SPDF <- SpatialPolygonsDataFrame(grd100.SP,
> data=data.frame(x=x, y=y, row.names=row.names100))
>
>
> ### Create 50x50 grid
> cell.size = 50
> grd50 <- expand.grid(x=seq(from=x.range[1], to=x.range[2], by=cell.size),
> y=seq(from=y.range[1], to=y.range[2], by=cell.size))
> coordinates(grd50) <- ~ x+y
> gridded(grd50) <- TRUE
> grd50.SP<-as.SpatialPolygons.SpatialPixels(grd50)
> centroids <- coordinates(grd50.SP)
> x <- centroids[,1]
> y <- centroids[,2]
> row.names50 <- sapply(slot(grd50.SP, "polygons"), function(i) slot(i, "ID"))
> grd50.SPDF <- SpatialPolygonsDataFrame(grd50.SP,
> data=data.frame(x=x, y=y, row.names=row.names50))
>
>
> ### Plot both grids
> s100 <- list("sp.lines", as(grd100.SPDF, "SpatialLinesDataFrame"), "magenta",
> lwd=2)
> spplot(as(grd50.SPDF, "SpatialLinesDataFrame"), "x", col.regions="black",
> sp.layout=list(s100),colorkey = F)
>
> _________________________________________________________________
>
>
> _sync:082009
> [[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
>
--
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, 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 R-sig-Geo
mailing list