package sec.web.render; public class GeoPixelConversion { private static final double inchPerMeter = 39.3700787; private static final double pixelsPerInch = 96; private static final double METERS_PER_DEG = 111319.49079327357264771338267056; public static double metersPerPixel(double scale) { double step1 = scale / pixelsPerInch; return step1 / inchPerMeter; } public static double lat2y(double latitude, double scale, double latOrigin, double metPerPix) { double latRem = -(latitude - latOrigin); double pixDis = (latRem * METERS_PER_DEG) / metPerPix; return pixDis; } public static double y2lat(double yPosition, double scale, double latOrigin, double metPerPix) { double latitude = latOrigin - ((yPosition * metPerPix) / METERS_PER_DEG); return latitude; } public static double long2x(double longitude, double scale, double longOrigin, double latitude, double metPerPix, boolean normalize) { double longRem = longitude-longOrigin; if(normalize) { if (longRem > 180) { longRem -= 360; } if (longRem < -180) { longRem += 360; } } double metersPerDeg = GetMetersPerDegAtLat(latitude); double pixDis = (longRem * metersPerDeg) / metPerPix; return pixDis; } public static double x2long(double xPosition, double scale, double longOrigin, double latitude, double metPerPix) { double metersPerDeg = GetMetersPerDegAtLat(latitude); double longitude = longOrigin + ((xPosition * metPerPix) / metersPerDeg); if (longitude < -180) { longitude += 360; } else if (longitude > 180) { longitude -= 360; } return longitude; } public static double Deg2Rad(double deg) { double conv_factor = (2.0 * Math.PI) / 360.0; return (deg * conv_factor); } public static double GetMetersPerDegAtLat(double lat) { // Convert latitude to radians lat = Deg2Rad(lat); // Set up "Constants" double p1 = 111412.84; // longitude calculation term 1 double p2 = -93.5; // longitude calculation term 2 double p3 = 0.118; // longitude calculation term 3 // Calculate the length of a degree of longitude in meters at given // latitude double longlen = (p1 * Math.cos(lat)) + (p2 * Math.cos(3 * lat)) + (p3 * Math.cos(5 * lat)); return longlen; } }