|
|
|||
|
||||
A Transform is defined by creating a Coordinate Transform Variable (see Example and Reference). A variable is a Coordinate Transform Variable if one (or both) of these is true:
Any Variable can be Coordinate Transform Variable, as it is just a container for attributes, i.e. does not use the data values of the Variable. It is common to use a vertical coordinate to be a Coordinate Transform Variable, and a dummy variable (with no useful data in it) is also common. The example here are done with dummy variables.
The CF CoordSysBuilder will add the _CoordinateTransformType attribute upon recognizing a standard_name, so adding that is optional if you are using CF Conventions. CF also requires that you use the vertical coordinate as the Coordinate Transform Variable, so that the transform will be added to any Coordinate System that uses that vertical coordinate. The CF CoordSysBuilder will thus add the _CoordinateAxes = "vertCoordName" attribute to indicate this.
The attributes of the Coordinate Transform Variable become the parameters of the transform. The following are the currently implemented transforms, and the attributes required for each. These follow the CF-1.0 Conventions Appendix D (Vertical Transforms) and Appendix F (Projections). See that document for details on the meanings of the formula terms. The algorithms are mostly taken from John Snyder, Map Projections used by the USGS, Bulletin 1532, 2nd edition (1983).
These are examples of using a dummy Coordinate Transform Variable. If you are using CF Conventions, you do not have to add the _Coordinate attributes, as they will be added automatically in the CoordSysBuilder.
char Albers_Projection;
:grid_mapping_name = "albers_conical_equal_area";
:standard_parallel = 20.0, 60.0;
:longitude_of_central_meridian = -32.0;
:latitude_of_projection_origin = 40.0;
:false_easting = 0.0; :false_northing = 0.0; :_CoordinateTransformType = "Projection";
:_CoordinateAxisTypes = "GeoX GeoY";
This uses a spherical earth. See Snyder, p 98.
char Flat_Earth;
:grid_mapping_name = "flat_earth";
:longitude_of_projection_origin = -132.0;
:latitude_of_projection_origin = 40.0;
:_CoordinateTransformType = "Projection";
:_CoordinateAxisTypes = "GeoX GeoY";
This is not a standard CF projection. It is used when a "flat earth" assumption is acceptable.
char Lambert_azimuth_Projection;
:grid_mapping_name = "lambert_azimuthal_equal_area"; :longitude_of_projection_origin = -32.0;
:latitude_of_projection_origin = 90.0;
:false_easting = 0.0; // km (optional) :false_northing = 0.0; // km (optional) :units = "km"; // units of false_easting, false_northing if not km :_CoordinateTransformType = "Projection";
:_CoordinateAxisTypes = "GeoX GeoY";
This uses a spherical earth. See Snyder, p 184.
char Lambert_Conformal;
:grid_mapping_name = "lambert_conformal_conic";
:standard_parallel = 33.0, 45.0; // one or two
:longitude_of_central_meridian = -97.0;
:latitude_of_projection_origin = 40.0; :false_easting = 0.0; :false_northing = 0.0;
:_CoordinateTransformType = "Projection";
:_CoordinateAxisTypes = "GeoX GeoY";
This uses a spherical earth. See Snyder, p 101.
char McIDAS_Projection;
:grid_mapping_name = "mcidas_area";
:AreaHeader = 33.0, 45.0, ...; // an integer array
:NavHeader = -97.0, ...; // an integer array
:_CoordinateTransformType = "Projection";
:_CoordinateAxisTypes = "GeoX GeoY";
The headers are read from a McIDAS Area file, and placed in the attributes as int arrays. This is not a standard CF projection.
char Mercator_Projection;
:grid_mapping_name = "mercator";
:longitude_of_projection_origin = 110.0;
:latitude_of_projection_origin = -25.0;
:standard_parallel = 0.02;
:_CoordinateTransformType = "Projection"; :_CoordinateAxisTypes = "GeoX GeoY";
This is not a standard CF projection. This uses a spherical earth. See Snyder, p 47.
char Orthographic_Projection;
:grid_mapping_name = "orthographic";
:longitude_of_projection_origin = 110.0;
:latitude_of_projection_origin = -25.0;
:_CoordinateTransformType = "Projection"; :_CoordinateAxisTypes = "GeoX GeoY";
This is not a standard CF projection. This uses a spherical earth. See Snyder, p 145.
char rotated_pole; :grid_mapping_name = "rotated_latitude_longitude"; :grid_north_pole_latitude = 37.0f; // float :grid_north_pole_longitude = -153.0f; // float :_CoordinateTransformType = "Projection"; :_CoordinateAxisTypes = "GeoX GeoY";
The rotated latitude and longitude coordinates are identified by the standard_name attribute values grid_latitude and grid_longitude respectively. Example:
float rlat(rlat=84);
:standard_name = "grid_latitude";
:long_name = "rotated latitude";
:units = "degrees";
:_CoordinateAxisType = "GeoY";
float rlon(rlon=90);
:standard_name = "grid_longitude";
:long_name = "rotated longitude";
:units = "degrees";
:_CoordinateAxisType = "GeoX";
The rotated longitude coordinate must be in the range [-180,180] (so there will be a problem when it crosses the dateline). Code contributed by Robert Schmunk. Added in version 4.0.
char Polar_Stereographic;
:grid_mapping_name = "polar_stereographic";
:straight_vertical_longitude_from_pole = -32.0;
:latitude_of_projection_origin = 90.0;
:scale_factor_at_projection_origin = 0.9330127018922193;
:_CoordinateTransformType = "Projection";
:_CoordinateAxisTypes = "GeoX GeoY";
The Polar Stereographic is the Stereographic projection with origin at the north or south pole.
char Stereographic;
:grid_mapping_name = "stereographic";
:longitude_of_projection_origin = -32.0; // double
:latitude_of_projection_origin = 90.0; // double
:scale_factor_at_projection_origin = 0.9330127018922193; // double
:_CoordinateTransformType = "Projection"; :_CoordinateAxisTypes = "GeoX GeoY";
This uses a spherical earth. See Snyder, p 153.
char Transverse_mercator;
:grid_mapping_name = "transverse_mercator";
:longitude_of_central_meridian = -32.0;
:latitude_of_projection_origin = 40.0;
:scale_factor_at_central_meridian = 0.9330127018922193;
:_CoordinateTransformType = "Projection"; :_CoordinateAxisTypes = "GeoX GeoY";
This uses a spherical earth. See Snyder, p 53.
char UTM_Projection;
:grid_mapping_name = "UTM";
:utm_zone_number = 22;
:semimajor_axis = 90.0;
:inverse_flattening = 0.9330127018922193;
:_CoordinateTransformType = "Projection"; :_CoordinateAxisTypes = "GeoX GeoY";
UTM uses an ellipsoidal earth. Code contributed from the GeoTransform package by Dan Toms, SRI International.
char vertical_perspective_Projection;
:grid_mapping_name = "vertical_perspective";
:longitude_of_projection_origin = -97.0;
:latitude_of_projection_origin = 40.0; :height_above_earth = 0.0; // km :earth_radius = 0.0; // km (optional) :false_easting = 0.0; // optional :false_northing = 0.0; // optional
:_CoordinateTransformType = "Projection"; :_CoordinateAxisTypes = "GeoX GeoY";
This is not a standard CF projection. This uses a spherical earth. See Snyder, p 176.
These are examples of placing the Coordinate Transform parameters on the corresponding vertical coordinate (required by CF). If you are using CF Conventions, you do not have to add the _Coordinate attributes, as they will be added automatically in the CoordSysBuilder.
double lev(lev=26);
:long_name = "hybrid hybrid height coordinate"; :units = "m";
:positive = "up";
:_CoordinateAxisType = "GeoZ";
:_CoordinateZisPositive = "down; :standard_name = "atmosphere_hybrid_height_coordinate";
:formula_terms = "a: varA b: varB orog: orography";
:_CoordinateTransformType = "Vertical";
:_CoordinateAxes = "lev";
double lev(lev=26);
:long_name = "hybrid level at midpoints (1000*(A+B))"; :units = "";
:positive = "down";
:_CoordinateAxisType = "GeoZ";
:_CoordinateZisPositive = "down; :standard_name = "atmosphere_hybrid_sigma_pressure_coordinate";
:formula_terms = "a: hyam b: hybm p0: P0 ps: PS";
:_CoordinateTransformType = "Vertical";
:_CoordinateAxes = "lev";
float level(level=2);
:units = "";
:long_name = "sigma at layer midpoints";
:positive = "down"; :_CoordinateAxisType = "GeoZ";
:_CoordinateZisPositive = "down";
:standard_name = "atmosphere_sigma_coordinate";
:formula_terms = "sigma: level ps: PS ptop: PTOP";
:_CoordinateTransformType = "Vertical";
:_CoordinateAxes = "level";
double s_rho(s_rho=20);
:long_name = "S-coordinate at RHO-points";
:units = ""; :positive = "up"; :_CoordinateAxisType = "GeoZ";
:_CoordinateZisPositive = "up";
:standard_name = "ocean_s_coordinate";
:formula_terms = "s: s_rho eta: zeta depth: h a: theta_s b: theta_b depth_c: hc";
:_CoordinateTransformType = "Vertical";
:_CoordinateAxes = "s_rho";
float zpos(zpos=22);
:long_name = "Sigma Layer";
:units = "";
:positive = "up"; :_CoordinateAxisType = "GeoZ";
:_CoordinateZisPositive = "up";
:standard_name = "ocean_sigma_coordinate";
:formula_terms = "sigma: zpos eta: elev depth: depth";
:_CoordinateTransformType = "Vertical";
:_CoordinateAxes = "zpos";
char ExplicitField;
:standard_name = "explicit_field"; // canonical transform name
:existingDataField = "ght_hybr"; // must be a 3 or 4D pressure / height / geopotential height field
:_CoordinateTransformType = "vertical"; // unambiguouly identifies it as vertical transform
:_CoordinateAxes = "hybr"; // attach transform to any coord sys with the "hbyr" axis.
This is not part of CF, but a way to mark an existing 3D (4D if time dependent) field as the vertical coordinate.
This document is maintained by John Caron and was last updated on May 05, 2008
| Contact Us Site Map Search Terms and Conditions Privacy Policy Participation Policy | ||||||
|
||||||