Package ucar.nc2.dataset
Class CoordinateSystem
java.lang.Object
ucar.nc2.dataset.CoordinateSystem
A CoordinateSystem specifies the coordinates of a Variable's values.
Mathematically it is a vector function F from index space to Sn:
F(i,j,k,...) -> (S1, S2, ...Sn) where i,j,k are integers, and S is the set of reals (R) or Strings.The components of F are just its coordinate axes:
F = (A1, A2, ...An)
A1(i,j,k,...) -> S1
A2(i,j,k,...) -> S2
An(i,j,k,...) -> Sn
Concretely, a CoordinateSystem is a set of coordinate axes, and an optional set
of coordinate transforms.
The domain rank of F is the number of dimensions it is a function of. The range rank is the number
of coordinate axes.
An important class of CoordinateSystems are georeferencing Coordinate Systems, that locate a Variable's values in space and time. A CoordinateSystem that has a Lat and Lon axis, or a GeoX and GeoY axis and a Projection CoordinateTransform will have isGeoReferencing() true. A CoordinateSystem that has a Height, Pressure, or GeoZ axis will have hasVerticalAxis() true.
Further CoordinateSystems specialization is done by "data type specific" classes such as ucar.nc2.ft2.coverage.grid.GridCoordSys.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classCoordinateSystem.Builder<T extends CoordinateSystem.Builder<T>> -
Constructor Summary
ConstructorsConstructorDescriptionCoordinateSystem(NetcdfDataset ds, Collection<CoordinateAxis> axes, Collection<CoordinateTransform> coordTrans) Deprecated.Use CoordinateSystem.builder() -
Method Summary
Modifier and TypeMethodDescriptionvoidDeprecated.Use CoordinateSystem.builder()voidDeprecated.Use CoordinateSystem.builder()static CoordinateSystem.Builder<?>builder()Get Builder for this class that allows subclassing.booleancontainsAxes(List<CoordinateAxis> wantAxes) Do we have all the axes in the list?booleancontainsAxis(String axisName) Do we have the named axis?booleancontainsAxisType(AxisType wantAxisType) Do we have an axes of the given type?booleancontainsAxisTypes(List<AxisType> wantAxes) Do we have all the axes types in the list?booleancontainsDomain(List<Dimension> wantDimensions) Do we have all the dimensions in the list?static intcountDomain(Variable[] axes) booleanInstances which have same name, axes and transforms are equal.Find the CoordinateAxis that has the given AxisType.get the CoordinateAxis with AxisType.RadialAzimuth, or null if none.com.google.common.collect.ImmutableList<CoordinateAxis>Get the List of CoordinateAxis objectscom.google.common.collect.ImmutableList<CoordinateTransform>Get the List of CoordinateTransform objectscom.google.common.collect.ImmutableCollection<Dimension>get the Collection of Dimensions that constitute the domain.get the CoordinateAxis with AxisType.RadialElevation, or null if none.get the CoordinateAxis with AxisType.Ensemble, or null if none.get the CoordinateAxis with AxisType.Height, or null if none.get the CoordinateAxis with AxisType.Lat, or null if none.get the CoordinateAxis with AxisType.Lon, or null if none.getName()get the name of the Coordinate SystemGet the underlying NetcdfDatasetget the CoordinateAxis with AxisType.Pressure, or null if none.Get the Projection for this coordinate system.Find the first ProjectionCT from the list of CoordinateTransforms.get the CoordinateAxis with AxisType.RadialDistance, or null if none.intGet the domain rank of the coordinate system = number of dimensions it is a function of.intGet the range rank of the coordinate system = number of coordinate axes.getTaxis()get the CoordinateAxis with AxisType.Time, or null if none.getXaxis()get the CoordinateAxis with AxisType.GeoX, or null if none.getYaxis()get the CoordinateAxis with AxisType.GeoY, or null if none.getZaxis()get the CoordinateAxis with AxisType.GeoZ, or null if none.inthashCode()Override Object.hashCode() to implement equals.booleantrue if has Time axisbooleantrue if has Height, Pressure, or GeoZ axisbooleanCheck if this Coordinate System is complete for v, ie if all its dimensions are also used by v.booleanCheck if this Coordinate System can be used for the given variable.booleantrue if isGeoXY or isLatLonbooleanisGeoXY()true if it has X and Y CoordinateAxis, and a CoordTransform ProjectionbooleanImplicit Coordinate System are constructed based on which Coordinate Variables exist for the Dimensions of the Variable.booleanisLatLon()true if it has Lat and Lon CoordinateAxisbooleantrue if all axes are CoordinateAxis1DbooleanisRadial()true if it has radial distance and azimuth CoordinateAxisbooleantrue if all axes are CoordinateAxis1D and are regularstatic booleanisSubset(Collection<Dimension> subset, Collection<Dimension> set) Test if all the Dimensions in subset are in setstatic booleanmakeDomain(Iterable<? extends Variable> axes) static StringmakeName(List<CoordinateAxis> axes) Create standard name from list of axes.toString()
-
Constructor Details
-
CoordinateSystem
@Deprecated public CoordinateSystem(NetcdfDataset ds, Collection<CoordinateAxis> axes, Collection<CoordinateTransform> coordTrans) Deprecated.Use CoordinateSystem.builder()Constructor.- Parameters:
ds- the containing datasetaxes- Collection of type CoordinateAxis, must be at least one.coordTrans- Collection of type CoordinateTransform, may be empty or null.
-
-
Method Details
-
makeName
Create standard name from list of axes. Sort the axes first- Parameters:
axes- list of CoordinateAxis- Returns:
- CoordinateSystem name, created from axes names
-
addCoordinateTransform
Deprecated.Use CoordinateSystem.builder()add a CoordinateTransform- Parameters:
ct- add this CoordinateTransform
-
addCoordinateTransforms
Deprecated.Use CoordinateSystem.builder()add a Collection of CoordinateTransform- Parameters:
ct- add all CoordinateTransform in this collection
-
getCoordinateAxes
Get the List of CoordinateAxis objects -
getCoordinateTransforms
Get the List of CoordinateTransform objects -
getName
get the name of the Coordinate System- Returns:
- the name of the Coordinate System
-
getNetcdfDataset
Get the underlying NetcdfDataset- Returns:
- the underlying NetcdfDataset.
-
getDomain
get the Collection of Dimensions that constitute the domain. -
getRankDomain
public int getRankDomain()Get the domain rank of the coordinate system = number of dimensions it is a function of.- Returns:
- domain.size()
-
getRankRange
public int getRankRange()Get the range rank of the coordinate system = number of coordinate axes.- Returns:
- coordAxes.size()
-
findAxis
Find the CoordinateAxis that has the given AxisType. If more than one, return the one with lesser rank.- Parameters:
type- look for this axisType- Returns:
- CoordinateAxis of the given AxisType, else null.
-
getXaxis
get the CoordinateAxis with AxisType.GeoX, or null if none. if more than one, choose one with smallest rank- Returns:
- axis of type AxisType.GeoX, or null if none
-
getYaxis
get the CoordinateAxis with AxisType.GeoY, or null if none. if more than one, choose one with smallest rank- Returns:
- axis of type AxisType.GeoY, or null if none
-
getZaxis
get the CoordinateAxis with AxisType.GeoZ, or null if none. if more than one, choose one with smallest rank- Returns:
- axis of type AxisType.GeoZ, or null if none
-
getTaxis
get the CoordinateAxis with AxisType.Time, or null if none. if more than one, choose one with smallest rank- Returns:
- axis of type AxisType.Time, or null if none
-
getLatAxis
get the CoordinateAxis with AxisType.Lat, or null if none. if more than one, choose one with smallest rank- Returns:
- axis of type AxisType.Lat, or null if none
-
getLonAxis
get the CoordinateAxis with AxisType.Lon, or null if none. if more than one, choose one with smallest rank *- Returns:
- axis of type AxisType.Lon, or null if none
-
getHeightAxis
get the CoordinateAxis with AxisType.Height, or null if none. if more than one, choose one with smallest rank- Returns:
- axis of type AxisType.Height, or null if none
-
getPressureAxis
get the CoordinateAxis with AxisType.Pressure, or null if none. if more than one, choose one with smallest rank.- Returns:
- axis of type AxisType.Pressure, or null if none
-
getEnsembleAxis
get the CoordinateAxis with AxisType.Ensemble, or null if none. if more than one, choose one with smallest rank.- Returns:
- axis of type AxisType.Ensemble, or null if none
-
getAzimuthAxis
get the CoordinateAxis with AxisType.RadialAzimuth, or null if none. if more than one, choose one with smallest rank- Returns:
- axis of type AxisType.RadialAzimuth, or null if none
-
getRadialAxis
get the CoordinateAxis with AxisType.RadialDistance, or null if none. if more than one, choose one with smallest rank- Returns:
- axis of type AxisType.RadialDistance, or null if none
-
getElevationAxis
get the CoordinateAxis with AxisType.RadialElevation, or null if none. if more than one, choose one with smallest rank- Returns:
- axis of type AxisType.RadialElevation, or null if none
-
getProjectionCT
Find the first ProjectionCT from the list of CoordinateTransforms.- Returns:
- ProjectionCT or null if none.
-
getProjection
Get the Projection for this coordinate system. If isLatLon(), then returns a LatLonProjection. Otherwise, extracts the projection from any ProjectionCT CoordinateTransform.- Returns:
- ProjectionImpl or null if none. TODO return Projection in ver6
-
isGeoXY
public boolean isGeoXY()true if it has X and Y CoordinateAxis, and a CoordTransform Projection- Returns:
- true if it has X and Y CoordinateAxis, and a CoordTransform Projection
-
isLatLon
public boolean isLatLon()true if it has Lat and Lon CoordinateAxis- Returns:
- true if it has Lat and Lon CoordinateAxis
-
isRadial
public boolean isRadial()true if it has radial distance and azimuth CoordinateAxis- Returns:
- true if it has radial distance and azimuth CoordinateAxis
-
isGeoReferencing
public boolean isGeoReferencing()true if isGeoXY or isLatLon- Returns:
- true if isGeoXY or isLatLon
-
isProductSet
public boolean isProductSet()true if all axes are CoordinateAxis1D- Returns:
- true if all axes are CoordinateAxis1D
-
isRegular
public boolean isRegular()true if all axes are CoordinateAxis1D and are regular- Returns:
- true if all axes are CoordinateAxis1D and are regular
-
isComplete
Check if this Coordinate System is complete for v, ie if all its dimensions are also used by v.- Parameters:
v- check for this variable- Returns:
- true if all dimensions in V (including parents) are in the domain of this coordinate system.
-
isCoordinateSystemFor
Check if this Coordinate System can be used for the given variable. A CoordinateAxis can only be part of a Variable's CoordinateSystem if the CoordinateAxis' set of Dimensions is a subset of the Variable's set of Dimensions. So, a CoordinateSystem' set of Dimensions must be a subset of the Variable's set of Dimensions.- Parameters:
v- check for this variable- Returns:
- true if all dimensions in the domain of this coordinate system are in V (including parents).
-
isSubset
Test if all the Dimensions in subset are in set- Parameters:
subset- is this a subsetset- of this?- Returns:
- true if all the Dimensions in subset are in set
-
isSubset
-
makeDomain
-
countDomain
-
isImplicit
public boolean isImplicit()Implicit Coordinate System are constructed based on which Coordinate Variables exist for the Dimensions of the Variable. This is in contrast to a Coordinate System that is explicitly specified in the file.- Returns:
- true if this coordinate system was constructed implicitly.
-
hasVerticalAxis
public boolean hasVerticalAxis()true if has Height, Pressure, or GeoZ axis- Returns:
- true if has a vertical axis
-
hasTimeAxis
public boolean hasTimeAxis()true if has Time axis- Returns:
- true if has Time axis
-
containsAxes
Do we have all the axes in the list?- Parameters:
wantAxes- List of CoordinateAxis- Returns:
- true if all in our list.
-
containsAxis
Do we have the named axis?- Parameters:
axisName- (full unescaped) name of axis- Returns:
- true if we have an axis of that name
-
containsDomain
Do we have all the dimensions in the list?- Parameters:
wantDimensions- List of Dimensions- Returns:
- true if all in our list.
-
containsAxisTypes
Do we have all the axes types in the list?- Parameters:
wantAxes- List of AxisType- Returns:
- true if all in our list.
-
containsAxisType
Do we have an axes of the given type?- Parameters:
wantAxisType- want this AxisType- Returns:
- true if we have at least one axis of that type.
-
equals
Instances which have same name, axes and transforms are equal. -
hashCode
public int hashCode()Override Object.hashCode() to implement equals. -
toString
-
toBuilder
-
builder
Get Builder for this class that allows subclassing.- See Also:
-
- "https://community.oracle.com/blogs/emcmanus/2010/10/24/using-builder-pattern-subclasses"
-