Prezados Membros,
Eu gostaria de dividir um raster RGB em várias partes e salvar cada imagem no formato GeoTiff, mas no nome do arquivo eu preciso da contagem de pontos (pts) dentro de cada divisão. Meu código funciona perfeitamente quando eu uso uma única camada do raster, mas com o objeto stack ou brick não funciona. Eu gostaria de ter como saída nove arquivos GeoTiff (eu dividi o raster original em 3 partes iguais) com os nomes: SplitRas1points0.tif ... SplitRas9points0.tif
Segue CRM para ilustrar:
#Pacotes
library(raster)
library(sp)
library(rgdal)
## Simula os rasters
r <- raster(nc=30, nr=30)
r <- setValues(r, round(runif(ncell(r))* 255))
g <- raster(nc=30, nr=30)
g <- setValues(r, round(runif(ncell(r))* 255))
b <- raster(nc=30, nr=30)
b <- setValues(r, round(runif(ncell(r))* 255))
rgb<-stack(r,g,b)
plotRGB(rgb, r = 1, g = 2, b = 3)
##Seleciono algumas coordenadas de interesse
xd <- c(-24.99270,45.12069,99.40321,73.64419)
yd <- c(-45.435267,-88.369745,-7.086949,44.174530)
pts <- data.frame(xd,yd)
pts_s<- SpatialPoints(pts)
points(pts_s, col="black", pch=16)
#Particiono o raster em três partes iguais
SplitRas <- function(raster,ppside,save,plot){
h <- ceiling(ncol(raster)/ppside)
v <- ceiling(nrow(raster)/ppside)
agg <- aggregate(raster,fact=c(h,v))
agg[] <- 1:ncell(agg)
agg_poly <- rasterToPolygons(agg)
names(agg_poly) <- "polis"
r_list <- list()
for(i in 1:ncell(agg)){
e1 <- extent(agg_poly[agg_poly$polis==i,])
r_list[[i]] <- crop(raster,e1)
}
if(save==T){
for(i in 1:length(r_list)){
writeRaster(r_list[[i]],filename=paste("SplitRas",i,sep=""),
format="GTiff",datatype="FLT4S",overwrite=TRUE)
}
}
if(plot==T){
par(mfrow=c(ppside,ppside))
for(i in 1:length(r_list)){
plot(r_list[[i]],axes=F,legend=F,bty="n",box=FALSE)
}
}
return(r_list)
}splitRBG<-SplitRas(raster=rgb,ppside=3,save=FALSE,plot=FALSE)
Até aqui tudo bem eu tenho 9 rasters!!!!
splitRBG
[[1]]
class : RasterBrick
dimensions : 10, 10, 100, 3 (nrow, ncol, ncell, nlayers)
resolution : 12, 6 (x, y)
extent : -180, -60, 30, 90 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
source : memory
names : layer.1, layer.2, layer.3
min values : 0, 0, 2
max values : 249, 253, 252
...
[[9]]
class : RasterBrick
dimensions : 10, 10, 100, 3 (nrow, ncol, ncell, nlayers)
resolution : 12, 6 (x, y)
extent : 60, 180, -90, -30 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
source : memory
names : layer.1, layer.2, layer.3
min values : 3, 3, 3
max values : 254, 251, 248
## Faço uma função para contar os pontos, onde zero também entra
res<-NULL
for(i in 1:3){
pointcount = function(r, pts){
r2 = r
r2[] = 0
counts = table(cellFromXY(r,pts))
r2[as.numeric(names(counts))] = counts
return(r2)
}
r2 = pointcount(splitRBG[i], pts_s)
res<-rbind(res,c(r2))
}
#
Primeiro problema e eu tenho a seguinte saída, ou seja, não realiza a contagem em rasters empilhados:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘cellFromXY’ for signature ‘"list"’
# Coloco o número de pontos dentro de cada raster no nome do arquivo de saída (res [i])
list2 <- list()
for(i in 1:3){
rx <- raster(paste("splitRBG",i,".tif",sep=""))
writeRaster(splitRBG,filename=paste("SplitRas",i,"points",res[i],sep=""),
format="GTiff",datatype="FLT4S",overwrite=TRUE)
}
#
Segundo problema, meu objeto splitRBG não é reconhecido como RasterLayer:
Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", :
Cannot create a RasterLayer object from this file. (file does not exist)
Alguém poderia dar um help?
-- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 99686-6970 (VIVO) (+55) 65 3221-2674 (FIXO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 OrcID: orcid.org/0000-0001-8232-6722 - ResearcherID: A-5790-2016 Researchgate: www.researchgate.net/profile/Alexandre_Santos10 LinkedIn: br.linkedin.com/in/alexandre-dos-santos-87961635 Mendeley:www.mendeley.com/profiles/alexandre-dos-santos6/ ======================================================================