2012-10-21 62 views
0

如何在netcdf文件中進行逆向座標轉換? 我有75個經度值和36個緯度值的網格:netcdf文件逆向投影

nc<-create.n("filename.nc") 
#Dimentions 
dim.def.nc(nc,"lon",75) 
dim.def.nc(nc,"lat",36) 
dim.def.nc(nc,"time",365) 
#Vars 
var.def.nc(nc,"Observation","NC_FLOAT", c(1,0,2)) 
var.def.nc(nc,"lon","NC_FLOAT", c(0)) 
var.def.nc(nc,"lat","NC_FLOAT", c(1)) 
var.def.nc(nc,"time","NC_FLOAT", c(2)) 
(...) 

根據unidata文檔,它應該有可能具有的NetCDF做從逆變換(LAT,LON)到(x, y),但我不知道如何執行此操作。我想將我的緯度長的網格轉換成蘭伯特保形網格。

回答

3

這是我自己進行重新投影NetCDF文件的方式:基本上我搶經度,緯度和我想要的數據,並創建一個shape文件,我可以再與包rgdalspmaptools工作。 (這裏的示例使用來自NOAA的數據下載here

library(ncdf) 
library(rgdal) 
library(sp) 
library(maptools) 
nc <- open.ncdf("20130128-ABOM-L4HRfnd-AUS-v01-fv01_0-RAMSSA_09km.nc") 

# Grab the longitude, latitude and data 
lon <- nc$dim$lon$vals 
lat <- nc$dim$lat$vals 
sst <- get.var.ncdf(nc,"analysed_sst") 

# Create a SpatialPointsDataFrame object 
lonlat <- expand.grid(lon,lat) 
sst <- as.data.frame(matrix(sst,ncol=1)) 
dat <- SpatialPointsDataFrame(lonlat, data=sst, 
           proj4string=CRS("+proj=longlat +datum=WGS84 ")) 

# And then reproject 
dat2 <- spTransform(dat,CRS("+proj=lcc")) 
# Of course you have to write the proj4 string that corresponds exactly to the desired projection.