Intereting Posts
использование mysql LOAD statment в PHP завершается с ошибкой, но выполнение этого выполняется с помощью командной строки MongoDb: Преимущества использования ObjectID vs строки, содержащей Id? как определить конфигурационный файл php, который определяет константу и использовать ее где угодно в проекте Codeigniter – запрошенный URL не найден на этом сервере Debian Jessie – Apache2 / PHP 5.6, не может загружать более 128 КБ Замена тегов с помощью PHP с RegExps Parse Apache регистрируется в PHP с помощью preg_match Запрос PHP и Mysql, используйте PHP для преобразования строк в столбцы Сравнение строк и значений Оптимизация запросов MySQL Массивы PHP – удаление дубликатов (временная сложность) Вызов свойства переменной напрямую vs getter / seters – OOP Design как я могу использовать imagick в php? (изменение размера и урожая) preg_match координаты со знаком степени Как защитить скрипт загрузки изображений PHP от эксплойтов? Формат по умолчанию MySQL по умолчанию UTC или GMT?

Чтение данных Geotag с изображения в php

Кто-нибудь знает, есть ли способ читать данные геотаг из фотографий в PHP?

благодаря

Как и все остальные, exif_read_data (); сделаю это. Чтобы продолжить и получить все данные, используйте эти аргументы:

exif_read_data($img, 0, true); // where $img is the path to your image 

Эта функция может читать только заголовки из tiffs и jpegs, и я уверен, что только jpeg могут содержать геотаг. Я написал простой скрипт php для использования в командной строке и разместил его как gist на github .

Запустите скрипт следующим образом: php exif.php

Он отобразит массив. Найдите координаты здесь:

 [GPS] => Array [GPSLatitudeRef] => N [GPSLatitude] => Array [0] => 30/1 [1] => 1589/100 [2] => 0/1 [GPSLongitudeRef] => W [GPSLongitude] => Array [0] => 87/1 [1] => 3609/100 [2] => 0/1 [GPSAltitudeRef] => [GPSAltitude] => 18289/454 [GPSTimeStamp] => Array [0] => 20/1 [1] => 22/1 [2] => 2065/1 [GPSImgDirectionRef] => T [GPSImgDirection] => 34765/689 

Массивы широты и долготы содержат три значения: 0 для градусов, 1 – минуты, а 2 – секунды. Если вы видите что-то вроде «1589/100», это равно 15.89. Таким образом, для массива GPSLongitude 3609/100 равен 36,09.

Преобразуйте координаты из градусов-минут-второй формы в десятичную форму здесь http://www.satsig.net/degrees-minutes-seconds-calculator.htm

Если широта Юг, не забудьте сделать ее отрицательной. Если долгота на западе, сделайте этот минус. Данные из приведенных выше данных: 30.26483, -87.6015

Будет ли ответ Коклина правильным, хотя я сформулировал функцию для быстрой справки, если кто-то наткнулся на ту же проблему.

 /** * Returns an array of latitude and longitude from the Image file * @param image $file * @return multitype:number |boolean */ function read_gps_location($file){ if (is_file($file)) { $info = exif_read_data($file); if (isset($info['GPSLatitude']) && isset($info['GPSLongitude']) && isset($info['GPSLatitudeRef']) && isset($info['GPSLongitudeRef']) && in_array($info['GPSLatitudeRef'], array('E','W','N','S')) && in_array($info['GPSLongitudeRef'], array('E','W','N','S'))) { $GPSLatitudeRef = strtolower(trim($info['GPSLatitudeRef'])); $GPSLongitudeRef = strtolower(trim($info['GPSLongitudeRef'])); $lat_degrees_a = explode('/',$info['GPSLatitude'][0]); $lat_minutes_a = explode('/',$info['GPSLatitude'][1]); $lat_seconds_a = explode('/',$info['GPSLatitude'][2]); $lng_degrees_a = explode('/',$info['GPSLongitude'][0]); $lng_minutes_a = explode('/',$info['GPSLongitude'][1]); $lng_seconds_a = explode('/',$info['GPSLongitude'][2]); $lat_degrees = $lat_degrees_a[0] / $lat_degrees_a[1]; $lat_minutes = $lat_minutes_a[0] / $lat_minutes_a[1]; $lat_seconds = $lat_seconds_a[0] / $lat_seconds_a[1]; $lng_degrees = $lng_degrees_a[0] / $lng_degrees_a[1]; $lng_minutes = $lng_minutes_a[0] / $lng_minutes_a[1]; $lng_seconds = $lng_seconds_a[0] / $lng_seconds_a[1]; $lat = (float) $lat_degrees+((($lat_minutes*60)+($lat_seconds))/3600); $lng = (float) $lng_degrees+((($lng_minutes*60)+($lng_seconds))/3600); //If the latitude is South, make it negative. //If the longitude is west, make it negative $GPSLatitudeRef == 's' ? $lat *= -1 : ''; $GPSLongitudeRef == 'w' ? $lng *= -1 : ''; return array( 'lat' => $lat, 'lng' => $lng ); } } return false; } 

Надеюсь, это поможет кому-то.

Вы можете использовать функции EXIF для PHP:

 exif_read_data($file); 

// вызов этой функции с именем файла

// Perfect Worked …….

$ Имя_файла = 'XXXXXX'; или $ fileName = 'xxxxxxxxx'; echo $ return_data = triphoto_getGPS ($ fileName);

function triphoto_getGPS ($ fileName) {

 //get the EXIF all metadata from Images $exif = exif_read_data($fileName); if(isset($exif["GPSLatitudeRef"])){ $LatM = 1; $LongM = 1; if($exif["GPSLatitudeRef"] == 'S'){ $LatM = -1; } if($exif["GPSLongitudeRef"] == 'W'){ $LongM = -1; } //get the GPS data $gps['LatDegree']=$exif["GPSLatitude"][0]; $gps['LatMinute']=$exif["GPSLatitude"][1]; $gps['LatgSeconds']=$exif["GPSLatitude"][2]; $gps['LongDegree']=$exif["GPSLongitude"][0]; $gps['LongMinute']=$exif["GPSLongitude"][1]; $gps['LongSeconds']=$exif["GPSLongitude"][2]; //convert strings to numbers foreach($gps as $key => $value){ $pos = strpos($value, '/'); if($pos !== false){ $temp = explode('/',$value); $gps[$key] = $temp[0] / $temp[1]; } } //calculate the decimal degree $result['latitude'] = $LatM * ($gps['LatDegree'] + ($gps['LatMinute'] / 60) + ($gps['LatgSeconds'] / 3600)); $result['longitude'] = $LongM * ($gps['LongDegree'] + ($gps['LongMinute'] / 60) + ($gps['LongSeconds'] / 3600)); $result['datetime'] = $exif["DateTime"]; return $result; 

}}

Вы можете использовать exif_read_data() если геотегационные данные встроены в данные EXIF.