12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #' Generate Global Tiling System
- #'
- #' @description
- #' This function generates a matrix with bounding box information for a
- #' global tiling system (based on Lat/Lon).
- #'
- #' @param tileSize \code{numeric}, size of a single tile in degrees (EPSG:4326).
- #' @param offset \code{numeric}, shifts the tiling system in upper-left
- #' direction.
- #' @param StartNameFrom \code{numeric}. \code{c(Lat-Direction,Lon-Direction)}
- #' start number in the naming of the tiles.
- #' @param extent \code{list}. Tile system extent information, basically the
- #' coverage of the data on server.
- #'
- #' @return
- #' A \code{matrix}.
- #'
- #' @author
- #' Matteo Mattiuzzi
- #'
- #' @seealso
- #' \code{\link{getTile}}.
- #'
- #' @examples
- #' # 1x1 degree tiling system
- #' e1 <- genTile()
- #' head(e1)
- #'
- #' # 10x10 degree tiling system with offset to be aligned to Geoland2 Dataset
- #' e2 <- genTile(tileSize = 10, offset = (1/112) / 2)
- #' head(e2)
- #'
- #' # Tiling system for SRTMv4 data (CGIAR-CSI)
- #' e3 <- genTile(tileSize = 5, StartNameFrom = c(1, 1),
- #' extent = list(xmin = -180, xmax = 180, ymin = -60,ymax = 60))
- #' head(e3)
- #'
- #' @export genTile
- #' @name genTile
- genTile <- function(tileSize = 1, offset = 0, StartNameFrom = c(0, 0),
- extent = list(xmin = -180, xmax = 180, ymin = -90, ymax = 90))
- {
- # offset is used in case of pixel centrum reference. In such case the offset is res/2
- if (offset!=0) {cat("Warning! Tiles crossing LAT extremas (-90 and +90) are not meaningful for now! For those tiles the resulting shift in LON is not computed!\n")}
-
- # set origin in UL
- LON <- seq(extent$xmin,extent$xmax,by=tileSize)
- LON <- LON[-length(LON)]
- LAT <- seq(extent$ymax,extent$ymin,by=-tileSize)
- LAT <- LAT[-length(LAT)]
-
- LON <- LON - offset
- LAT <- LAT + offset
-
- tiles <- expand.grid(LON,LAT)
- colnames(tiles) <- c("xmin","ymax")
-
- iv <- (0:(length(LON)-1)) + StartNameFrom[2]
- ih <- (0:(length(LAT)-1)) + StartNameFrom[1]
-
- vh <- expand.grid(iv,ih)
- tiles$iv <- vh[,2]
- tiles$ih <- vh[,1]
-
- tiles$xmax <- tiles$xmin + tileSize
- tiles$ymin <- tiles$ymax - tileSize
-
- tiles[tiles$xmin < -180,"xmin"] <- tiles[tiles$xmin < -180,"xmin"] + 2*180
- tiles[tiles$xmin > 180,"xmin"] <- tiles[tiles$xmin > 180,"xmin"] - 2*180
- tiles[tiles$xmax < -180,"xmax"] <- tiles[tiles$xmax < -180,"xmax"] + 2*180
- tiles[tiles$xmax > 180,"xmax"] <- tiles[tiles$xmax > 180,"xmax"] - 2*180
-
- #TODO: EXTREMAS IN LAT are changing LON +- 180
- # tiles[tiles[,"lat"] < -90,"lon"] <- tiles[tiles[,"lat"] < -90,"lon"] + 180 #
- tiles[tiles$ymax < -90,"ymax"] <- -90 + abs(90 + tiles[tiles$ymax < -90,"ymax"])
- tiles[tiles$ymax > 90,"ymax"] <- (2*90) - tiles[tiles$ymax > 90,"ymax"]
- tiles[tiles$ymin < -90,"ymin"] <- -90 + abs(90 + tiles[tiles$ymin < -90,"ymin"])
- tiles[tiles$ymin > 90,"ymin"] <- (2*90) - tiles[tiles$ymin > 90,"ymin"]
-
- tiles <- tiles[,c(3,4,1,2,5,6)]
- return(tiles)
- }
|