[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