Convertire latitudine / longitudine da decimale a gradi e viceversa

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;
    }

Leave a Reply

Your email address will not be published.