Spatial coordinates are exported as cell centered coordinates. The projection can be optionally stored in the metadata as crs attributes . The netCDF projection metadata storage follows the spatial_ref GDAL/netCDF suggestion here and the netCDF CF 1.6 convention here using WKT projection information. Additional a PROJ string is stored in the crs attribute section. The export of projection parameters is suppressed when the XY-projection is set.
The range of the 3D raster map is set in the netCDF output file. Optionally a the netCDF missing value and _FillValue can be set using the null option. As default the netCDF floating point _FillValues are used to fill empty cell.
The netCDF library must be installed on the system and activated at configuration time to compile this module.
g.region s=-90 n=90 w=-180 e=180 b=0 t=5 res=10 res3=10 tbres=1 -p3 ##################################################################### # We create a simple volume map with floating point values ##################################################################### r3.mapcalc --o expr="volume_float = float(col() + row() + depth())" r3.info volume_float +----------------------------------------------------------------------------+ | Layer: volume_float Date: Thu Jun 14 08:40:56 2012 | | Mapset: PERMANENT Login of Creator: soeren | | Location: TestLL | | DataBase: /1/soeren/grassdata | | Title: volume_float | | Units: none | | Vertical unit: units | | Timestamp: none | |----------------------------------------------------------------------------| | | | Type of Map: 3d cell Number of Categories: 0 | | Data Type: FCELL | | Rows: 18 | | Columns: 36 | | Depths: 5 | | Total Cells: 3240 | | Total size: 10114 Bytes | | Number of tiles: 1 | | Mean tile size: 10114 Bytes | | Tile size in memory: 12960 Bytes | | Number of tiles in x, y and z: 1, 1, 1 | | Dimension of a tile in x, y, z: 36, 18, 5 | | | | Projection: Latitude-Longitude (zone 0) | | N: 90N S: 90S Res: 10 | | E: 180E W: 180W Res: 10 | | T: 5 B: 0 Res: 1 | | Range of data: min = 3 max = 59 | | | | Data Source: | | | | | | | | Data Description: | | generated by r3.mapcalc | | | | Comments: | | r3.mapcalc expression="volume_float = float(col() + row() + depth())" | | | +----------------------------------------------------------------------------+ ##################################################################### # We use the netCDF ncdump tool to have a look at the header # and coordinates of the exported netCDF file ##################################################################### r3.out.netcdf --o input=volume_float output=test_float.nc ncdump -c test_float.nc netcdf test_float { dimensions: longitude = 36 ; latitude = 18 ; z = 5 ; variables: float longitude(longitude) ; longitude:units = "degrees_east" ; longitude:long_name = "Longitude values" ; longitude:standard_name = "longitude" ; longitude:axis = "X" ; float latitude(latitude) ; latitude:units = "degrees_north" ; latitude:long_name = "Latitude values" ; latitude:standard_name = "latitude" ; latitude:axis = "Y" ; float z(z) ; z:units = "meter" ; z:long_name = "z coordinate of projection" ; z:standard_name = "projection_z_coordinate" ; z:positive = "up" ; z:axis = "Z" ; float volume_float(z, latitude, longitude) ; volume_float:valid_min = 3.f ; volume_float:valid_max = 59.f ; // global attributes: :Conventions = "CF-1.5" ; :history = "GRASS GIS 7 netCDF export of r3.out.netcdf" ; data: longitude = -175, -165, -155, -145, -135, -125, -115, -105, -95, -85, -75, -65, -55, -45, -35, -25, -15, -5, 5, 15, 25, 35, 45, 55, 65, 75, 85, 95, 105, 115, 125, 135, 145, 155, 165, 175 ; latitude = 85, 75, 65, 55, 45, 35, 25, 15, 5, -5, -15, -25, -35, -45, -55, -65, -75, -85 ; z = 0.5, 1.5, 2.5, 3.5, 4.5 ; } ##################################################################### # Exporting the projection specific settings and a null value ##################################################################### r3.out.netcdf --o -p null=-1 input=volume_float output=test_float.nc ncdump -c test_float.nc netcdf test_float { dimensions: longitude = 36 ; latitude = 18 ; z = 5 ; variables: char crs ; crs:crs_wkt = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ; crs:spatial_ref = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ; crs:crs_proj4 = " +proj=longlat +no_defs +a=6378137 +rf=298.257223563 +towgs84=0.000,0.000,0.000" ; float longitude(longitude) ; longitude:units = "degrees_east" ; longitude:long_name = "Longitude values" ; longitude:standard_name = "longitude" ; longitude:axis = "X" ; float latitude(latitude) ; latitude:units = "degrees_north" ; latitude:long_name = "Latitude values" ; latitude:standard_name = "latitude" ; latitude:axis = "Y" ; float z(z) ; z:units = "meter" ; z:long_name = "z coordinate of projection" ; z:standard_name = "projection_z_coordinate" ; z:positive = "up" ; z:axis = "Z" ; float volume_float(z, latitude, longitude) ; volume_float:valid_min = 3.f ; volume_float:valid_max = 59.f ; volume_float:missing_value = -1.f ; volume_float:_FillValue = -1.f ; volume_float:grid_mapping = "crs" ; // global attributes: :Conventions = "CF-1.5" ; :history = "GRASS GIS 7 netCDF export of r3.out.netcdf" ; data: longitude = -175, -165, -155, -145, -135, -125, -115, -105, -95, -85, -75, -65, -55, -45, -35, -25, -15, -5, 5, 15, 25, 35, 45, 55, 65, 75, 85, 95, 105, 115, 125, 135, 145, 155, 165, 175 ; latitude = 85, 75, 65, 55, 45, 35, 25, 15, 5, -5, -15, -25, -35, -45, -55, -65, -75, -85 ; z = 0.5, 1.5, 2.5, 3.5, 4.5 ; } ##################################################################### # Assigning time as vertical unit and setting an absolute time stamp ##################################################################### r3.timestamp map=volume_float date='1 Jan 2001/5 Jan 2001' r3.support map=volume_float vunit="days" r3.out.netcdf --o -p null=-1 input=volume_float output=test_float.nc ncdump -c test_float.nc netcdf test_float { dimensions: longitude = 36 ; latitude = 18 ; time = 5 ; variables: char crs ; crs:crs_wkt = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ; crs:spatial_ref = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ; crs:crs_proj4 = " +proj=longlat +no_defs +a=6378137 +rf=298.257223563 +towgs84=0.000,0.000,0.000" ; float longitude(longitude) ; longitude:units = "degrees_east" ; longitude:long_name = "Longitude values" ; longitude:standard_name = "longitude" ; longitude:axis = "X" ; float latitude(latitude) ; latitude:units = "degrees_north" ; latitude:long_name = "Latitude values" ; latitude:standard_name = "latitude" ; latitude:axis = "Y" ; int time(time) ; time:units = "days since 2001-01-01 00:00:00" ; time:long_name = "Time in days" ; time:calendar = "gregorian" ; time:positive = "up" ; time:axis = "T" ; float volume_float(time, latitude, longitude) ; volume_float:valid_min = 3.f ; volume_float:valid_max = 59.f ; volume_float:missing_value = -1.f ; volume_float:_FillValue = -1.f ; volume_float:grid_mapping = "crs" ; // global attributes: :Conventions = "CF-1.5" ; :history = "GRASS GIS 7 netCDF export of r3.out.netcdf" ; data: longitude = -175, -165, -155, -145, -135, -125, -115, -105, -95, -85, -75, -65, -55, -45, -35, -25, -15, -5, 5, 15, 25, 35, 45, 55, 65, 75, 85, 95, 105, 115, 125, 135, 145, 155, 165, 175 ; latitude = 85, 75, 65, 55, 45, 35, 25, 15, 5, -5, -15, -25, -35, -45, -55, -65, -75, -85 ; time = 0, 1, 2, 3, 4 ; }
Available at: r3.out.netcdf source code (history)
Latest change: Monday Jan 30 09:36:46 2023 in commit: 0fb05e493f4ef73f4a721b019bffc357be2ec8d6
Main index | 3D raster index | Topics index | Keywords index | Graphical index | Full index
© 2003-2023 GRASS Development Team, GRASS GIS 8.3.dev Reference Manual