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

Thiago V. dos Santos thi_veloso em yahoo.com.br
Sábado Abril 6 19:52:42 BRT 2013


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>
>To: 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>
>>To: r-br em listas.c3sl.ufpr.br; Thiago V. dos Santos <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>
>>> To: 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>
>>>> To: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
>>>>            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
>>======================================================================
>>
>>
>>
>>
>
>-- 
======================================================================
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.
>
>
>
>
>_______________________________________________
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/c0ed92aa/attachment-0001.html>


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