[R-br] Problema para criar um GeoTIFF a partir da divisão um raster RGB

ASANTOS alexandre.santos em cas.ifmt.edu.br
Qua Jul 17 18:39:54 -03 2019


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 em yahoo.com.br
         alexandre.santos em 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/
======================================================================

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20190717/ace51650/attachment.html>


Mais detalhes sobre a lista de discussão R-br