shikhalev.org

Получение трека

Скриншот Locus Map

Фотокамера у меня недорогая, и GPS в ней, конечно, нет. Зато есть в телефоне. Поэтому треки я записываю приложением Locus Map Free (не Pro) — большую часть его возможностей (даже бесплатной версии) я не использую, но треки пи­шет хорошо, меня устраивает. И, кста­ти, весьма скромно использует батарею.

Перед выходом, сразу после проверки заряда во всех устройствах и места на флешке, крайне желательно убедиться, что время на телефоне и в ка­ме­ре — одинаковое. Конечно, при пешем передвижении минутная разница не так существенна, но однажды у меня камера отстала на пять минут, и результаты были для меня несколько внезапны.

Что еще важно для записи трека: дать приложению нужные разрешения для всех режимов — не хо­дить же с постоянно включенным экраном, на котором оно распахнуто. То есть, доступ к мес­то­по­ло­же­нию должен быть «Разрешить в лю­бом режиме», и «Кон­т­роль активности» — «Нет ограничений», при ре­ко­мен­до­ван­ном «Умном режиме» нормального трека получить не удас­т­ся. Что хо­ро­шо — Locus Map проверяет эти разрешения и выдает подсказку, если они не ус­та­нов­ле­ны, не ис­клю­че­но, что именно отсутствие такой подсказки и не позволило мне подружиться с другими приложениями для записи треков.

Трек пишется в GPX-файл, и это хорошо, поскольку данный формат понимают если не все, то очень многие программы, с ко­то­ры­ми нужно взаимодействовать. Я его отправляю прямо из при­ло­же­ния кнопкой шаринга «», из предлагаемых вариантов выбирая KDE Con­nect — архиполезная вещь, хоть и глюч­ная (впрочем, каким путем передать файл на компьютер — непринципиально).

Подготовка файла трека

Итак, у нас есть GPX-файл со все­ми перемещениями. Необязательно полученный именно с телефона, и имен­но так, как я изложил выше — подойдет любой источник, глав­ное — часы синхронизировать.

Главное окно GPXLab

Теперь нужно почистить трек: GPS — штука тонкая, и слу­ча­ют­ся вылеты типа показанного на скрин­шо­те — там аж несколько точек, образующих «треугольную» петлю, явно лажовые. Вообще, существуют программы, ищущие и вы­чи­ща­ю­щие такие точки автоматически (например, GPSBabel), но мне проще глазами посмотреть и руками удалить. Для этой цели хорошо подходит GPXLab. Можно ориентироваться прямо по карте, можно просмотреть список точек справа внизу, обращая внимание на не­су­раз­ные значения шага и ско­рос­ти — ну, не мог я передвигаться пешком по ле­су со ско­рос­тью почти 80 км/ч… Такие точки просто удаляем. Можно еще обратить внимание на слиш­ком резкие перепады высот (верхний правый угол) и вычистить их тоже.

Запись в EXIF

Сохраняем очищенный трек в тот же каталог, где у нас лежат фотографии, и даль­ше все просто, запись делается одним вызовом ExifTool:

$ exiftool -progress -overwrite_original -geotag=‹файл трека›.gpx ./

Это командная строка, которую я реально использую. Что с ней не так? Ключ -overwrite_original перезаписывает RAW-фай­лы, не оставляя бэкап. Поскольку я это делаю далеко не первый раз, могу себе позволить, чтобы не возиться с их удалением, но для первого раза — не рекомендую. Более того, же­ла­тель­но бы все операции проводить не с исходниками, а со свя­зан­ны­ми с ни­ми XMP-файлами. Однако для этого понадобится сначала скопировать в них время съемки, а потом вызвать exiftool с аргументом вроде ./*.xmp. Возможно, ког­да-ни­будь я не поленюсь и за­го­ню такую последовательность действий в скрипт…

А что с Darktable? У не­го же есть модуль загрузки GPX… Есть, но мне пока ни ра­зу не уда­лось им воспользоваться — судя по все­му, он ожидает файл с точками, полностью соответствующими по вре­ме­ни фотографиям, что возможно только при ис­поль­зо­ва­нии специального GPS-устройства для горячего башмака, которое будет писать точки синхронно. А стоит такое устройство, как пол-камеры… Тогда как ExifTool вычисляет положение, где была сделана фотография по имеющимся точкам трека, что, конечно, добавляет некоторую погрешность, зато позволяет использовать уже имеющийся телефон вместо специального устройства.

Зато Darktable позволяет просто поместить фото на кар­ту, если у вас и трека-то никакого нет. Правда, время от времени я таким образом промахиваюсь метров на 50… Моя ли это неаккуратность, или какой-то баг — не знаю.

Еще одна особенность Darktable, о ко­то­рой необходимо упомянуть — он не пе­ре­чи­ты­ва­ет метаданные из RAW, уже находящихся в его базе. Вот за изменением XMP следит и спра­ши­ва­ет, чем руководствоваться — файлом, или базой, а ис­ход­ни­ки не смот­рит. Поэтому, если вы уже импортировали съемку в Darktable, и только после этого вспомнили, что нужно прописать геотеги, придется удалить эти кадры из ба­зы (из «кол­лек­ции» в тер­ми­нах Darktable) (при этом XMP с ис­то­ри­ей изменений прекрасно сохранятся), прописать геотеги посредством exiftool и уже после этого импортировать фотографии в Dark­table заново. Таков путь.

Итого

Основная цепочка в моем случае выглядит так:

Locus Map → GPXLab → ExifTool → Darktable

Дополнительно можно на этапе подготовки файла задействовать GPSBabel — до или вмес­то GPXLab, особенно, если у вас GPS-лог­гер пишет не GPX, а ка­кой-то другой формат — GPSBabel знает их несколько и умеет конвертировать. А уже в Dark­table можно разместить фотографии на кар­те вручную.

Я ничего не на­пи­сал про кор­рек­ти­ров­ку времени, поскольку не при­ш­лось с ней сталкиваться — у ме­ня все работает по умолчанию. Однако, если часы на ус­т­рой­с­т­вах рассинхронизированы, или ка­кие-то заморочки с ча­со­вы­ми поясами, или еще какая напасть — ExifTool имеет параметры сдвига времени, можно этим воспользоваться.