php
На днях один знакомый попросил привязать ему фотографии к местности, передав мне собственно сами фотографии и файл путевой точки в формате lmx(Nokia landmark file). Фотографий было окола ста, поэтому делать все вручную меня не вдохновляло. Тогда я написал небольшой скрипт на php.
Сразу хочу предупредить: особо программировать я не умею. Когда то давно писал модули для MapInfo в программе MapBasic, но это не то.
Используя сделал следующее:
- <?php
- require_once ("PelJpeg.php");
- require_once ("PelIfd.php");
- $res = simplexml_load_file($argv[1]);
- foreach ($res->xpath('//lm:latitude') as $lat);
- foreach ($res->xpath('//lm:longitude') as $lon);
- foreach ($res->xpath('//lm:altitude') as $alt);
- $lat_deg=(int)$lat;
- $lat_min=((float)$lat-$lat_deg)*60;
- $lat_min=(int)$lat_min;
- $lat_sec=(((float)$lat-$lat_deg)*60-$lat_min)*60;
- $lat_sec=number_format($lat_sec, 2);
- $lon_deg=(int)$lon;
- $lon_min=((float)$lon-$lon_deg)*60;
- $lon_min=(int)$lon_min;
- $lon_sec=(((float)$lon-$lon_deg)*60-$lon_min)*60;
- $lon_sec=number_format($lon_sec, 2);
- $gps = new PelIfd(PelIfd::GPS);
- $latitude = new PelEntryRational(0x0002,array($lat_deg,1),array($lat_min,1),array($lat_sec,100));
- $longitude = new PelEntryRational(0x0004,array($lon_deg,1),array($lon_min,1),array($lon_sec,100));
- $altitude = new PelEntryRational(0x0006,array($alt,1));
- foreach (glob("*.jpg") as $filename)
- {
- $jpeg = new PelJpeg($filename);
- $exif = $jpeg->GetExif();
- $tiff = $exif->getTiff();
- $ifd = $tiff->getIfd();
- if($ifd->getSubIfd(PelIfd::GPS)==null)
- {
- $ifd->addSubIfd($gps);
- $gps->addEntry($latitude);
- $gps->addEntry($longitude);
- $gps->addEntry($altitude);
- file_put_contents('geo-' . $filename, $jpeg->getBytes());
- }
- }
- ?>
Теперь мне достаточно поместить все изменяемые файлы в одну директорию. Туда же положить свой скрипт и файл с путевой точкой. Набрать в командной строке php my.php файл_путевой_точки и на выходе я получу свои фотографии, имеющие геотаг.
Так как это мой первый опыт программирования(на php), да и сделан он был на скорую руку, то он не без недостатков. Так он не проверяет передан ли файл путевой точки в программу. Строчки с 8-17 преобразуют координаты из формата ГГГ,ГГГГГ° в формат ГГГ°ММ'СС,СС". Если Вам известны координаты, то строчки 4-17 можно удалить. А в строчках 19-20 подставить нужные вам значения. Так же скрипт добавляет геотаг лишь тем файлам, в которых его нет. Остальные файлы он пропускает. В имена новых изображений добавляется приставка 'geo'.

