[R-br] Criando uma mascara com shapefile sobre raster

ASANTOS alexandresantosbr em yahoo.com.br
Sábado Abril 6 21:26:44 BRT 2013


Thiago,

       Desculpe pensei um pouco e achei a solução para retornar ao valor 
inicial dos pixels, o problema agora esta sendo salvar esta imagem 
regular em tiff, sendo:
#Check final result
plot(land_mask)
image(land_mask, axes = FALSE, col = grey(seq(0, 1, length = 256)))
#
require(rgdal)
img.mask <- as(x, "SpatialPixelsDataFrame") # Converting the RasterLayer 
object to a SpatialPixelsDataFrame object
writeGDAL(img.mask, "img.mask.tif", drivername="GTiff") # This doesn´t works
#

      Sendo que a imagem final não produz um tiff com o mesmo resultado 
que em image(land_mask, axes = FALSE, col = grey(seq(0, 1, length = 256)))

Obrigado,

Alexandre


Em 06/04/2013 19:48, ASANTOS escreveu:
> PERFEITO!!!! Thiago,
>
>          Era isto mesmo que eu queria fazer. Minha abordagem inicial 
> era trabalhar com polígonos usando o PBSmapping, mas estava difícil 
> fazer a representação do contorno neste formato sobre a imagem. Tenho 
> uma última questão e vou precisar combinar diferentes bandas, por isso 
> a bordagem inicial usando stack(), mas vou utilizar um loop sobre 
> brick() conforme me recomendou, porém o que me preocupa foi o processo 
> de rasterize() que gostaria de saber se vai mudar o valor dos pixels? 
> Pois quero plotar novamente como na imagem inicial em escala de cinza, 
> mas se fazer um plot greyscale o valor dos pixels não vão ficar subjetivo?
>
> Obrigado,
>
> Alexandre
>
>
> Em 06/04/2013 18:52, Thiago V. dos Santos escreveu:
>> Alexandre,
>>
>> Acredito que o codigo no final dessa mensagem funcione.
>>
>> O maior problema foi converter o seu shapefile de polylines para 
>> polygons (voce tinha mencionado na primeira pergunta). So consegui 
>> fazer isso usando uma combinacao de funcoes dos pacores maptools e 
>> PBSmapping - voce deve instalar esse pacote.
>>
>> Primeiro eu converti as polylines para polysets (classe do pacote 
>> PBSmapping) e em seguida polysets para poligonos. O fluxo subsequente 
>> foi o mesmo que eu tinha te passado anteriormente.
>>
>> Alem disso, carreguei a banda que voce mandou como brick (ao inves de 
>> stack) para para fins de simplicidade. Se voce fizer questao do stack 
>> para aplicar a todas as bandas da imagem, entao tera que fazer um 
>> loop entre elas - for (i in 1:nbands(land)){}.
>>
>> ---------------------------------------------------
>> # Require packages
>> require(raster)
>> require(maptools)
>> require(PBSmapping)
>>
>> #Load data
>> land <-  raster("LANDSAT_5_TM_20100506_217_074_L2_BAND7.tif")
>> contorno_line <- readShapeLines ("Catas_Altas.shp", 
>>  proj4string=CRS("+proj=utm +zone=23 +south +datum=WGS84 +units=m 
>> +no_defs"))
>>
>> # Convert SpatialLines to PolySet and then to SpatialPolygons - this 
>> will require package PBSmapping
>> contorno_poly <- PolySet2SpatialPolygons 
>> (SpatialLines2PolySet(contorno_line), close_polys=TRUE)
>>
>> # Then, perform crop and mask procedures as usual
>> land.crop <- crop(land, extent(contorno_poly), snap='out')
>> contorno.na <- setValues(land.crop, NA)
>> contorno.r <- rasterize(contorno_poly, contorno.na)
>> land_mask <- mask(x=land.crop, mask=contorno_poly)
>>
>> #Check final result
>> plot(land_mask)
>> ---------------------------------------------------
>>
>> Saudações,
>> --
>> Thiago V. dos Santos
>> PhD student
>> Land and Atmospheric Science
>> University of Minnesota
>> http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm
>> Phone: (612) 323 9898
>> ------------------------------------------------------------------------
>> *From:* ASANTOS <alexandresantosbr em yahoo.com.br>
>> *To:* r-br em listas.c3sl.ufpr.br; Thiago V. dos Santos 
>> <thi_veloso em yahoo.com.br>
>> *Sent:* Saturday, April 6, 2013 1:17 PM
>> *Subject:* Re: [R-br] Criando uma mascara com shapefile sobre raster
>>
>> Thiago
>>
>>  Segue dbf e shx, prj não foi projetado ainda não,
>>
>> https://www.dropbox.com/s/p0idcxmh7td8hgi/Catas_Altas.dbf   ## Dbf
>>
>> https://www.dropbox.com/s/mssh8lq6cy61ncd/Catas_Altas.shx ## Shx,
>>
>>
>> Muito obrigado,
>>
>>
>> Alexandre
>>
>>
>> Em 06/04/2013 14:05, Thiago V. dos Santos escreveu:
>>> Alexandre,
>>>
>>> O .shp é só uma parte do dado, a geometria. Para reproduzir o seu 
>>> problema, vou precisar também do .dbf e do .shx, além do .prj se ele 
>>> já estiver projetado.
>>>
>>> Saudações,
>>> --
>>> Thiago V. dos Santos
>>> PhD student
>>> Land and Atmospheric Science
>>> University of Minnesota
>>> http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm
>>> Phone: (612) 323 9898
>>> ------------------------------------------------------------------------
>>> *From:* ASANTOS <alexandresantosbr em yahoo.com.br> 
>>> <mailto:alexandresantosbr em yahoo.com.br>
>>> *To:* r-br em listas.c3sl.ufpr.br <mailto:r-br em listas.c3sl.ufpr.br>
>>> *Sent:* Saturday, April 6, 2013 11:32 AM
>>> *Subject:* Re: [R-br] Criando uma mascara com shapefile sobre raster
>>>
>>> Obrigado pela atenção Thiago,
>>>
>>>    Tentei fazer um CRM, mas com raster estava difícil, coloquei no 
>>> dropbox mesmo, segue a ultima tentativa que fiz com suas dicas:
>>>
>>> #
>>> require(raster)
>>>
>>> #Dados
>>> https://www.dropbox.com/s/lzj71k9vt6dbou1/LANDSAT_5_TM_20100506_217_074_L2_BAND7.tif#Raster 
>>> in tiff
>>> https://www.dropbox.com/s/bfcwpbw36gdlwjq/Catas_Altas.shp#contorno 
>>> em shapefile
>>> #
>>> land.img<- stack(c("LANDSAT_5_TM_20100506_217_074_L2_BAND7.tif")) ## 
>>> Imagem Landsat 5
>>> plotRGB(land.img,1) #Plota a banda 7 da imagem
>>>
>>> #Poligono de interesse em shapefile comm coordenadas em UTM
>>> contorno<- readShapeLines("Catas_Altas.shp", 
>>> proj4string=CRS("+proj=utm +zone=23 +south +datum=WGS84 +units=m 
>>> +no_defs"))
>>> #
>>> #Quero selecionar os pixels da imagem que estão contidos no interior 
>>> do polígono contorno
>>> A.crop <- crop(land.img, extent(contorno), snap='out')
>>> contorno.na<-setValues(A.crop, NA)
>>> contorno.r<-rasterize(contorno, contorno.na)
>>> C <- mask(x=A.crop, mask=contorno.r)
>>> #
>>>
>>>
>>> Em 05/04/2013 09:18, Thiago V. dos Santos escreveu:
>>>> Mas você recebe algum erro ou o resultado é diferente do esperado?
>>>>
>>>> O melhor mesmo seria fornecer seus dados para tentarmos reproduzir 
>>>> o problema. Não dá pra colocar no dropbox? 50Mb não é nada tão 
>>>> grande assim...
>>>> Saudações,
>>>> --
>>>> Thiago V. dos Santos
>>>> PhD student
>>>> Land and Atmospheric Science
>>>> University of Minnesota
>>>> http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm
>>>> Phone: (612) 323 9898
>>>> ------------------------------------------------------------------------
>>>> *From:* ASANTOS <alexandresantosbr em yahoo.com.br> 
>>>> <mailto:alexandresantosbr em yahoo.com.br>
>>>> *To:* r-br em listas.c3sl.ufpr.br <mailto:r-br em listas.c3sl.ufpr.br>; 
>>>> Thiago V. dos Santos <thi_veloso em yahoo.com.br> 
>>>> <mailto:thi_veloso em yahoo.com.br>
>>>> *Sent:* Thursday, April 4, 2013 9:23 PM
>>>> *Subject:* Re: [R-br] Criando uma mascara com shapefile sobre raster
>>>>
>>>> Thiago,
>>>>
>>>>       Explicando melhor teoricamente, pois um CRM implicaria em uma
>>>> imagem de 50MB, tenho:
>>>>
>>>> 1) Uma imagem do landsat 5 com um quadrante de interesse;
>>>> 2)Um contorno em shapefile de uma área de 200 hectares.
>>>>
>>>>     Quero utilizar apenas os pixels da imagem contidos no interior da
>>>> área de 200 hectares, para tanto extend() não resolve pois utiliza
>>>> apenas utiliza coordenadas max e min e não considera a forma 
>>>> (contorno)
>>>> do meu polígono para seleção dos pixels contidos nele.
>>>>
>>>>     Não consegui realizar o que desejo com a rotina sugerida. Mascara,
>>>> usei como um termo que implica em área útil da imagem, não quero o
>>>> quadrante todo oferecido pela imagem, mas aquilo que esta contido 
>>>> no meu
>>>> shapefile.
>>>>
>>>> Obrigado pela atenção,
>>>>
>>>> Alexandre
>>>>
>>>>
>>>>
>>>> Em 04/04/2013 21:03, Thiago V. dos Santos escreveu:
>>>> > Alexandre,
>>>> >
>>>> > O que a área do raster tem a ver com o tipo de função usada para 
>>>> carregar o shapefile?
>>>> >
>>>> > Você não consegui recortar o raster com o shapefile usando os 
>>>> comandos que eu eu sugeri? O que exatamente você quis dizer com 
>>>> criar uma máscara na pergunta inicial?
>>>> >
>>>> > Saudações,
>>>> > --
>>>> > Thiago V. dos Santos
>>>> > PhD student
>>>> > Land and Atmospheric Science
>>>> > University of Minnesota
>>>> > 
>>>> http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm
>>>> > Phone: (612) 323 9898
>>>> >
>>>> >
>>>> > ----- Original Message -----
>>>> > From: ASANTOS <alexandresantosbr em yahoo.com.br 
>>>> <mailto:alexandresantosbr em yahoo.com.br>>
>>>> > To: r-br em listas.c3sl.ufpr.br <mailto:r-br em listas.c3sl.ufpr.br>
>>>> > Cc:
>>>> > Sent: Thursday, April 4, 2013 5:14 PM
>>>> > Subject: Re: [R-br] Criando uma mascara com shapefile sobre raster
>>>> >
>>>> > Thiago,
>>>> >
>>>> >            Não deu certo não, transformei em
>>>> > 
>>>> SpatialPolygons(list(Polygons(list(Polygon(contorno2)),"contorno2"))),
>>>> > prefiro continuar tentando com readShapeLines("Catas_Altas.shp",
>>>> > proj4string=CRS("+proj=utm +zone=23 +south +datum=WGS84 +units=m
>>>> > +no_defs")), porque consigo visualizar a área sobre o raster, achei
>>>> > alguns posts mais usando o GRASS, mas gostaria de fazer tudo só no R.
>>>> >
>>>> > Obrigado,
>>>> >
>>>> > Alexandre
>>>> >
>>>> >
>>>> > Em 04/04/2013 12:18, Thiago V. dos Santos escreveu:
>>>> >> Alexandre,
>>>> >>
>>>> >> a) Tente ler o seu shapefile com a funcao readShapePoly.
>>>> >>
>>>> >> b) Se nao der certo, sugiro uma combinacao das funcoes crop e 
>>>> raster. Nesse caso, experimente rodar o seu codigo com as seguintes 
>>>> mudancas:
>>>> >>
>>>> >> require("raster")
>>>> >> A <- stack("LANDSAT_5_TM_20100506_217_074_L2_BAND7.tif")
>>>> >> contorno<- readShapePoly("Catas_Altas.shp")
>>>> >>
>>>> >> A.crop <- crop(A, extent(contorno), snap='out')
>>>> >>
>>>> >> contorno.na<-setValues(A.crop, NA)
>>>> >> contorno.r<-rasterize(contorno, contorno.na) ### isso pode 
>>>> demorar, dependendo do seu shapefile
>>>> >> C <- mask(x=A.crop, mask=contorno.r)
>>>> >>
>>>> >>
>>>> >> Saudações,
>>>> >>
>>>> >> --
>>>> >> Thiago V. dos Santos
>>>> >> PhD student
>>>> >> Land and Atmospheric Science
>>>> >> University of Minnesota
>>>> >> 
>>>> http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm
>>>> >> Phone: (612) 323 9898
>>>> >>
>>>> >>
>>>> >> ----- Original Message -----
>>>> >> From: ASANTOS<alexandresantosbr em yahoo.com.br 
>>>> <mailto:alexandresantosbr em yahoo.com.br>>
>>>> >> To:r-br em listas.c3sl.ufpr.br <mailto:r-br em listas.c3sl.ufpr.br>
>>>> >> Cc:
>>>> >> Sent: Thursday, April 4, 2013 10:31 AM
>>>> >> Subject: [R-br] Criando uma mascara com shapefile sobre raster
>>>> >>
>>>> >> Boa tarde pessoal,
>>>> >>
>>>> >>            Estou com um problema e não consigo criar uma mascara 
>>>> com um arquivo no formato shapefile sobre raster usando a função 
>>>> crop() do pacote raster, por algum motivo meu objeto contorno que é 
>>>> um SpatialLinesDataFrame não esta servido para oferecer o polígono 
>>>> limítrofe da área, alguém poderia me dar um help, segue CRM:
>>>> >>
>>>> >> require("raster")
>>>> >> A <- stack(c("LANDSAT_5_TM_20100506_217_074_L2_BAND7.tif"))## Imagem
>>>> >> plotRGB(A) ## Plota a imagem
>>>> >> contorno<- readShapeLines("Catas_Altas.shp") ## Contorno da área
>>>> >> lines(contorno, col="red")Plota o contorno
>>>> >> C <- crop(A,contorno) ## Recorta o que esta contido no contorno 
>>>> na imagem
>>>> >> Erro em .local(x, y, ...) :
>>>> >>      nenhum slot de nome "legend" para esse objeto de classe 
>>>> "RasterStack"
>>>> >>
>>>> >>
>>>> >> -- 
>>>> ======================================================================
>>>> >> Alexandre dos Santos
>>>> >> Proteção Florestal
>>>> >> Coordenador do curso Técnico em Florestas
>>>> >> Vice Coordenador do curso de Engenharia 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 8132-8112 (TIM)  (+55) 65 9686-6970 (VIVO)
>>>> >> e-mails:alexandresantosbr em yahoo.com.br 
>>>> <mailto:alexandresantosbr em yahoo.com.br>
>>>> >> alexandre.santos em cas.ifmt.edu.br 
>>>> <mailto:alexandre.santos em cas.ifmt.edu.br>
>>>> >> 
>>>> ======================================================================
>>>> >>
>>>> >> _______________________________________________
>>>> >> R-br mailing list
>>>> >> R-br em listas.c3sl.ufpr.br <mailto:R-br em listas.c3sl.ufpr.br>
>>>> >> 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.
>>>> >>
>>>> >>
>>>>
>>>> -- 
>>>> ======================================================================
>>>> Alexandre dos Santos
>>>> Proteção Florestal
>>>> Coordenador do curso Técnico em Florestas
>>>> Vice Coordenador do curso de Engenharia 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 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO)
>>>> e-mails:alexandresantosbr em yahoo.com.br 
>>>> <mailto:alexandresantosbr em yahoo.com.br>
>>>> alexandre.santos em cas.ifmt.edu.br 
>>>> <mailto:alexandre.santos em cas.ifmt.edu.br>
>>>> ======================================================================
>>>>
>>>>
>>>>
>>>
>>> -- 
>>> ======================================================================
>>> Alexandre dos Santos
>>> Proteção Florestal
>>> Coordenador do curso Técnico em Florestas
>>> Vice Coordenador do curso de Engenharia 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 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)
>>> e-mails:alexandresantosbr em yahoo.com.br  <mailto:e-mails:alexandresantosbr em yahoo.com.br>  
>>>          alexandre.santos em cas.ifmt.edu.br  <mailto:alexandre.santos em cas.ifmt.edu.br>                     
>>> ======================================================================
>>>
>>> _______________________________________________
>>> R-br mailing list
>>> R-br em listas.c3sl.ufpr.br <mailto:R-br em listas.c3sl.ufpr.br>
>>> 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.
>>>
>>>
>>>
>>> _______________________________________________
>>> R-br mailing list
>>> R-br em listas.c3sl.ufpr.br  <mailto:R-br em listas.c3sl.ufpr.br>
>>> 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.
>>
>> -- 
>> ======================================================================
>> Alexandre dos Santos
>> Proteção Florestal
>> Coordenador do curso Técnico em Florestas
>> Vice Coordenador do curso de Engenharia 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 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)
>> e-mails:alexandresantosbr em yahoo.com.br  <mailto:e-mails:alexandresantosbr em yahoo.com.br>  
>>          alexandre.santos em cas.ifmt.edu.br  <mailto:alexandre.santos em cas.ifmt.edu.br>                     
>> ======================================================================
>>
>>
>
> -- 
> ======================================================================
> Alexandre dos Santos
> Proteção Florestal
> Coordenador do curso Técnico em Florestas
> Vice Coordenador do curso de Engenharia 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 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)
> e-mails:alexandresantosbr em yahoo.com.br  
>          alexandre.santos em cas.ifmt.edu.br                     
> ======================================================================
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> 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.

-- 
======================================================================
Alexandre dos Santos
Proteção Florestal
Coordenador do curso Técnico em Florestas
Vice Coordenador do curso de Engenharia 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 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)
e-mails:alexandresantosbr em yahoo.com.br
         alexandre.santos em cas.ifmt.edu.br
======================================================================

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


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