2016-12-17 45 views
1

我想正常化我從圖像的頭部得到的exif()輸出。現在,我正在這樣做:正常化exif輸出到十進制度

$exifs = exif_read_data($file, 0, true); 
$raw_lat = $exifs['GPS']['GPSLatitude']; 
$raw_lon = $exifs['GPS']['GPSLongitude']; 

$raw_lat的VAR轉儲看起來是這樣的:

array(3) { [0]=> string(4) "34/1" [1]=> string(3) "5/1" [2]=> string(11) "231365/9853" } 

$raw_lon是相同的結構,所以我想我需要做的正常化這小數度是使用下面的函數:

private function normalize($array){ 
    $deg = $array[0]; 
    $min = $array[1]; 
    $sec = $array[2]; 
    $dd = $deg+((($min*60)+($sec))/3600); 
    return $dd; 
} 

該函數按照我所返回的數字運行和輸出,但是這些數字相隔很遠並且不會m因爲他們之間的關係比較密切。

回答

0

您正試圖對分數的字符串表示進行算術運算,如"34/100"。當解釋strings in numeric context時,PHP將截斷值高達/字符,特別是。例如,"34/100" + "1/100000"結果爲35,但不是0.34001。所以你必須自己將字符串轉換爲數字。

/** 
* @param string $s Number as a fraction A/B, e.g. 34/100 
* @return float 
*/ 
function string_to_float($s) { 
    $parts = explode('/', $s); 
    return (count($parts) >= 2) 
    ? ($parts[0]/$parts[1]) 
    : floatval($parts[0]); 
} 

/** 
* @param array $dms Latitude/longitude degrees, minutes, and seconds 
* @return float 
*/ 
function latlong_normalize(array $dms) { 
    $deg = string_to_float($dms[0]); 
    $min = string_to_float($dms[1]); 
    $sec = string_to_float($dms[2]); 
    return $deg + ($min * 60 + $sec)/3600; 
} 

// Latitude = 34 5 231365/9853 
$raw_lat = ['34/1', '5/1', '231365/9853']; 

echo latlong_normalize($raw_lat); 

輸出

34.089856022418