Нормализовать вывод EXIF ​​до десятичных градусов

Я пытаюсь нормализовать exif() Вывод получаю из головы изображение. Прямо сейчас я делаю это.

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

и вар дамп $raw_lat выглядит так:

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

Функция запускается и выводит, как описано, как я возвращаю числа, однако эти числа очень далеко друг от друга, и это не получится, потому что они были взяты относительно близко друг к другу.

1

Решение

Вы пытаетесь выполнить арифметические операции над строковыми представлениями дробей, таких как "34/100", При переводе строки в числовом контексте 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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]