ucar.nc2.dataset
Class CoordinateSystem

java.lang.Object
  extended by ucar.nc2.dataset.CoordinateSystem
Direct Known Subclasses:
GridCoordSys, GridCoordSys

public class CoordinateSystem
extends java.lang.Object

A CoordinateSystem specifies the coordinates of a Variable's values. Mathmatically 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,...) -> S1
    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" clasess such as ucar.nc2.dt.grid.GridCoordSys.

Version:
$Revision:51 $ $Date:2006-07-12 17:13:13Z $
Author:
caron

Field Summary
protected  CoordinateAxis aziAxis
           
protected  java.util.ArrayList coordAxes
           
protected  java.util.ArrayList coordTrans
           
protected  java.lang.String dataType
           
protected  java.util.ArrayList domain
           
protected  NetcdfDataset ds
           
protected  CoordinateAxis elevAxis
           
protected  CoordinateAxis hAxis
           
protected  boolean isImplicit
           
protected  CoordinateAxis latAxis
           
protected  CoordinateAxis lonAxis
           
protected  java.lang.String name
           
protected  CoordinateAxis pAxis
           
protected  CoordinateAxis radialAxis
           
protected  CoordinateAxis tAxis
           
protected  CoordinateAxis xAxis
           
protected  CoordinateAxis yAxis
           
protected  CoordinateAxis zAxis
           
 
Constructor Summary
protected CoordinateSystem()
           
  CoordinateSystem(NetcdfDataset ds, java.util.Collection axes, java.util.Collection coordTrans)
          Constructor.
 
Method Summary
 void addCoordinateTransform(CoordinateTransform ct)
          add a CoordinateTransform
 void addCoordinateTransforms(java.util.Collection ct)
          add a Collection of CoordinateTransform
 boolean containsAxes(java.util.List wantAxes)
          Do we have all the axes in the list?
 boolean containsAxis(java.lang.String axisName)
          Do we have the named axis?
 boolean containsAxisType(AxisType wantAxisType)
          Do we have an axes of the given type?
 boolean containsAxisTypes(java.util.List wantAxes)
          Do we have all the axes types in the list?
 boolean containsDomain(java.util.List wantDimensions)
          Do we have all the dimensions in the list?
 boolean equals(java.lang.Object oo)
          Instances which have same name are equal.
 CoordinateAxis findAxis(AxisType type)
          Find the CoordinateAxis that has the given AxisType.
 CoordinateAxis getAzimuthAxis()
          get the CoordinateAxis with AxisType.RadialAzimuth, or null if none.
 java.util.List getCoordinateAxes()
          get the List of CoordinateAxis objects
 java.util.List getCoordinateTransforms()
          get the List of CoordinateTransform objects
 java.util.List getDomain()
          List of Dimensions that constitute the domain.
 CoordinateAxis getElevationAxis()
          get the CoordinateAxis with AxisType.RadialElevation, or null if none.
 CoordinateAxis getHeightAxis()
          get the CoordinateAxis with AxisType.Height, or null if none.
 CoordinateAxis getLatAxis()
          get the CoordinateAxis with AxisType.Lat, or null if none.
 CoordinateAxis getLonAxis()
          get the CoordinateAxis with AxisType.Lon, or null if none.
 java.lang.String getName()
          get the name of the Coordinate System
 CoordinateAxis getPressureAxis()
          get the CoordinateAxis with AxisType.Pressure, or null if none.
 ProjectionImpl getProjection()
          Get the Projection for this coordinate system.
 ProjectionCT getProjectionCT()
          Find the first ProjectionCT from the list of CoordinateTransforms.
 CoordinateAxis getRadialAxis()
          get the CoordinateAxis with AxisType.RadialDistance, or null if none.
 int getRankDomain()
          Get the domain rank of the coordinate system = number of dimensions it is a function of.
 int getRankRange()
          Get the range rank of the coordinate system = number of coordinate axes.
 CoordinateAxis getTaxis()
          get the CoordinateAxis with AxisType.Time, or null if none.
 CoordinateAxis getXaxis()
          get the CoordinateAxis with AxisType.GeoX, or null if none.
 CoordinateAxis getYaxis()
          get the CoordinateAxis with AxisType.GeoY, or null if none.
 CoordinateAxis getZaxis()
          get the CoordinateAxis with AxisType.GeoZ, or null if none.
 int hashCode()
          Override Object.hashCode() to implement equals.
 boolean hasTimeAxis()
          true if has Time axis
 boolean hasVerticalAxis()
          true if has Height, Pressure, or GeoZ axis
 boolean isComplete(VariableIF v)
          true if all dimensions in V (including parents) are in the domain of this coordinate system.
 boolean isGeoReferencing()
          true if isGeoXY or isLatLon
 boolean isGeoXY()
          true if it has X and Y CoordinateAxis, and a CoordTransform Projection
 boolean isImplicit()
          Implicit Coordinate System are constructed based on whatr Coordinate Variables are being used.
 boolean isLatLon()
          true if it has Lat and Lon CoordinateAxis
 boolean isProductSet()
          true if all axes are CoordinateAxis1D
 boolean isRadial()
          true if it has radial distance and azimuth CoordinateAxis
 boolean isRegular()
          true if all axes are CoordinateAxis1D and are regular
static java.lang.String makeName(java.util.List axes)
          Create standard name from list of axes.
protected  void setImplicit(boolean isImplicit)
          Set whether this Coordinate System is implicit
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

ds

protected NetcdfDataset ds

coordAxes

protected java.util.ArrayList coordAxes

coordTrans

protected java.util.ArrayList coordTrans

domain

protected java.util.ArrayList domain

name

protected java.lang.String name

xAxis

protected CoordinateAxis xAxis

yAxis

protected CoordinateAxis yAxis

zAxis

protected CoordinateAxis zAxis

tAxis

protected CoordinateAxis tAxis

latAxis

protected CoordinateAxis latAxis

lonAxis

protected CoordinateAxis lonAxis

hAxis

protected CoordinateAxis hAxis

pAxis

protected CoordinateAxis pAxis

aziAxis

protected CoordinateAxis aziAxis

elevAxis

protected CoordinateAxis elevAxis

radialAxis

protected CoordinateAxis radialAxis

isImplicit

protected boolean isImplicit

dataType

protected java.lang.String dataType
Constructor Detail

CoordinateSystem

protected CoordinateSystem()

CoordinateSystem

public CoordinateSystem(NetcdfDataset ds,
                        java.util.Collection axes,
                        java.util.Collection coordTrans)
Constructor.

Parameters:
axes - Collection of type CoordinateAxis, must be at least one.
coordTrans - Collection of type CoordinateTransform, may be empty or null.
Method Detail

makeName

public static java.lang.String makeName(java.util.List axes)
Create standard name from list of axes. Sort the axes first


addCoordinateTransform

public void addCoordinateTransform(CoordinateTransform ct)
add a CoordinateTransform


addCoordinateTransforms

public void addCoordinateTransforms(java.util.Collection ct)
add a Collection of CoordinateTransform


getCoordinateAxes

public java.util.List getCoordinateAxes()
get the List of CoordinateAxis objects


getCoordinateTransforms

public java.util.List getCoordinateTransforms()
get the List of CoordinateTransform objects


getName

public java.lang.String getName()
get the name of the Coordinate System


getDomain

public java.util.List getDomain()
List 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.


getRankRange

public int getRankRange()
Get the range rank of the coordinate system = number of coordinate axes.


findAxis

public CoordinateAxis findAxis(AxisType type)
Find the CoordinateAxis that has the given AxisType. If more than one, return the one with lesser rank.

Parameters:
type -
Returns:
CoordinateAxis of the given AxisType, else null.

getXaxis

public CoordinateAxis getXaxis()
get the CoordinateAxis with AxisType.GeoX, or null if none. if more than one, choose one with smallest rank


getYaxis

public CoordinateAxis getYaxis()
get the CoordinateAxis with AxisType.GeoY, or null if none. if more than one, choose one with smallest rank


getZaxis

public CoordinateAxis getZaxis()
get the CoordinateAxis with AxisType.GeoZ, or null if none. if more than one, choose one with smallest rank


getTaxis

public CoordinateAxis getTaxis()
get the CoordinateAxis with AxisType.Time, or null if none. if more than one, choose one with smallest rank


getLatAxis

public CoordinateAxis getLatAxis()
get the CoordinateAxis with AxisType.Lat, or null if none. if more than one, choose one with smallest rank


getLonAxis

public CoordinateAxis getLonAxis()
get the CoordinateAxis with AxisType.Lon, or null if none. if more than one, choose one with smallest rank


getHeightAxis

public CoordinateAxis getHeightAxis()
get the CoordinateAxis with AxisType.Height, or null if none. if more than one, choose one with smallest rank


getPressureAxis

public CoordinateAxis getPressureAxis()
get the CoordinateAxis with AxisType.Pressure, or null if none. if more than one, choose one with smallest rank


getAzimuthAxis

public CoordinateAxis getAzimuthAxis()
get the CoordinateAxis with AxisType.RadialAzimuth, or null if none. if more than one, choose one with smallest rank


getRadialAxis

public CoordinateAxis getRadialAxis()
get the CoordinateAxis with AxisType.RadialDistance, or null if none. if more than one, choose one with smallest rank


getElevationAxis

public CoordinateAxis getElevationAxis()
get the CoordinateAxis with AxisType.RadialElevation, or null if none. if more than one, choose one with smallest rank


getProjectionCT

public ProjectionCT getProjectionCT()
Find the first ProjectionCT from the list of CoordinateTransforms.

Returns:
ProjectionCT or null if none.

getProjection

public ProjectionImpl 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.

isGeoXY

public boolean isGeoXY()
true if it has X and Y CoordinateAxis, and a CoordTransform Projection


isLatLon

public boolean isLatLon()
true if it has Lat and Lon CoordinateAxis


isRadial

public boolean isRadial()
true if it has radial distance and azimuth CoordinateAxis


isGeoReferencing

public boolean isGeoReferencing()
true if isGeoXY or isLatLon


isProductSet

public boolean isProductSet()
true if all axes are CoordinateAxis1D


isRegular

public boolean isRegular()
true if all axes are CoordinateAxis1D and are regular


isComplete

public boolean isComplete(VariableIF v)
true if all dimensions in V (including parents) are in the domain of this coordinate system.


isImplicit

public boolean isImplicit()
Implicit Coordinate System are constructed based on whatr Coordinate Variables are being used. This is in contrast to a Coordinate System that is explicitly specified in the file.


setImplicit

protected void setImplicit(boolean isImplicit)
Set whether this Coordinate System is implicit


hasVerticalAxis

public boolean hasVerticalAxis()
true if has Height, Pressure, or GeoZ axis


hasTimeAxis

public boolean hasTimeAxis()
true if has Time axis


containsAxes

public boolean containsAxes(java.util.List wantAxes)
Do we have all the axes in the list?

Parameters:
wantAxes - List of CoordinateAxis
Returns:
true if all in our list.

containsAxis

public boolean containsAxis(java.lang.String axisName)
Do we have the named axis?

Parameters:
axisName - name of axis
Returns:
true if we have an axis of that name

containsDomain

public boolean containsDomain(java.util.List wantDimensions)
Do we have all the dimensions in the list?

Parameters:
wantDimensions - List of Dimensions
Returns:
true if all in our list.

containsAxisTypes

public boolean containsAxisTypes(java.util.List wantAxes)
Do we have all the axes types in the list?

Parameters:
wantAxes - List of AxisType
Returns:
true if all in our list.

containsAxisType

public boolean containsAxisType(AxisType wantAxisType)
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

public boolean equals(java.lang.Object oo)
Instances which have same name are equal.

Overrides:
equals in class java.lang.Object

hashCode

public int hashCode()
Override Object.hashCode() to implement equals.

Overrides:
hashCode in class java.lang.Object

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object