[R-br] Criando uma mascara com shapefile sobre raster
Thiago V. dos Santos
thi_veloso em yahoo.com.br
Sábado Abril 6 22:09:22 BRT 2013
Alexandre,
Acho que consigo ajudar.
a) a imagem final nao tera o histograma adulterado pelo recorte, mas ele sera diferente porque contem apenas uma parte dos dados da imagem original. Se voce quiser manter a mesma escala durante o plot, tera que controlar os valores manualmente (de acordo com o comando para plotar que voce esta usando) para que o range seja o mesmo da imagem original. Isso deixaria as duas imagens "comparaveis".
b) voce nao precisa fazer nenhuma conversao para salvar a imagem final de Tiff. O proprio pacote raster pode salvar (usando drivers do rgdal), em algo parecido com isso:
require(rgdal)
writeRaster(land_mask, filename="landsat_cropped.tif", format="GTiff", overwrite=TRUE)
O comando acima funcionara tanto para uma imagem quanto para brick (ou stack).
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 7:26 PM
Subject: Re: [R-br] Criando uma mascara com shapefile sobre raster
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>
>>>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 ======================================================================
>>
>>
>
>--
======================================================================
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 ======================================================================
_______________________________________________
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.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130406/36812ee6/attachment-0001.html>
Mais detalhes sobre a lista de discussão R-br