/** * Convert WGS lat/long (° dec) to CH x * @param unknown $lat * @param unknown $long * @return number */ public static function WGStoCHx($lat, $long) { // Converts decimal degrees sexagesimal seconds $lat = DECtoSEX($lat); $long = DECtoSEX($long); // Auxiliary values (% Bern) $lat_aux = ($lat - 169028.66) / 10000; $long_aux = ($long - 26782.5) / 10000; // Process X $x = 200147.07 + 308807.95 * $lat_aux + 3745.25 * pow($long_aux, 2) + 76.63 * pow($lat_aux, 2) - 194.56 * pow($long_aux, 2) * $lat_aux + 119.79 * pow($lat_aux, 3); return $x; }
public static function WGS84toCH1903($lat, $long) { // Convert DEC angle to SEX DMS function DECtoSEX($angle) { // Extract DMS $deg = intval($angle); $min = intval(($angle - $deg) * 60); $sec = (($angle - $deg) * 60 - $min) * 60; // Result in degrees sex (dd.mmss) return $deg + $min / 100 + $sec / 10000; } // Convert Degrees angle to seconds function DEGtoSEC($angle) { // Extract DMS $deg = intval($angle); $min = intval(($angle - $deg) * 100); $sec = (($angle - $deg) * 100 - $min) * 100; // Result in degrees sex (dd.mmss) return $sec + $min * 60 + $deg * 3600; } // Converts degrees dec to sex $lat = DECtoSEX($lat); $long = DECtoSEX($long); // Converts degrees to seconds (sex) $lat = DEGtoSEC($lat); $long = DEGtoSEC($long); // Axiliary values (% Bern) $lat_aux = ($lat - 169028.66) / 10000; $long_aux = ($long - 26782.5) / 10000; // Process Y $y = 600072.37 + 211455.93 * $long_aux - 10938.51 * $long_aux * $lat_aux - 0.36 * $long_aux * pow($lat_aux, 2) - 44.54 * pow($long_aux, 3); // Process X $x = 200147.07 + 308807.95 * $lat_aux + 3745.25 * pow($long_aux, 2) + 76.63 * pow($lat_aux, 2) - 194.56 * pow($long_aux, 2) * $lat_aux + 119.79 * pow($lat_aux, 3); return array($x, $y); }