If you have a map with/or a data table of **UTM 10 x 10 km cells** with the corresponding UTM codes, and want to **upscale them to 20 x 20, 50 x 50 or 100 x 100 km cells**, you can use the *UTM10upscale* function to **create cell codes that group the UTM codes** accordingly. This function is **not included in an R package**, but it is being **included in the QGIS** **Processing toolbox**.

UTM10upscale <- function(UTMcode, size) {
# version 1.3 (14 Mai 2013)
# UTMcode: a vector string of UTM 10x10 km codes (e.g. MC58 or 29SMC58)
# size: the size (in square km) of the UTM cells for which to create codes; must be 20, 50 or 100
if (missing(size)) stop ("Argument 'size' is missing, with no default.")
if (!(size %in% c(20, 50, 100))) stop ("'size' must be a multiple of 10 and a divisor of 100 - i.e. 20, 50 or 100.")
UTMcode <- as.character(UTMcode)
nc <- unique(nchar(UTMcode))
if (length(nc) != 1) stop ("All elements of UTMcode must have the same number of characters.")
utm10letters <- substr(UTMcode, nc - 4, nc -2)
if(size == 100) upscaled.code <- utm10letters
else {
utm10x <- substr(UTMcode, nc - 1, nc - 1) # penultimate digit of UTMcode
utm10y <- substr(UTMcode, nc, nc) # last digit of UTMcode
utm10index <- 0 : 9
if (size == 20) upscaled.index <- rep(letters[1 : 5], each = 2)
else if (size == 50) upscaled.index <- rep(LETTERS[1 : 2], each = 5)
n <- length(UTMcode)
upscaled.x <- upscaled.y <- vector("integer", n)
for (i in 1 : n) {
x <- which(utm10index == utm10x[i])
y <- which(utm10index == utm10y[i])
upscaled.x[i] <- upscaled.index[x]
upscaled.y[i] <- upscaled.index[y]
} # end for i
upscaled.code <- paste(utm10letters, upscaled.x, upscaled.y, sep = "")
} # end if size 100 else
return(upscaled.code)
} # end UTM10upscale function

[presented with Pretty R]

Note that the resulting codes for 20×20 and for 50×50 km cells (namely the last two characters) are not “official” UTM codes, just ones that I made up. I used letters instead of numbers, with lower case for 20-km and upper case for 50-km cells, so that these codes cannot be confused with the UTM 10×10 km codes.

Then you just have to add a column with the new codes to your map’s table of attributes, and use e.g. a spatial R package or a GIS to dissolve the UTM 10 x 10 km cells using the values in this column. You can also use R’s aggregate function to summarize your data into the upscaled cells.

mydata$utm20 <- utm10upscale(mydata$utm10, size = 20)
mydata$utm50 <- utm10upscale(mydata$utm10, size = 50)

### Like this:

Like Loading...

*Related*