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/
======================================================================