Та же основная идея, что и у Халворсена, но, поскольку все интересующие координаты разнесены предсказуемым образом, сопоставление показалось немного расточительным.
width <- 5
height <- 4
brm <- do.call(cbind, big_rectangle)
lat <- seq(brm[1, 1], brm[1, 2], length.out=width+1)
lon <- seq(brm[2, 1], brm[2, 2], length.out=height+1)
eg <- expand.grid(lon=lon, lat=lat)
lr <- eg[-(1:(width+1)),]
ul <- eg[1:(nrow(eg)-(width+1)),]
corners <- cbind(upper_left=ul, lower_right=lr)
corners <- corners[1:nrow(corners) %% width != 0,]
rownames(corners) <- NULL
head(corners)
# upper_left.lon upper_left.lat lower_right.lon lower_right.lat
# 1 14.22302 50.18330 14.34398 50.13568
# 2 14.34398 50.18330 14.46493 50.13568
# 3 14.46493 50.18330 14.58588 50.13568
# 4 14.58588 50.18330 14.70683 50.13568
# 5 14.22302 50.13568 14.34398 50.08805
# 6 14.34398 50.13568 14.46493 50.08805
Чтобы расположить координаты обратно в список по мереесли бы вы их могли сделать.
corners.l <- apply(corners, 1,
function(x)
list(upper_left=c(lon=x[[1]], lat=x[[2]]),
lower_right=c(lon=x[[3]], lat=x[[4]])))
corners.l[1]
# [[1]]
# [[1]]$upper_left
# lon lat
# 14.22302 50.18330
# [[1]]$lower_right
# lon lat
# 14.34398 50.13568
И только потому, что
plot(eg, cex=0, axes=FALSE)
points(corners[,1:2], pch=1, cex=2)
points(corners[,3:4], pch=16)
axis(1, unique(eg[,1]), floor(unique(eg[,1])*100)/100)
axis(2, unique(eg[,2]), floor(unique(eg[,2])*100)/100)