/* Geodesy by Mike Gavaghan * * http://www.gavaghan.org/blog/free-source-code/geodesy-library-vincentys-formula/ * * This code may be freely used and modified on any personal or professional * project. It comes with no warranty. */ package org.gavaghan.geodesy; //import java.io.Serializable; /** * Encapsulation of an ellipsoid, and declaration of common reference * ellipsoids. * * @author Mike Gavaghan */ //public class Ellipsoid implements Serializable { public class Ellipsoid { private static final long serialVersionUID = -2694307956656400089L; /** Semi major axis (meters). */ private final double mSemiMajorAxis; /** Semi minor axis (meters). */ private final double mSemiMinorAxis; /** Flattening. */ private final double mFlattening; /** Inverse flattening. */ private final double mInverseFlattening; /** * Construct a new Ellipsoid. This is private to ensure the values are * consistent (flattening = 1.0 / inverseFlattening). Use the methods * fromAAndInverseF() and fromAAndF() to create new instances. * * @param semiMajor * @param semiMinor * @param flattening * @param inverseFlattening */ private Ellipsoid(double semiMajor, double semiMinor, double flattening, double inverseFlattening) { mSemiMajorAxis = semiMajor; mSemiMinorAxis = semiMinor; mFlattening = flattening; mInverseFlattening = inverseFlattening; } /** The WGS84 ellipsoid. */ static public final Ellipsoid WGS84 = fromAAndInverseF(6378137.0, 298.257223563); /** The GRS80 ellipsoid. */ static public final Ellipsoid GRS80 = fromAAndInverseF(6378137.0, 298.257222101); /** The GRS67 ellipsoid. */ static public final Ellipsoid GRS67 = fromAAndInverseF(6378160.0, 298.25); /** The ANS ellipsoid. */ static public final Ellipsoid ANS = fromAAndInverseF(6378160.0, 298.25); /** The WGS72 ellipsoid. */ static public final Ellipsoid WGS72 = fromAAndInverseF(6378135.0, 298.26); /** The Clarke1858 ellipsoid. */ static public final Ellipsoid Clarke1858 = fromAAndInverseF(6378293.645, 294.26); /** The Clarke1880 ellipsoid. */ static public final Ellipsoid Clarke1880 = fromAAndInverseF(6378249.145, 293.465); /** A spherical "ellipsoid". */ static public final Ellipsoid Sphere = fromAAndF(6371000, 0.0); /** * Build an Ellipsoid from the semi major axis measurement and the inverse * flattening. * * @param semiMajor * semi major axis (meters) * @param inverseFlattening * @return */ static public Ellipsoid fromAAndInverseF(double semiMajor, double inverseFlattening) { double f = 1.0 / inverseFlattening; double b = (1.0 - f) * semiMajor; return new Ellipsoid(semiMajor, b, f, inverseFlattening); } /** * Build an Ellipsoid from the semi major axis measurement and the * flattening. * * @param semiMajor * semi major axis (meters) * @param flattening * @return */ static public Ellipsoid fromAAndF(double semiMajor, double flattening) { double inverseF = 1.0 / flattening; double b = (1.0 - flattening) * semiMajor; return new Ellipsoid(semiMajor, b, flattening, inverseF); } /** * Get semi-major axis. * * @return semi-major axis (in meters). */ public double getSemiMajorAxis() { return mSemiMajorAxis; } /** * Get semi-minor axis. * * @return semi-minor axis (in meters). */ public double getSemiMinorAxis() { return mSemiMinorAxis; } /** * Get flattening * * @return */ public double getFlattening() { return mFlattening; } /** * Get inverse flattening. * * @return */ public double getInverseFlattening() { return mInverseFlattening; } }