Package org.osgeo.proj4j.parser

Source Code of org.osgeo.proj4j.parser.DatumParameters

package org.osgeo.proj4j.parser;

import org.osgeo.proj4j.CoordinateReferenceSystem;
import org.osgeo.proj4j.datum.Datum;
import org.osgeo.proj4j.datum.Ellipsoid;

/**
* Contains the parsed/computed parameter values
* which are used to create
* the datum and ellipsoid for a {@link CoordinateReferenceSystem}.
* This class also implements the policies for
* which parameters take precedence
* when multiple inconsistent ones are present.
*
* @author Martin Davis
*
*/
public class DatumParameters
{
  // TODO: check for inconsistent datum and ellipsoid (some PROJ4 cs specify both - not sure why)

  private final static double SIXTH = .1666666666666666667; /* 1/6 */
  private final static double RA4 = .04722222222222222222; /* 17/360 */
  private final static double RA6 = .02215608465608465608; /* 67/3024 */
  private final static double RV4 = .06944444444444444444; /* 5/72 */
  private final static double RV6 = .04243827160493827160; /* 55/1296 */

  private Datum datum = null;
  private double[] datumTransform = null;
 
  private Ellipsoid ellipsoid;
  private double a = Double.NaN;
  private double es = Double.NaN;

  public DatumParameters() {
    // Default datum is WGS84
//    setDatum(Datum.WGS84);
  }

  public Datum getDatum()
  {
    if (datum != null)
      return datum;
    // if no ellipsoid was specified, return WGS84 as the default
    if (ellipsoid == null && ! isDefinedExplicitly()) {
      return Datum.WGS84;
    }
    // if ellipsoid was WGS84, return that datum
    if (ellipsoid == Ellipsoid.WGS84)
      return Datum.WGS84;
   
    // otherwise, return a custom datum with the specified ellipsoid
    return new Datum("User", datumTransform, getEllipsoid(), "User-defined");
  }
 
  private boolean isDefinedExplicitly()
  {
    return ! (Double.isNaN(a) || Double.isNaN(es));
  }
 
  public Ellipsoid getEllipsoid()
  {
    if (ellipsoid != null)
        return ellipsoid;
    return new Ellipsoid("user", a, es, "User-defined");
  }
 
  public void setDatumTransform(double[] datumTransform)
  {
    this.datumTransform = datumTransform;
    // force new Datum to be created
    datum = null;
  }
 
  public void setDatum(Datum datum)
  {
    this.datum = datum;
  }
 
  public void setEllipsoid(Ellipsoid ellipsoid)
  {
    this.ellipsoid = ellipsoid;
    es = ellipsoid.eccentricity2;
    a = ellipsoid.equatorRadius;
  }
 
  public void setA(double a)
  {
    ellipsoid = null// force user-defined ellipsoid
    this.a = a;
  }
 
  public void setB(double b)
  {
    ellipsoid = null// force user-defined ellipsoid
    es = 1. - (b * b) / (a * a);
  }
 
  public void setES(double es)
  {
    ellipsoid = null// force user-defined ellipsoid
    this.es = es;
  }
 
  public void setRF(double rf)
  {
    ellipsoid = null// force user-defined ellipsoid
    es = rf * (2. - rf);
  }
 
  public void setR_A()
  {
    ellipsoid = null// force user-defined ellipsoid
    a *= 1. - es * (SIXTH + es * (RA4 + es * RA6));
  }
 
  public void setF(double f)
  {
    ellipsoid = null// force user-defined ellipsoid
    double rf = 1.0 / f;
    es = rf * (2. - rf);
  }
 
  public double getA() {
    return a;
  }
 
  public double getES() {
    return es;
  }
}
TOP

Related Classes of org.osgeo.proj4j.parser.DatumParameters

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.