Получение GPS координат фотографии

Почти все современные фотоаппараты и подобная техника оснащены GPS приёмником, с помощью которого получают GPS координаты места сделанной фотографии. Данные GPS будут встроены в изображение вместе с заголовком EXIF. Координаты задаются в виде широты и долготы.

Давайте теперь рассмотрим как их можно извлечь из фотографии с помощью PHP.

PHP

В PHP есть встроенная функция exif_read_data(), которая считывает весь заголовок EXIF и возвращает его как массив. Таким образом, с помощью этой функции можно получить GPS координаты. Вот как выглядит возвращаемый массив:

[GPS] => Array
(
    [GPSLatitudeRef] => N
    [GPSLatitude] => Array
(
   [0] => 55/1
            [1] => 46/1
            [2] => 317999/10000
        )
    [GPSLongitudeRef] => E
    [GPSLongitude] => Array
(
   [0] => 38/1
            [1] => 27/1
            [2] => 522000/10000
        )
)

Значение широты и долготы представлено в массивах [GPSLatitude] и [GPSLongitude].

Оба этих массива имею значение координаты представленной в: [0] - Градусы, [1] - Минуты, [2] - Секунды. Значения представлены в рациональных числах.

Теперь необходимо перевести рациональное число в вещественное. Т.е. произвести деление.

И наконец, для использования этих координат, например для отображения точки на карте (google, yandex и т.п.), нужно сформировать число по такой формуле:
Градусы + Минуты / 60 + Секунды / 3600.

Вот пример функции для получения GPS координат:

function getGpsPosition($pathImage)
{
   $exif = exif_read_data($pathImage, 0, true);
   if (!$exif || $exif['GPS']['GPSLatitude'] == '') {
      return false;
   } else {
      $lat = $exif['GPS']['GPSLatitude'];
      list($num, $dec) = explode('/', $lat[0]);
      $latD = $num / $dec;
      list($num, $dec) = explode('/', $lat[1]);
      $latM = $num / $dec;
      list($num, $dec) = explode('/', $lat[2]);
      $latS = $num / $dec;
      $lon = $exif['GPS']['GPSLongitude'];
      list($num, $dec) = explode('/', $lon[0]);
      $lonD = $num / $dec;
      list($num, $dec) = explode('/', $lon[1]);
      $lonM = $num / $dec;
      list($num, $dec) = explode('/', $lon[2]);
      $lonS = $num / $dec;
      $position = [
         'latitude' => $latD + $latM / 60.0 + $latS / 3600.0,
         'longitude' => $lonD + $lonM / 60.0 + $lonS / 3600.0
      ];
      return $position;
   }
}

Использование

Пример использования:

print_r(getGpsPosition('1.JPG'));

Если всё пройдет успешно, то функция вернёт массив, иначе false. У меня получился вот такой массив:

Array
(
    [latitude] => 55.775499972222
    [longitude] => 38.4645
)

Вот так легко и просто можно получить GPS координаты с помощью PHP.