package kmlframework.utils; public class Ellipsoid { private static double a = 6378137; // default to wgs 84 private static double f = 298.257223563; // default to wgs 84 private static double fInverted = 1 / f; private static double eps2 = fInverted * (2d - fInverted); private static double k1 = Math.toRadians(a * (1d - eps2)); private static double k2 = Math.toRadians(a); /** * Convert meter to longitude at ref latitude */ public static final double meterToLongitude(double latitude) { return 1.0 / longitudeToMeter(latitude); } /** * Convert meter to latitude at ref latitude */ public static final double meterToLatitude(double latitude) { return 1.0 / latitudeToMeter(latitude); } /** * Convert longitude to meter at ref latitude */ public static final double longitudeToMeter(double latitude) { return (Math.cos(Math.toRadians(latitude)) * k2) / Math.sqrt(getDiv0(latitude)); } /** * Convert latitude to meter at ref latitude */ public static final double latitudeToMeter(double latitude) { return (k1 / Math.sqrt(Math.pow(getDiv0(latitude), 3))); } private static final double getDiv0(double latitude) { return 1.0 - eps2 * Math.pow(Math.sin(Math.toRadians(latitude)), 2); } }