Pull to refresh

Геотаггинг: не картами едиными

Reading time2 min
Views705
image
На просторах интернетов уже довольно широко распространен прием показа карты того места, где снята фотография. На практике, это реализуется двумя путями:
  1. Просто указанием места на карте, например, как это делается на Flickr или при помощи плагина GeoPress для Wordpress
  2. Извлечением координат из EXIF'а фотографии — если они там есть
Второй способ, естественно, куда «красивее» и правильнее — но несколько сложнее технически. Однако не буду рассматривать, как добавить координаты в EXIF — а расскажу о том, как их можно использовать.
Давно, очень давно мучала меня идея — не хочу показывать карту. То есть карта это хорошо, но не все. Хочу человеческим языком сказать посетителю: фотография снята в таком-то городе по такому-то адресу. Ну очень давно хотел я это сделать, и в конце концов собрался.

В качестве «экспериментальной свинки» я взял, разумеется, свой собственный фотоблог — хакать, так по-полной. Немного о том, как он организован:
  1. В самом «низу» иерархии стоит (ну не лежит же!) Wordpress 2.7
  2. На этом Wordpress базируется плагин Yet Another Photoblog, который превращает блог в самый настоящий фотоблог
  3. А вот на YAPB уже в свою очередь крутится тема Reflection, глобально доработанная напильником (практически до неузнаваемости)
Среди преимуществ, которые дает YAPB, одним из самых важных для разработчиков является то, что с постом всегда ассоциирована ровно одна картинка, и можно легко получить ее EXIF. Поэтому все остальное было делом техники.

Я написал плагин для YAPB (да-да, плагин для плагина), который брал координаты (которые почему-то в EXIF'е записаны в градусах-минутах-секундах), преобразовывал их к WGS84, после чего передавал все клиенту, который делал все остальное (используя, соответственно, JavaScript). Почему так сложно? В первую очередь потому, что в конечном счете используется Google Maps API, и делать это приходится на клиенте. Собственно, каждая страница породжает два вызова API — один для генерации карты, а другой — для обратного геокодинга координат. Собственно, результат этого reverse geocoding'а и отображается в виде адреса. Как это все выглядит вживую можно посмотреть, например, здесь или здесь. Важно заметить, что если в фотографии нет координат — магии не получится, карты не будет и адрес не покажется — так что загрузке фотографии всегда предшествует процесс проставления координат на них (впрочем, он предельно автоматизирован); кроме того, адрес определяется с той точностью, которая доступна поставщику геоданных Гугла (то есть если фотография была сделана в открытой степи в сотне километров от ближайшего населенного пункта — чуда не случится, и вы в лучшем случае получите название дороги).

В принципе, я абсолютно готов поделиться всеми этими наработками, но… код так ужасен, что мне просто стыдно его выкладывать. Возможно, через какое-то время я его причешу и оформлю в виде нормального плагина — если будет к этому интерес. Засим откланиваюсь — и удачных вам кадров!
Tags:
Hubs:
Total votes 10: ↑10 and ↓0+10
Comments1

Articles