Come sappiamo le coordinate geografiche (latitudine e longitudine) sono espresse in gradi, minuti e secondi. Spesso capita di dover trattare questi dati in formato decimale ed è quindi utile poter convertire i decimali in gradi e viceversa.
Ecco due semplici funzioni PHP che servono a questo scopo:
function dmsToDec($deg, $min, $sec) { return $deg + ((($min*60) + ($sec)) / 3600); } function decToDms($dec) { $dec = abs($dec); $d = (int) $dec; $m = (int) (($dec - $d) * 60); $s = ($dec - $d - ($m / 60)) * 3600; $s = round($s, 1); $array = array("deg" => $d, "min" => $m, "sec" => $s); return $array; } |
Se inoltre vogliamo ottenere la stringa che rappresenta i gradi possiamo usare questa funzione che prende in ingresso il valore decimale ($dec) e una stringa ($latlng) che assume i valori ‘lat’ o ‘lng’ nel caso in cui si voglia convertire rispettivamente una latitudine o una longitudine.
function decToDmsString($dec, $latlng) { if (! $dec) { return "-"; } if ($latlng == 'lat') { $card = ($dec > 0) ? 'N' : 'S'; } elseif($latlng == 'lng') { $card = ($dec > 0) ? 'E' : 'W'; } else { throw new Exception('$latlng is not valid, use "lat" or "lng"'); } $array = self::decToDms($dec); $deg = $array['deg'] . '°'; $min = $array['min'] . '\''; $sec = $array['sec'] . '\'\''; $string = $card . ' ' . $deg . ' ' . $min . ' ' . $sec; return $string; } |