2016-12-17 1 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