A voxel layer represents volumetric, regularly gridded data. The netCDF format is a self-describing file format for storing array-oriented multidimensional data, specifically designed for scientific variables, such as temperature, humidity, pressure, and soil type. The netCDF format is a widely used open data format. To assure that the data can be read as a voxel layer, it must follow the Climate and Forecast (CF) convention. Currently, only CF-compliant netCDF data with no auxiliary variables as a data source is accepted as a source for a voxel layer.
You can learn more about how to create a netCDF file and visualize the data as a voxel layer in the Learn ArcGIS lesson Visualize ecological marine units with voxels.
Multidimensional data can include many variables in the same file, each variable with its own unique set of dimensions. With netCDF data, you can determine the necessary information about each variable, such as its dimensions, the units of each dimension, and when it was captured. A netCDF file must be gridded to be visualized as a voxel layer. When adding a voxel layer, the variables that are gridded and belong to the same dimension are shown on the Add Voxel Layer dialog box.
To learn about netCDF data storage, see Fundamentals of netCDF data storage.
To learn netCDF terms, see Essential netCDF vocabulary.
You can use the CF compliance checker to inspect a netCDF file.
You can inspect netCDF files using the Python's netCDF4 library or Unidata's toolsUI program, which presents various aspects of a netCDF file in a comprehensive format.
Required data from netCDF files
Voxel Data Structure to create | Required netCDF Coordinate Variables | Required Coordinate Variable attributes | Sample data |
---|---|---|---|
float x | :units |
dimensions: z = 2; y = 33; lon = 33; variables: float z(z=2); float lat(lat=33); :units = "degrees_north"; float lon(lon=33); :units = "degrees_east"; int temp(z=2, lat=33, lon=33); | |
float y | :units | ||
float z | :units :positive | ||
float x | :units | dimensions: time = 2; y = 33; x = 33; variables: float time(time=2); :units = "hours since 1990-01-01T00:00:00"; float y(y=33); :units = "degrees_north"; float x(x=33); :units = "degrees_east"; int temp(time=2, y=33, x=33); | |
float y | :units | ||
double time | :units | ||
float x | :units | dimensions: level = 3; y = 33; x = 33; variables: float level(level=3); float y(y=33); :units = "degrees_north"; float x(x=33); :units = "degrees_east"; int temp(level=3, y=33, x=33); | |
float y | :units | ||
float level | :units :positive | ||
float x | :units | dimensions: time = 2; z = 3; y = 33; x = 33; variables: float time(time=2); :units = "hours since 1990-01-01T00:00:00"; float z(z=3); float y(y=33); :units = "degrees_north"; float x(x=33); :units = "degrees_east"; int temp(time=2, z=3, y=33, x=33); | |
float y | :units | ||
float z | :units :positive | ||
double time | :units |
Volumetric
In a netCDF file, variables reference dimensions. Variables that reference dimensions with the same name are coordinate variables. For example, a netCDF file may have the latitude, longitude, time, and level dimensions defined as coordinate variables. Other variables that contain values reference a combination of dimensions. The coordinate system defined in the netCDF file can be geographic or projected. If the coordinate system cannot be read, you can add a .prj file in the same location with the same name as the netCDF file. The .prj file defines the coordinate system.
A variable is treated as a height variable based on a recognized name or positive attribute. Vertical coordinate systems must use a positive attribute, which determines whether the direction of an increasing coordinate value is up or down. Vertical coordinates can also be identified by their units or the value of the axis attribute. If the netCDF variable has a height dimension, it satisfies the volumetric criterion for being visualized as a voxel variable. If any of the coordinate variables cannot be recognized based on the name or units attribute, the Add Multidimensional Voxel Layer dialog box will fail to load any variables and the netCDF file cannot be added as a voxel layer.
Recognized names for coordinate variables
Coordinate variable | Recognized names |
---|---|
X | x, projection_x_coordinate, lon, longitude, grid_longitude |
Y | y, projection_y_coordinate, lat, latitude, grid_latitude |
Z | z, depth, depth_below_geoid, elevation, height, height_above_reference ellipsoid, level, lev |
T | time |
Variables can be of different types. For example, if the variable includes a decimal, the data is represented as continuous data. If the variable is text or an integer, it is assumed the variable represents discrete data. You can modify the defaults when adding a voxel layer.
Supported time values
The voxel layer currently supports CF compliant time units and time zones. It supports the default calendar as defined in the CF conventions, a Mixed Gregorian/Julian calendar. Time units are read from the netCDF time attributes and are converted to ISO 8601 datetime format.
The voxel layer also supports the climatology time as defined by the CF conventions, for example, when the origin year is listed as 0-1-1. Climatology time represents the 30-year average that is used to define the climate normal by the United Nations convention.