[R-sig-Geo] Coordinate/grid for ncdf data

David Pierce dpierce at ucsd.edu
Thu Aug 9 18:25:29 CEST 2007


Hello,

the reason you are getting that error from the ncdf package is because you
have defined variable "Radon" to be a *two* dimensional array in the
netcdf file.  The number of entries in dimension 1 is length(long) =
10573, and the number of entries in dimension 2 is length(lat) = 10573. 
So, the total number of entries in the array in the netcdf file is
length(long) * length(lat) = 10573 * 10573 = 111788329.

You only want to define a 2-d array when the location of data[i,j] can be
described as (lon[i],lat[j]).  That is not the case for your data, because
it is not on any sort of grid.  Instead, you will want to create a set of
3 1-dimensional arrays along the following lines:

n_stations <- length(RN01)
dim_station <- dim.def.ncdf( 'Radon_station', '-', 1:n_stations )

var_lon <- var.def.ncdf( 'Longitude', 'degreesE', dim_station, 1.e30 )
var_lat <- var.def.ncdf( 'Latitude',  'degreesN', dim_station, 1.e30 )
var_radon <- var.def.ncdf( 'Radon',   'Bq/m2/h1', dim_stattion, 1.e30 )

ncid_out <- create.ncdf( 'rn.weekly.nc', list(var_lon,var_lat,var_radon))

put.var.ncdf( ncid_out, var_lon, long )
put.var.ncdf( ncid_out, var_lat, lat  )
put.var.ncdf( ncid_out, var_radon, RN01 )

close.ncdf( ncid_out )

Now, the location of data point RN01[i] is correctly described as
(lon[i],lat[i]); compare this to what you were trying before, which was
RN01[i,j] having the location (lon[i],lat[j]).

Regards,

--Dave




Thomas Szegvary wrote:
> I use ncdf V1.6 on Windows XP Sp2, I hava attached the sample file (tab
> delim) which contains 2 columns for coordinates long/lat and 10 columns
> for
> weekly averages of radon. Sp would be the best solution to produce map I
> guess, but for time series analysis I think netcdf would perform better.
>
> Thanks,thoams
>
>
>
> -----Ursprüngliche Nachricht-----
> Von: Michael Sumner [mailto:mdsumner at utas.edu.au]
> Gesendet: Donnerstag, 9. August 2007 01:49
> An: 'Thomas Szegvary'; r-sig-geo at stat.math.ethz.ch
> Betreff: RE: [R-sig-Geo] Coordinate/grid for ncdf data
>
> Hi, can you provide an example file?
>
> I'd recommend avoiding NetCDF for various reasons, why don't you simply
> add
> each value column from the separate files to a new column in a
> SpatialGridDataFrame?
>
> That would be the recommend sp way to proceed here. If you really need to
> create a NetCDF file, please let us know more about your OS and the
> package/s and versions you are using (ncdf I presume?) - however such
> questions should include the ncdf(?) package author at least.
>
> Cheers, Mike.
>
> -----Original Message-----
> From: r-sig-geo-bounces at stat.math.ethz.ch
> [mailto:r-sig-geo-bounces at stat.math.ethz.ch] On Behalf Of Thomas Szegvary
> Sent: Wednesday, 8 August 2007 11:13 PM
> To: r-sig-geo at stat.math.ethz.ch
> Subject: [R-sig-Geo] Coordinate/grid for ncdf data
>
> Hi!
>
> I have a table with 3 columns, 2 for long/lat coordinates and 1 for values
> (radon concentration). I have data for every week of the year
> 2006,distributed in 52 tables/files. I want to create a NetCDF file, which
> is much easier to handle than extracting the values from 52 tables. I
> tried
> the following for the first dataset (i.e first week):
>
> #extracting coordinates and values from my tables (which have also other
> information I don't need)
> W01<-read.table("RN_weekly/KW01_RN.dat")
> long<-W01$V1
> lat<-W01$V2
> RN01<-W01$V3
>
> #defining dimensions for coordinates
> dim1 <- dim.def.ncdf( "EW","degrees", as.double(long))
> dim2 <- dim.def.ncdf( "SN","degrees", as.double(lat))
>
> #defining variable for my values I want to have the time series varz <-
> var.def.ncdf("Radon","Bq/m2/h1", list(dim1,dim2), -1,
>           longname="Radon flux rate")
>
> #creating the netcdf file and filling the variable varz with the first
> data-week from my time series nc.rn <- create.ncdf("rn_weekly.nc",varz)
> put.var.ncdf(nc.rn,varz,RN01)
> close.ncdf(nc.rn)
>
>
> The problem now is that the last step (put.var.ncdf) doesn't work, because
> it says I am trying to "error: you asked to write 111788329 values, but
> the
> passed data array only has 10573* entries!". So I think the problem is
> that
> I need an array with two dimensions (coordinates...) for my values. But
> how
> do I get this from my tables??
>
>  *10573 are the pixels for my area
>
> Thanks for any help!
> Thomas
>
>
> __
>
> Thomas Szegvary
> Institute of Environmental Geosciences
> Department of Geosciences
> University of Basel
> Bernoullistrasse 30
> CH - 4056 Basel
>
> Tel.  41-61-267 04 82
> Fax. 41-61-267 04 79
> Email: t.szegvary at unibas.ch
> www.radon.unibas.ch
> www.unibas.ch/environment
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>


---------------------------------------------------------------
David W. Pierce        / Climate Research Division
Scripps Inst. Oceanog. / (858) 534-8276 (voice)
dpierce at ucsd.edu       / (858) 534-8561 (fax)




More information about the R-sig-Geo mailing list