[R-br] extracao da Longitude correta para dados de SST

Thiago V. dos Santos thi_veloso em yahoo.com.br
Sexta Dezembro 5 03:30:35 BRST 2014


Humberto,
Obrigado pelo exemplo completamente reprodutível.
O pacote ncdf não é mais atualizado pelo David Pierce e muito em breve o seu codigo pode nao mais funcionar. Use o ncdf4, que é mantido e regularmente atualizado. Ao fazer isso você terá de reformular o código, por exemplo 'open.ncdf' vira 'nc_open', mas dessa forma você garante que o seu codigo continue funcionando pelos próximos anos.
A solucao ideal para o seu problema seria usar a funcao 'rotate' do pacote raster mas isso não é possível porque a grade do seu arquivo não é regular. Dessa forma a minha sugestão para reprojetar a longitude 'na marra' é:
new_lon = ((lon + 180) %% 360) - 180
A diferença de 0.5 grau entre o que eu recomendo e o que você espera se deve à implementação de cada software: em alguns a coordenada é do canto da grade, enquanto em outros a coordenada é do centro da grade. Ajuste o resultado conforme a sua necessidade (i.e. new_lon <- new_lon + 0.5).
Por último, note também que o seu vetor de datas está incorreto porque está sendo criado de uma origem diferente da origem embebida no netcdf (ano 1900 ao invés de 1800). Uma solucao que resgata os valores de data diretamente do arquivo é a seguinte (note que as funções já são do ncdf4):

# get time dimensiont <- ncvar_get(nc,"time")tunits <- ncatt_get(nc,"time","units")
# show "real" timestustr <- strsplit(tunits$value, " ") tdstr <- strsplit(unlist(tustr)[3], "-")tmonth <- as.integer(unlist(tdstr)[2])tday <- as.integer(unlist(tdstr)[3])tyear <- as.integer(unlist(tdstr)[1])ndate <- as.Date(chron(t, out.format='year-month-day', origin=c(tmonth, tday, tyear)))
O vetor ndate serve para visualização das datas em um formato "humano", mas se você vai recriar o arquivo, provavelmente você montará a dimensao de tempo usando o vetor "t". 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 

     On Thursday, December 4, 2014 8:56 PM, Humberto <hghazin em hotmail.com> wrote:
   

 <!--#yiv7845785605 _filtered #yiv7845785605 {font-family:"Cambria Math";panose-1:2 4 5 3 5 4 6 3 2 4;} _filtered #yiv7845785605 {font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;}#yiv7845785605 #yiv7845785605 p.yiv7845785605MsoNormal, #yiv7845785605 li.yiv7845785605MsoNormal, #yiv7845785605 div.yiv7845785605MsoNormal {margin:0in;margin-bottom:.0001pt;font-size:11.0pt;font-family:"Calibri", sans-serif;}#yiv7845785605 a:link, #yiv7845785605 span.yiv7845785605MsoHyperlink {color:#0563C1;text-decoration:underline;}#yiv7845785605 a:visited, #yiv7845785605 span.yiv7845785605MsoHyperlinkFollowed {color:#954F72;text-decoration:underline;}#yiv7845785605 span.yiv7845785605EstiloDeEmail17 {font-family:"Calibri", sans-serif;color:windowtext;}#yiv7845785605 .yiv7845785605MsoChpDefault {font-family:"Calibri", sans-serif;} _filtered #yiv7845785605 {margin:70.85pt 85.05pt 70.85pt 85.05pt;}#yiv7845785605 div.yiv7845785605WordSection1 {}-->Boa noite pessoal,  Estou extraindo de um arquivo ncdf os valores de latitude (lat) longitude( lon)  e temperatura da superfície da agua do mar( SST), entretanto a longitude (lon) ela está na projeção 0 a 360 graus. Minha pergunta é como faço para converter ela para -180 a 180 graus? Segue o script que estou utilizando juntamente com o link dos dados.Desde já agradeço a ajuda Humberto   
|           lon |              lat |      data |           sst |  |                Lon como deveria ser |
| 299.5 | 10.5 | 11/30/1981 | 27.85 |    | -60.000 |
| 300.5 | 10.5 | 11/30/1981 | 27.96 |    | -59.500 |
| 301.5 | 10.5 | 11/30/1981 | 28.02 |    | -58.500 |
| 302.5 | 10.5 | 11/30/1981 | 28.02 |    | -57.500 |
| 303.5 | 10.5 | 11/30/1981 | 27.97 |    | -56.500 |
| 304.5 | 10.5 | 11/30/1981 | 27.84 |    | -55.500 |
| 305.5 | 10.5 | 11/30/1981 | 27.81 |    | -54.500 |
| 306.5 | 10.5 | 11/30/1981 | 27.78 |    | -53.500 |
| 307.5 | 10.5 | 11/30/1981 | 27.75 |    | -52.500 |

    Link para acesso dos dados https://www.dropbox.com/s/xnab2g365mduykx/SST_81_14.nc?dl=0  Script:require(ncdf) #'ncdf' versao 1.6.6require(reshape)require(chron)  ###sstnc <- open.ncdf("SST_81_14.nc")nc  lat <- get.var.ncdf(nc, "lat")lon <- get.var.ncdf(nc, "lon")tunits <- att.get.ncdf(nc,"time","units")  # print tunitstunits$value  # criar tempo "real" Timestime<- get.var.ncdf(nc,"time")Time<-chron(time,origin=c(month=1, day=1, year=1900))  ## array da variavel sstwm <- get.var.ncdf(nc, "sst")str(wm)  ## atribuindo dimnames conforme lon, lat e tempodimnames(wm)[[1]] <- as.character(lon)dimnames(wm)[[2]] <- as.character(lat)dimnames(wm)[[3]] <- as.character(Time)str(wm)  ## melt para reestruturação dos dadosmwm <- melt(wm)head(mwm)
_______________________________________________
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/20141205/f7f7a44a/attachment.html>


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