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

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list

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)
[hidden email] 
        [hidden email] 
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/
======================================================================

_______________________________________________
R-br mailing list
[hidden email]
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.