extracao da Longitude correta para dados de SST

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.6 require(reshape) require(chron) ###sst nc <- 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 tunits tunits$value # criar tempo "real" Times time<- get.var.ncdf(nc,"time") Time<-chron(time,origin=c(month=1, day=1, year=1900)) ## array da variavel sst wm <- get.var.ncdf(nc, "sst") str(wm) ## atribuindo dimnames conforme lon, lat e tempo dimnames(wm)[[1]] <- as.character(lon) dimnames(wm)[[2]] <- as.character(lat) dimnames(wm)[[3]] <- as.character(Time) str(wm) ## melt para reestruturação dos dados mwm <- melt(wm) head(mwm)

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/inde... Phone: (612) 323 9898 On Thursday, December 4, 2014 8:56 PM, Humberto <hghazin@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@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.

Muito obrigado Thiago !!!! Vou rodar aqui e reorganizar o script!!!! De: R-br [mailto:r-br-bounces@listas.c3sl.ufpr.br] Em nome de Thiago V. dos Santos Enviada em: Friday, December 05, 2014 2:31 AM Para: r-br@listas.c3sl.ufpr.br Assunto: Re: [R-br] extracao da Longitude correta para dados de SST 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 dimension t <- ncvar_get(nc,"time") tunits <- ncatt_get(nc,"time","units") # show "real" times tustr <- 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> http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/inde... Phone: (612) 323 9898 On Thursday, December 4, 2014 8:56 PM, Humberto < <mailto:hghazin@hotmail.com> hghazin@hotmail.com> wrote: 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.6 require(reshape) require(chron) ###sst nc <- 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 tunits tunits$value # criar tempo "real" Times time<- get.var.ncdf(nc,"time") Time<-chron(time,origin=c(month=1, day=1, year=1900)) ## array da variavel sst wm <- get.var.ncdf(nc, "sst") str(wm) ## atribuindo dimnames conforme lon, lat e tempo dimnames(wm)[[1]] <- as.character(lon) dimnames(wm)[[2]] <- as.character(lat) dimnames(wm)[[3]] <- as.character(Time) str(wm) ## melt para reestruturação dos dados mwm <- melt(wm) head(mwm) _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br <mailto:R-br@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.

Como eu baixo este pacote ncdf4, quando eu tento baixá-lo diz que não está disponível na versão R 3.1 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 dimension t <- ncvar_get(nc,"time") tunits <- ncatt_get(nc,"time","units") # show "real" times tustr <- 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/inde... Phone: (612) 323 9898 On Thursday, December 4, 2014 8:56 PM, Humberto <hghazin@hotmail.com> wrote: 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.6 require(reshape) require(chron) ###sst nc <- 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 tunits tunits$value # criar tempo "real" Times time<- get.var.ncdf(nc,"time") Time<-chron(time,origin=c(month=1, day=1, year=1900)) ## array da variavel sst wm <- get.var.ncdf(nc, "sst") str(wm) ## atribuindo dimnames conforme lon, lat e tempo dimnames(wm)[[1]] <- as.character(lon) dimnames(wm)[[2]] <- as.character(lat) dimnames(wm)[[3]] <- as.character(Time) str(wm) ## melt para reestruturação dos dados mwm <- melt(wm) head(mwm) --- Este email foi escaneado pelo Avast antivírus. http://www.avast.com

Olá Mauro, Tente baixar por este link https://www.dropbox.com/s/o8v4m4b4uce4djj/ncdf4_1.12.zip?dl=0 Enviado do meu iPhone
Em 06/12/2014, às 21:50, Mauro Sznelwar <sznelwar@uol.com.br> escreveu:
Como eu baixo este pacote ncdf4, quando eu tento baixá-lo diz que não está disponível na versão R 3.1
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 dimension t <- ncvar_get(nc,"time") tunits <- ncatt_get(nc,"time","units")
# show "real" times tustr <- 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/inde... Phone: (612) 323 9898
On Thursday, December 4, 2014 8:56 PM, Humberto <hghazin@hotmail.com> wrote:
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.6 require(reshape) require(chron)
###sst nc <- 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 tunits tunits$value
# criar tempo "real" Times time<- get.var.ncdf(nc,"time") Time<-chron(time,origin=c(month=1, day=1, year=1900))
## array da variavel sst wm <- get.var.ncdf(nc, "sst") str(wm)
## atribuindo dimnames conforme lon, lat e tempo dimnames(wm)[[1]] <- as.character(lon) dimnames(wm)[[2]] <- as.character(lat) dimnames(wm)[[3]] <- as.character(Time) str(wm)
## melt para reestruturação dos dados mwm <- melt(wm) head(mwm)
Este email foi escaneado pelo Avast antivírus. www.avast.com
_______________________________________________ R-br mailing list R-br@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.

Alternativamente, direto do site do desenvolvedor (para acompanhar atualizações): http://cirrus.ucsd.edu/~pierce/ncdf/ Saudações, -- Thiago V. dos Santos PhD student Land and Atmospheric Science University of Minnesota http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/inde... Phone: (612) 323 9898 On Saturday, December 6, 2014 6:58 PM, Humberto <hhazin@gmail.com> wrote: Olá Mauro, Tente baixar por este link https://www.dropbox.com/s/o8v4m4b4uce4djj/ncdf4_1.12.zip?dl=0 Enviado do meu iPhone Em 06/12/2014, às 21:50, Mauro Sznelwar <sznelwar@uol.com.br> escreveu: #yiv1109500113 #yiv1109500113 -- _filtered #yiv1109500113 {font-family:Helvetica;panose-1:2 11 6 4 2 2 2 2 2 4;} _filtered #yiv1109500113 {font-family:Helvetica;panose-1:2 11 6 4 2 2 2 2 2 4;} _filtered #yiv1109500113 {font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;}#yiv1109500113 #yiv1109500113 p.yiv1109500113MsoNormal, #yiv1109500113 li.yiv1109500113MsoNormal, #yiv1109500113 div.yiv1109500113MsoNormal {margin:0cm;margin-bottom:.0001pt;font-size:12.0pt;}#yiv1109500113 a:link, #yiv1109500113 span.yiv1109500113MsoHyperlink {color:blue;text-decoration:underline;}#yiv1109500113 a:visited, #yiv1109500113 span.yiv1109500113MsoHyperlinkFollowed {color:purple;text-decoration:underline;}#yiv1109500113 p.yiv1109500113msonormal, #yiv1109500113 li.yiv1109500113msonormal, #yiv1109500113 div.yiv1109500113msonormal {margin-right:0cm;margin-left:0cm;font-size:12.0pt;}#yiv1109500113 p.yiv1109500113msochpdefault, #yiv1109500113 li.yiv1109500113msochpdefault, #yiv1109500113 div.yiv1109500113msochpdefault {margin-right:0cm;margin-left:0cm;font-size:12.0pt;}#yiv1109500113 span.yiv1109500113msohyperlink {}#yiv1109500113 span.yiv1109500113msohyperlinkfollowed {}#yiv1109500113 span.yiv1109500113estilodeemail17 {}#yiv1109500113 p.yiv1109500113msonormal1, #yiv1109500113 li.yiv1109500113msonormal1, #yiv1109500113 div.yiv1109500113msonormal1 {margin:0cm;margin-bottom:.0001pt;font-size:11.0pt;}#yiv1109500113 span.yiv1109500113msohyperlink1 {color:#0563C1;text-decoration:underline;}#yiv1109500113 span.yiv1109500113msohyperlinkfollowed1 {color:#954F72;text-decoration:underline;}#yiv1109500113 span.yiv1109500113estilodeemail171 {color:windowtext;}#yiv1109500113 p.yiv1109500113msochpdefault1, #yiv1109500113 li.yiv1109500113msochpdefault1, #yiv1109500113 div.yiv1109500113msochpdefault1 {margin-right:0cm;margin-left:0cm;font-size:12.0pt;}#yiv1109500113 span.yiv1109500113EstiloDeEmail27 {color:#1F497D;}#yiv1109500113 .yiv1109500113MsoChpDefault {font-size:10.0pt;} _filtered #yiv1109500113 {margin:70.85pt 3.0cm 70.85pt 3.0cm;}#yiv1109500113 div.yiv1109500113Section1 {}#yiv1109500113 Comoeu baixo este pacote ncdf4, quando eu tento baixá-lo diz que não está disponível naversão R 3.1 Humberto, Obrigado pelo exemplocompletamente reprodutível. O pacote ncdf não é maisatualizado pelo David Pierce e muito em breve o seu codigo pode nao maisfuncionar. Use o ncdf4, que é mantido e regularmente atualizado. Ao fazer issovocê terá de reformular o código, por exemplo 'open.ncdf' vira 'nc_open', masdessa forma você garante que o seu codigo continue funcionando pelos próximosanos. A solucao ideal para o seuproblema seria usar a funcao 'rotate' do pacote raster mas isso não é possívelporque a grade do seu arquivo não é regular. Dessa forma a minha sugestão parareprojetar a longitude 'na marra' é: new_lon = ((lon + 180) %%360) - 180 A diferença de 0.5 grau entreo que eu recomendo e o que você espera se deve à implementação de cadasoftware: em alguns a coordenada é do canto da grade, enquanto em outros acoordenada é 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 oseu vetor de datas está incorreto porque está sendo criado de uma origemdiferente da origem embebida no netcdf (ano 1900 ao invés de 1800). Uma solucaoque resgata os valores de data diretamente do arquivo é a seguinte (note que asfunções já são do ncdf4): # get time dimension t <-ncvar_get(nc,"time") tunits <-ncatt_get(nc,"time","units") # show "real" times tustr <-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 paravisualização das datas em um formato "humano", mas se você vairecriar o arquivo, provavelmente você montará a dimensao de tempo usando ovetor "t". Saudações, -- Thiago V. dos Santos PhD student Land and Atmospheric Science University of Minnesota http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/inde... Phone: (612) 323 9898 On Thursday, December 4, 20148:56 PM, Humberto <hghazin@hotmail.com> wrote: 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 estouutilizando 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.6 require(reshape) require(chron) ###sst nc <- 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 tunits tunits$value # criar tempo "real" Times time<-get.var.ncdf(nc,"time") Time<-chron(time,origin=c(month=1,day=1, year=1900)) ## array da variavel sst wm <- get.var.ncdf(nc, "sst") str(wm) ## atribuindo dimnames conforme lon, lat e tempo dimnames(wm)[[1]] <- as.character(lon) dimnames(wm)[[2]] <- as.character(lat) dimnames(wm)[[3]] <-as.character(Time) str(wm) ## melt para reestruturação dos dados mwm <- melt(wm) head(mwm) | | Este email foi escaneado pelo Avast antivírus. www.avast.com | _______________________________________________ R-br mailing list R-br@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.

## usando rotate require(raster) b <- brick("~/Downloads/SST_81_14.nc", *stopIfNotEqualSpaced=FALSE*) b extent(b) ## fix long extent(b) <- c(0, 360, -51, 11) b plot(b) ## rotate br <- rotate(b) extent(br) br <- setValues(br, getValues(b)) plot(br) 2014-12-05 0:55 GMT-02:00 Humberto <hghazin@hotmail.com>:
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.6
require(reshape)
require(chron)
###sst
nc <- 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 tunits
tunits$value
# criar tempo "real" Times
time<- get.var.ncdf(nc,"time")
Time<-chron(time,origin=c(month=1, day=1, year=1900))
## array da variavel sst
wm <- get.var.ncdf(nc, "sst")
str(wm)
## atribuindo dimnames conforme lon, lat e tempo
dimnames(wm)[[1]] <- as.character(lon)
dimnames(wm)[[2]] <- as.character(lat)
dimnames(wm)[[3]] <- as.character(Time)
str(wm)
## melt para reestruturação dos dados
mwm <- melt(wm)
head(mwm)
_______________________________________________ R-br mailing list R-br@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.
-- ############################################################### ## Jônatan Dupont Tatsch ## Professor do Departamento de Física ## Centro de Ciências Exatas e Naturais (CCNE) ## Universidade Federal de Santa Maria ## Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil - 97105-900 ## Telefone: +55(55)33012083 ## www.ufsm.br/meteorologia ###############################################################
participantes (6)
-
Humberto
-
Humberto
-
Humberto Hazin
-
Jônatan
-
Mauro Sznelwar
-
Thiago V. dos Santos