Геотегирование фотографий давно стало обыденным делом: оно поддерживается многими веб-сервисами, программами, в дешевые цифромыльницы встраивают GPS, к дорогим зеркалкам предлагают прикупить отсутствующую половину электроники, которая, заодно и GPS поддерживает. Однако, почти всегда дело ограничивается только расстановкой координат т.е. точки съемки. А в exif предусмотрено гораздо больше полей: координаты объекта съемки, направление съемки (только горизонтального, направления по вертикали нет), направление и скорость движения во время съемки. Из этих полей мне приглянулось направление съемки (положение объекта съемки тоже интересно, но не в этот раз) и я решил добавить его поддержку в gallery2.
Поддержка в gallery2
Для галереи существует замечательный модуль
map, отображающий фотографии на карте. Меня в нем не устраивали две вещи:
- Отсутствие поддержки направления съемки
- Использование GoogleMaps в качестве движка
Первый недостаток пришлось исправлять самостоятельно: дописав модуль map. Посмотреть на результат можно
здесь. Вы можете получить на своем сайте ту же функциональость наложив патч, приложенный к этому посту. Добавлены следующие плюшки:
- Чтение тега направления съемки
- Вычисление угла обзора (для ограниченного набора камер)
- Отображение всего этого хозяйства с помощью KML
Я ставил перед собой цель не сделать нечто готовое к промышленному использованию, а всего-лишь красиво отобразить фотографии на этом сайте, поэтому у предлагаемого кода есть существенные ограничения:
- Данные о направлении считываются только из EXIF, их нельзя задать из галереи
- Угол обзора корректно вычисляется только для canon 40D, canon 400D и full frame 35мм камер. Дело в том, что для его вычисления необходимо знать размер сенсора, а он в EXIF не хранится. Поэтому приходится иметь массив размеров сенсоров у разных моделей фотоаппаратов. Вы можете внести свою модель, отредактировав map/classes/FOWCalculator.class.
- Отсутсвует вычисление направления на северный полюс по направлению на магнитный полюс.
Используем OpenLayers
Вместо GoogleMaps, используемого по умолчанию, я решил применять свободный и более продвинутый OpenLayers. В данном случае задача упрощается тем, что я использую drupal и модуль Mapping Kit. Достаточно просто добавить на карту KML слой, генерируемый map. Кстати, встроенная в map карта отображать направление съемки не умеет, с OpenLayers такой проблемы нет.
- Подготовка фотографий
Чтобы вся эта радость работала необходимо заполнить соответствующие поля в EXIF. Фотокамер с цифровым компасом я не встречал, поэтому придется делать это ручками. Я направление прикидывал на глаз, поглядывая на карту и устанавливал его с помощью exiftool:
exiftool -GPSImgDirectionRef=T -GPSImgDirection=220 -GPSLatitude=55.64959 -GPSLongitude=37.97509 IMG_9315.jpg
Поклонники творчества Билла Гейтса могут поискать программы, позволяющие это делать через графический интерфейс, они точно существуют.