Тарифы Услуги Сим-карты

Привязка фотографий к GPS-координатам под Mac OS. Простая геопривязка фотографий - сервис GeoCam Как сделать чтобы фотография отображалась gps

В этой статье будет рассмотрено, как добавить информацию GPS к EXIF меткам фотографий, используя логи данных телеметрии.

Mission Planner предоставляет два метода добавления меток GPS из полетных логов:

  1. События камеры из данных логов хранящихся в памяти контроллераArduPilot может осуществлять спуск затвора камеры во время выполнения запрограммированных полетных заданий используя команды DO_DIGICAM_CONTROL или DO_SET_CAM_TRIGG_DIST. Передаваемые команды сохраняются в логах и могут быть применены для добавления точной информации о координатах конкретного снимка.
  2. Временное смещение. Этот метод использует разницу во времени между внутренними часами камеры и системными часами для определения, где был сделан каждый снимок и получения информации GPS. Обычно пользователь должен самостоятельно подобрать приемлемое смещение. Этот метод менее точен и применяется, когда нет соединения между камерой и автопилотом.

Замечание.

Хотя ваша камера может быть оснащена встроенным GPS, применение данных из логов телеметрии оказывается более точным.

Добавление координат GPS

Подготовительные действия.

Следующие действия зависят от метода, который вы выбрали — события камеры или временное смещение (CAM Messages или time offset).

События камеры

События камеры записываются в порядке определенным полетным заданием, при выполнении любой из команд управления затвором камеры (CAM_TRIGG_DISTANCE, DO_DIGICAM_CONTROL и др).

  • Выберите метод CAM Message.
  • Введите значение задержки спуска затвора камеры в миллисекундах, если вы ее знаете. Если не известна, оставьте 0.
  • Проверьте, что смещение логов соответствует вашей версии логов. Обычно оно в порядке. Check that Log offsets are correct according to your log version (usually these are OK)
  • Введите информацию о поле зрения FOV, если необходимо.
  • Поставьте галачку напротив AMSL Alt, если вы хотите использовать абсолютную высоту.
  • Нажмите Pre-process

Если подготовка выполнена правильно, вы увидите сообщение Done в конце области рабочих сообщений.

Замечание.

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

Разница во времени.

Совет.

Если вы еще не знаете, есть один полезный способ синхронизировать время камеры и системное время.


Если подготовительные операции пройдут успешно, вы появится сообщение Done.

Замечание

Наиболее частая проблема при использовании данного метода — это неточное значение разницы во времени. Запомните, что предполагаемая разница — это начальная точка всех вычислений.

В случае если утилита не обнаружит фото в логах автопилота — появится предупреждение, как на картинке ниже:

Финальным шагом является «проверка чистоты», а именно проверка предложенного положения фотографий используя кнопку Location Kml. Если предложенное местоположение не верно, добавьте или отнимите несколько секунд из Offset Time и повторите pre-process.

Основная пост обработка.

Дальнейшие действия направлены на проверку предложенного местоположения снимков и записи данных GPS в данные EXIF:


Снимки с метками GPS вы можете найти в папке geotagged внутри исходной папки.

Обзор интерфейса.

Экран утилиты Mission Planner Geo Ref Images показан на рисунке ниже:

Выбор файлов

Расчет разницы во времени и задержка затвора.

Разница во времени вычисляется путем сравнения времени первой фотографии и первого времени GPS в логах автопилота. Как только пользователь нажимает кнопку Estimate Offset, утилита вычислит разницу времени и выведет результат на экран в области служебных сообщений:

Offset Estimation = 1st_Picture_Time - 1st_GPS_Time_Logged

Замечание:

  • Если выбран способ события камеры, доступно для редактирования значение задержки затвора Shutter Lag . Заметьте, что данные GPS обновляются с частотой 5Hz (для модуля 3DR GPS), таким образом они записываются каждые 200ms.
  • Если задержка затвора меньше чем 100ms, тогда позиция GPS берется из текущего события камеры.
  • Если задержка больше 100ms, позиция GPS берется в логах на 200ms раньше.

Коррекции в логах

Эта область позволяет пользователю показать утилите, где может быть найдена спецефическая информация в логах. Существует три события, для которых нужна корректировка.

Пример, как найти корректировки в линии события.

Давайте взглянем на формат линии GPS в начале лога:

FMT, 130, 45, GPS, BIHBcLLeeEefI, Status,TimeMS,Week,NSats,HDop,La6t,Lng,RelAlt,Alt,Spd,GCrs,VZ,T

Сначала необходимо найти перовое после слова определяющего единицы измерения.

В нашем случае, слово определяющее еденицу измерения — это BIHBcLLeeEefI. Таким образом первое поле — это Status

Отсюда получаем:

TimeMS = 2 Week = 3 Lat = 6 ...

Угол зрения и эталон высоты.

Здесь пользователь может указать угол зрения (FOV) и информацию об ориентации. Информация будет вставлена в результирующие файлы, но не будет храниться в данных EXIF.

Галочка AMSL Alt позволяет выбрать либо AGL Altitude (Высота над уровнем земли) или AMSL Altitude (Высота над уровнем моря).

Кнопки операций

  • Pre-process — при нажатии этой кнопки программа будет пытаться получить и вычислить позиции снимков.
  • Location Kml — после нажатия этой кнопки утилита откроет программу Google Earth и покажет положение фото на карте для проверки положения.
  • GeoTag Images — если предыдущие шаги завершились успешно, нажатие данной кнопки запишит данные GPS в EXIF метки каждой фотографии.

Заказать создание ортофотопланов и 3D моделей местности, а также проведение фотограмметрии можно на нашем сайте

" и зачем вообще она нужна?

Когда мы получили (со сканера ли, с фотоаппарата, с интернета) изображение карты - это всего лишь картинка . Для использования в программах навигации компьютер должен знать (или уметь рассчитать) координаты каждой точки на этой карте. Для этого ему необходимо знать как минимум три параметра - координаты углов карты, проекцию и систему координат , в которой составлена данная карта. Все эти параметры необходимо указать.

Возьмём три примера.

1. Топографическая советская километровка (L-37-140) . ()

На этой карте сохранено зарамочное оформление. т.е. нам известны:

Координаты углов:

Система координат

Проекция

2. Есть топографическая карта, но поля обрезаны. Однако, сохранилась километровая сетка или рудименты (перекрестья) от неё.

Таковы, например, полукилометровки Краснодарского края . Первым делом проверяем - действительно ли это сетка, совпадающая с номенклатурной в данном квадрате или она начинается на каждом листе карты от края листа. "Правильная" сетка в большинстве случаев имеет отклонение от вертикали.

Теперь нам важно определить прямоугольные координаты четырёх пересечений сетки. Для этого берём любую другую доступную нам карту на данный район с сеткой, пускай даже двухкилометровку. Привязываем её. Заходим в ози, меню - настройки - вкладка "Карты" - справа система координат - выбираем в выпадающем списке "пользовательская " - щелкаем на треугольник справа и вбиваем настройки такие же как указано . Теперь при наведении курсора мыши к перекрестью километровой сетки мы видим заветные цифры, которые нужно ввести в поле "пользовательские" при привязке нашей карты. Скорее всего подвести курсор точно к перекрестью не получится - не беда! Мы знаем, что прямоугольные координаты перекрестьев кратны 1000 - т.к. сетка километровая, т.е. можем смело округлять.

Повторяем хотя бы на четырёх максимально удалённых друг от друга пересеченьях.

3. Есть карта (в том числе старинная) - сетки нет ни километровой, ни градусной, либо она явно не совпадает с общепринятой или есть серьёзные сомнения в их достоверности или сетка есть, параметры датума и проекции неизвестны. В общем-то ЛЮБАЯ карта, хоть с пачки беломора.

Открваем её в любом удобном графическом редакторе.

Определяем на какую местность эта карта.

В ози открываем любые (максимально подробные) карты на эту же местность. Находим одинаковые объекты - в порядке уменьшения точности: церкви, отметки высот, ж/ д мосты, пересечения дорог (в т.ч. улиц), слияния рек. Ставим в ози "точки " на этих объектах. Необходимо найти не менее 4-х и не более 9 таких объектов.

Нажимаем меню "файл - загрузить и откалибровать карту" - выбираем нашу карту.

Проекцию ставим latitude\longitude, систему координат - WGS84.

Переходим на вкладку "точка 1", отмечаем на карте нужный объект и нажимаем на кнопку "ПТ" (или "WP") - выбираем из списка соответствующую точку и нажимаем "использовать точку" (use wp). Переходим на следующую вкладку и повторяем со всем списком.

Сохраняем полученный map файл.

Всё, файл привязан. Точность этого способа сильно зависит от наличия подробных карт, выбранных объектов, количества точек привязки. В сложных случаях используется другое ПО, без ограничения на количество точек привязки и с физическим выпрямлением растра, космоснимки высокого разрешения. В этом случае можно достаточно точно привязать даже фотографию глобуса или вид из окна самолёта, не говоря уже о любых картах.

Вы можете заказать

22.02.2012 46498

Простая геопривязка фотографий - сервис GeoCam

Честно говоря, меня давно интересовала возможность делать автоматическую привязку фотографий к тому географическому положению, где эта фотография сделана. А нужно это по нескольким причинам. Во-первых, частенько это требуется мне самому - ну, знаете, сфотографируешь симпатичный ресторанчик, магазинчик, просто интересное место, а потом по фото натужно пытаешься вспомнить, где это все находится. Оно, конечно, ресторанчик-то можно отыскать по названию и городу (если суметь запомнить город, что после некоторых ресторанчиков не всегда удается), а вот в случае магазинчиков и мест без названия - это как-то совсем сложно. Во-вторых, было бы очень полезно ставить координаты GPS на некоторые фотографии для репортажки в блоге. А то начинается: опубликуешь фотографию (да тех же ресторанчиков, которые я люблю изучать в плане духовного роста во время поездок), и начинается - какой адрес, какой городок, какая страна, какая планета, что за галактика... Ну и, в-третьих, когда отправляешь родственникам-друзьям данные моего пребывания где-нибудь в той же Испании, чтобы они могли приехать, очень удобно кинуть кучу фото с координатами и углом обзора: так они отлично представят окружающую обстановку, хорошо изучат местность, ну и получат требуемый адрес. Как решать все эти проблемы? Современные цифровые фото почти всегда снабжаются различными метаданными по стандарту EXIF: туда входят, например, название и модель камеры, дата и время съемки, выдержка, диафрагма и другие данные, среди которых, между прочим, также есть данные GPS. То есть географические координаты можно записывать прямо в изображение.Однако современные фотокамеры редко снабжаются модулем GPS, позволяющим записывать координаты в данные EXIF сделанных ими фото. (Для некоторых моделей можно приобретать отдельные устройства GPS, которые фиксируют координаты и передают их в фотоаппарат по беспроводной связи, но я такие устройства пока в руках не держал, а некоторые знакомые, которые тестировали что-то подобное, говорят, что все это реализовано довольно криво.)С коммуникаторами, конечно, проще - они почти все снабжаются модулем GPS, и некоторые из них (хотя, как ни странно, далеко не все) умеют осуществлять геотаггинг - то есть записывать координаты GPS в данные фотоснимков.Ну и в любом случае что фотоаппараты с GPS, что коммуникаторы с GPS, записывающие координаты в EXIF, не определяют и не записывают положение камеры в пространстве - чтобы по фотографии можно было точно определить, с какой именно точки сделан снимок.Я поизучал данный вопрос, и выяснилось, что для устройств на Android и на iOS существует сервис, который достаточно эффективно решает задачу записи географических данных и угла обзора объектива в производимых снимках.Называется этот сервис GeoCam . У него есть бесплатная и платная версии под Android (бесплатную скачать , платную скачать), а также бесплатная и платная версии под iPhone (бесплатную скачать , платную скачать).


Страница приложений GeoCam

Скачал версию под Android, установил (на Samsung Galaxy Note). Отправился тестировать.Работает это все следующим образом. Запускаете приложение, появляется режим фотокамеры в следующем виде. На весь экран - изображение с камеры (в скриншот оно не попало) с углом обзора объектива. Слева сверху - кусок карты местности от Google Map. На верхней информационной панели - широта, долгота и точность определения. На нижней информационной панели - параметры угла обзора: азимут, наклон, крен.


Режим съемки

Нажимаете на "затвор" фотоаппарата - изображение сохраняется вместе со всеми координатами.Если нажать на пиктограмму под пиктограммой "затвора", вы увидите сделанный кадр со всеми данными. Снизу идет фото, сверху - кусок карты с углом обзора. Карту можно переключать между режимами спутник-схема.


Фото и карта в режиме спутника


Фото и карта в режиме схемы

Там можно включать режим редактирования (тоже карта и спутник), в котором можно уточнить положение и угол обзора, если это зачем-то нужно.


Редактирование в режиме схемы


Редактирование в режиме спутника

Во всех этих режимах карты масштабируются обычным для современных коммуникаторов образом - с помощью пиктограмм или мультитачем.Далее важно понять следующую вещь. Вся собранная с помощью GeoCam информация о географических координатах, азимуте, наклоне и крене камеры записывается непосредственно в EXIF изображения! Данные GPS записываются в стандартизованное поле EXIF, и эти параметры оттуда может достать любая программа, понимающая EXIF, а дополнительные поля, которые GeoCam вписывает в EXIF (многие программы делают свои расширения стандартного EXIF - это вполне допускается), могут быть считаны как специальными приложениями GeoCam, так и любыми другими программами, создатели которых могут работать с этими данными с помощью доступного для скачивания расширения EXIF , принятого в GeoCam.Таким образом, если сделанную фотографию - просто как есть - куда-то отправить (на почту, на устройство, в социальную сеть), то там, как минимум, можно узнать координаты GPS сделанного снимка, а кроме того, если воспользоваться специальными расширениями, то можно узнать и азимут, и остальную информацию, которую туда можно вписывать, - пометки фотографа, пользовательские комментарии и так далее.


Информация о файле с комментариями

Отправить (передать) фотографию можно непосредственно с коммуникатора.Если нажать андроидную кнопку "меню", то появятся следующие варианты выбора: отправить, создать отчет, удалить.По пункту отправить предлагаются вот такие возможности.


Варианты отправки

Вариантов тут много, и они, разумеется, зависят от установленных приложений: почта, беспроводные сети, SMS, социальные сети, онлайновые сервисы, другие приложения и так далее.Передаваться будет только само изображение с зашитыми в EXIF соответствующими данными.Отчет Вторая пиктограмма меню - отчет. В качестве отчета создается документ PDF, в который включаются фото, два варианта масштаба схемы карты (можно также включать спутник) и вся собранная информация. Документ также можно передать-переслать куда угодно или открыть непосредственно на коммуникаторе.Выглядит это примерно следующим образом (кликабельно).


Отчет по одной фотографии

Проекты и метки Для удобства обработки сделанные геофото (фотографии, созданные с помощью данного сервиса) можно распределять по проектам, а также использовать специальные фильтры, которые относятся к определенным областям карты - конкретным улицам, городам, регионам.


Проекты


Фильтры

По проектам фото можно разносить как вручную, при съемке указывая проект, а также можно к проекту привязать набор фильтров (континент, страна, город, улица и так далее), и тогда снятые фото автоматически будут попадать в нужный проект.Проекты, кроме всего прочего, интересны тем, что там можно отобрать нужную группу геофото и вывести все точки съемки на одну карту.Сначала отбираются нужные фото одного проекта.


Фото одного проекта и меню


Отбор фото одного проекта

После этого нажимается кнопка "Посмотреть", после чего на верхнем изображении GeoCam выводит на карте (схема или спутник) все точки съемки отобранных фото, между которыми можно переключаться. Карту, соответственно, можно масштабировать.


Все точки съемки на схеме


Все точки съемки на спутнике

Сервис www.geo-photo.net Для размещения в онлайне сделанных геофото существует специальный сервис www.geo-photo.net . Регистрация там бесплатная, и на этом сайте вы можете размещать свои геофото, разделяя их на проекты, при необходимости давая прямые ссылки для доступа всем заинтересованным лицам.Делается это все просто. Сначала вы регистрируетесь на сервисе (либо же просто логинитесь с помощью аккаунта в Twitter, Facebook или Google), после чего можете закачивать туда изображения прямо с вашего коммуникатора или с компьютера, куда геофото требуется предварительно перекачать.В аккаунте фото распределяются по проектам, по каждой фотографии можно увидеть два изображения карт различных масштабов выбранных сервисов: Google, Bing, Osm, Yandex - при этом доступны варианты отображения этих сервисов. Вот пример по Google (кликабельно).


Мое геофото в Geo-Photo.net

Сервис GeoView под Windows Для получения всех данных по геофото можно использовать и программу под Windows - она называется GeoView (ее можно скачать бесплатно). Программа работает почти так же, как и онлайновая версия: в нее закачиваются геофото (с коммуникатора) и вы можете получить одну-две карты от любого выбранного сервиса любого масштаба (кликабельно).


GeoView

Приложение под iOS Потестировал, как это все работает под iOS. Сначала проверил бесплатную версию. В принципе работает нормально - по крайней мере, координаты сохраняет в изображении плюс сохраняет все соответствующие данные об угле съемки. Однако видно, что основные усилия разработчиков все-таки направлены на версию под Android - она более функциональна и, как бы это сказать, более "вылизанная". Впрочем, версией под iOS пользоваться можно, я целый день на ней делал геофото - все работало без особых проблем.


Фото со схемой под iOS


Фото со спутником под iOS

Кстати, что странно, у меня как раз платная (Pro) версия сначала под iOS заработала с заметными глюками. Но потом я ее удалил и поставил заново - заработала нормально.Тонкости работы с сервисом Некоторые пользователи, изучая работу с сервисом, задают вопрос из серии: "Ну, как же так, а если у нас там, за границей, нет Интернета, так что же - без него фото не сделать?" Сделать, конечно! Суть сервиса в том, что ваш коммуникатор с помощью GeoCam во время съемки проставляет на фото нужные координаты плюс азимут и другие данные (на ваше усмотрение). После этого фото можно отправлять друзьям, закачивать на свой компьютер, публиковать во всяких социальных сетях или на специальном сервисе www.geo-photo.net ! Так как информация при съемке сохраняется непосредственно в самом файле, больше ничего делать не нужно и никакого Интернета при съемке не потребуется. Тут главное - установить приложение на ваш Android-телефон или iPhone, после чего координаты и угол съемки будут сохраняться автоматически, а где и в чем вы потом будете просматривать снятые изображения - это ваше дело.Также отправленные фото ваши друзья, родственники и знакомые смогут просматривать в любых сервисах, поддерживающих получение информации из EXIF, а таких сервисов - сотни.Выводы Сервис очень интересный и полезный. Я его потестировал где-то с неделю - был очень доволен. Что на андроидном телефоне, что на айфоне все работало так, как полагается, и я уже начал себе составлять отдельную коллекцию геофото, которые потом, отдельно от основной коллекции, можно будет использовать в качестве изображений с привязкой к местности.Впрочем, есть и что покритиковать. Фотографии с зашитыми данными GPS - это отлично, однако многие пользователи тех же социальных сетей (да и просто моих читателей) понятия не имеют, как доставать подобную информацию из публикуемых мною изображений. И это не их вина: моя задача - предоставлять удобную возможность получать подобные данные.Что для этого нужно? Только и всего: чтобы с помощью GeoCam я мог готовить фотографию для отправки по почте или в социальные сети с наложенными прямо на изображение географическими координатами - это самый простой вариант.Я пообщался с разработчиками, они сказали, что это все вполне осуществимо и что в следующих версиях такая возможность обязательно появится.Да, проблему наложения геокоординат на фотографии, снятые не коммуникатором, а фотокамерами, сервис практически не решает. (Можно, конечно, для фотоаппаратов, поддерживающих карточки Eye-Fi , использовать передачу по Wi-Fi кадров в коммуникатор с GeoCam с последующей привязкой к местности, но это слишком геморройно.)Однако привязка, как правило, требуется не для художественных фотографий, сделанных зеркалкой или другим качественным фотоагрегатом, а для чисто репортажной съемки (из серии - вот тут мы живем, вот тут классный ресторанчик, вот шикарный вид на море, здесь каждый день сидит блондинка в бикини почти без бикини), для которой современных коммуникаторов (смартфонов) - просто выше крыши!Так что теперь, дорогие читатели, когда я публикую фотографию чего-то интересного в своем блоге, не поленитесь заглянуть в EXIF (я эти данные традиционно почти никогда не стираю) - скорее всего, там будут интересующие вас координаты GPS, если кадр сделан на коммуникатор. И вот теперь можно мне не задавать лишние вопросы на тему того, что это за адрес, на какой улице, в какой стране, на каком континенте, какой планете или галактике. При условии, конечно, что это снято в одной у нас с вами вселенной.Да вот - попробуйте сами!

При фотографировании пейзажей, достопримечательностей и прочих интересных мест зачастую возникает задача привязки фотографии к GPS-координатам места, где этот снимок был сделан.

Мне, например, периодически бывает интересно самому пересмотреть карту и маршрут того или иного путешествия. Также это избавляет от долгих объяснений, как добраться до места, изображенного на фотографии.



1. Для начала нам потребуется бесплатная программа myTracks для iOS, которая доступна для скачивания по ссылке:
http://itunes.apple.com/us/app/mytracks-the-gps-logger/id358697908?mt=8 . Программа существует как для iPhone, так и для iPad, но я пользуюсь iPhone-версией на обоих устройствах.


2. После установки программы первым делом идем в настройки, где в основном меню выбираем "myTracks".


3. Для того, чтобы программа не кушала трафик в роуминге во время путешествий по другим областям (или странам), выбираем "Download: Wi-Fi only". Это значит, что карта местности будет подгружаться только при наличии соединения Wi-Fi (например, дома, перед поездкой), а при движении будут использоваться только данные кэша (при их наличии).


4. Далее запускаем саму программу и попадаем на Главный Экран.

Внимание!
Прежде, чем начать писать трек, убедитесь, что время и дата на фотоаппарате выставлены в точности такие же, что и на телефоне! Иначе возможны погрешности при привязке фотографий к координатам!

При первом запуске программы нажимаем кнопку "Open Map" (Открыть Карту).


5. При наличии соединения Wi-Fi (или Edge/3G, в зависимости от настроек на картинке 3), подгрузится карта местности и на ней будет указано ваше местонахождение.

При первом запуске нажимаем на кнопку меню в левом нижнем углу экрана.


6. В появившемся меню выбираем "Change Accuracy" (настроить точность записи трека).


7. Я больше месяца переписывался с автором программы, рассказывая ему о найденных багах. В новой версии он добавил настройку интервала между записью точек (до этого порой приходилось наблюдать, как программа записывает около 5-10 точек в секунду при том, что машина стоит на месте).

Мои настройки - "Good" и "2 секунды" интервала между точками. Опытным путем вы можете подобрать себе другие настройки. Забегая вперед, скажу, что излишняя детализация трека зачастую вовсе не нужна.


8. После того, как настроили интервалы между точками, можно приступать к записи самого трека. Нажимаем ту же самую кнопку в нижнем левом углу и в меню выбираем "Start recording" (Начать запись).

Программа начнет писать точки с заданной в настройках периодичностью.


9. Небольшой глюк и как с ним бороться.

Количество записанных точек отображается на иконке программы. Однако иногда (нечасто) бывает так, что программа "подвисает" и не записывает новые точки, несмотря на то, что машина движется.

Я не знаю, с чем связан данный глюк (обычно он появляется после телефонного разговора, прихода СМС или, что реже, въезда в тоннель).

Чтобы продолжить запись, нужно переключиться на любую другую программу, использующую GPS-приемник (Яндекс.Карты, iGo и т.д.), и дождаться, пока она отобразит текущее местоположение на карте, после чего вернуться в myTracks - далее запись продолжится как обычно. Если же в другой навигационной программе не отображается местоположение - как правило помогает лишь перезагрузка телефона. С iPad такой ошибки не наблюдал.

Забегая вперед, скажу, что для надежности я пишу треки одновременно на iPhone и iPad во время путешествий.


10. Во время записи трека к нему можно добавить фотографию текущего места, для чего надо нажать иконку с фотоаппаратом, расположенную под картой с треком.


11. И еще одна "фишка", которой пока что особо не пользовался. При вызове меню в любой момент можно добавить Путевую точку ("Add waypoint") по которым впоследствии можно будет разделить трек на части.

Чтобы остановить запись трека, нажимаем на кнопку "Stop Recording".


12. Еще один ньюанс - треки изначально пишутся в оперативную память устройства, и опытным путем доказано, что больше 12-15 тысяч точек лучше не записывать. При достижении этого количества нужно остановить запись текущего трека, после чего включить запись нового.

После успешного сохранения данных вы увидите такое вот подтверждающее сообщение.
После неуспешного сохранения вы увидите главный экран iOS после того, как программа вылетит из памяти, и потеряете весь трек (у меня за полгода такое было дважды). Именно поэтому я запускаю программу на двух устройствах одновременно, а также не записываю больше 15 тысяч точек за раз. :)

Забыл добавить - программа прекрасно работает и пишет трек в фоновом режиме!


13. Предположим, вы успешно записали трек своего путешествия на iPhone. Что дальше?


14. А дальше - самое интересное. Нам понадобится программа myTracks для Mac, скачать ее можно в магазине Mac App Store или на официальном сайте www.mytracks4mac.com . Программа платная, стоит 10 евро, я оплачивал ее через кредитку.


15. Прежде всего заходим в настройки и выставляем следующие параметры:

iPhoto mode: Синхронизировать только при запущенном iPhoto
Drag&Drop mode: Спросить, что делать
Default Time Zone: +3
Handling of RAW files: Пытаться записывать геотеги в оригинальный файл.

В принципе, это самое главное, в остальных настройках можете поковыряться самостоятельно.


16. Далее, если внешний вид окна у вас отличается от моего, идем в Вид - Отображение - Показывать карту, список фоток и список треков.


17. Также убеждаемся, что в меню "Вид" стоит галочка напротив "Показывать центр карты", которая рисует "прицел" посередине. Она нам еще пригодится в дальнейшем.


18. Теперь настало время переписать сохраненные треки с iДевайса на Mac. Подключаем iPhone через провод, дожидаемся окончания синхронизации с iTunes.

Запускаем myTracks на подключенном iPhone, переходим на вкладку "Синхронизация", указываем любой пароль (например, "12345") и включаем галочку "Служба Синхронизации".


19. В настолькой версии myTracks выбираем Файл - Синхронизироваться с iДевайсом.


20. В появившемся списке выбираем наш iPhone/iPad, режим - "Загрузить точки с устройства", пароль - тот же самый, что мы указали ранее ("12345").

Нажимаем кнопку "Синхронизировать" и ждем завершения операции.


21. Готово, трек(и) путешествия перекинуты на Mac. Переименовываем их по своему усмотрению.

Ранее я упоминал об ограничении количества точек в 12-15 тысяч на трек. Чтобы их объединить, удерживая Cmd выделяем мышкой два или более треков, после чего в контекстном меню выбираем пункт "Объединить выбранное".

В нижнем списке появится новый трек, включающий в себя все выбранные, который также можно переименовать как нам надо.

В том же контекстном меню можно выбрать "Split Track at Waypoints" (разделить трек на отрезки по количеству Путевых точек, которые мы можем добавлять вручную во время записи), а также "Split Track at Day Limits" (разделить трек по дням). Этими опциями я никогда не пользовался, так как обычно наоборот объединяю треки нескольких дней в единый маршрут поездки.


22. Итак, у нас есть итоговый трек путешествия (или несколько их штук, в зависимости от того, что вы выбрали в предыдущем действии).

Теперь надо "скормить" программе фотографии, к которым мы будем привязывать координаты. Для этого выделяем требуемые файлы в Файндере и перетаскиваем их мышкой в правый (пока пустой) список. Программа поддерживает работу как с форматом JPEG, так и с RAW.


23. Если вы указали такие же настройки на Шаге 15, как и я, то программа спросит вас, что же нужно делать с фотографиями?

Если у вас записан трек для всех (или большинства) добавляемых фотографий (это оптимальный вариант), то выбираем первый пункт "1-Click Geotagging" и нажимаем ОК.


24. После импорта фотографий они появятся в правом списке, причем по клику можно будет посмотреть, где именно была сделана та или иная фотография.

Чем точнее настроены часы на iPhone и фотоаппарате - тем лучше! :)


25. Если прокрутить список фотографий вправо, то можно увидеть город, штат (область), страну, код страны и название ближайшего места, где был сделан снимок.


26. Чтобы сохранить данные о месте прямо в EXIF фотографии (в зависимости от настроек на Шаге 15), выделяем все позиции списка мышкой (не советую нажимать Cmd+A, так как это выделит все треки в другом списке, и они будут прорисовываться на карте пару минут), после чего нажимаем кнопку с красной булавкой внизу (которая слева от кнопки "Flickr") - "Write EXIF Tags to file".

Ждем окончания операции несколько минут - и готово! Все остальные данные фотографии (дата, время и технические параметры) останутся неизменными, добавится лишь информация о координатах и месте съемки.


27. А как быть, если я знаю, где была сделана фотография, но трек отсутствует?

Очень просто. В ниспадающем списке прежде всего надо выбрать наиболее подходящую карту. К сожалению, Google.Maps нет в перечне, так что я обычно пользуюсь OpenStreetMap - Mapnik или Osmarender.


28. И только после выбора места перетаскиваем мышкой из Файндера все фотографии, относящиеся к этому месту, на правый список. Программа спросит, что нужно делать - выбираем "Использовать Набор Фотографий".


29. Появляется окно работы с Набором Фотографий. В списке посередине выбираем одну или несколько фотографий, для которых требуется задать координаты вручную.

Обращаем внимание на нижнюю часть окна:
Предыдущая точка - место, где была сделана предыдущая фотография.
Интерполированная (средняя точка) - программа может попробовать примерно просчитать координаты фотографии, сделанной по времени между двумя, имеющими привязку к GPS.
Следующая точка - место, где была сделана следующая по времени фотография.
EXIF - так как фотографию делал с iPhone, он автоматически прописал в нее GPS-координаты, и можно использовать их.
Центр карты - то самое место, которое мы указали вручную. Нажимаем кнопку "GeoTag" справа от последнего пункта - и для выбранных фотографий программа запишет координаты центра карты (ручной выбор), что нам и требуется.

В этом режиме для каждой группы фотографий требуется вначале указывать место съемки на середине карты, а потом перетаскивать фотографии на окно программы.

Сохранение данных в EXIF произойдет автоматически сразу после нажатия кнопки "GeoTag".

Кстати говоря, если какой-то из импортированных фотографий на Шаге 22 не окажется в треке (например, фотография была сделана раньше, чем включили запись), то программа автоматически откроет окно работы с Набором Фотографий и предложит указать данные вручную.


30. Теперь, когда координаты мест съемки привязаны к фотографии, при обработке в Лайтруме (как делаю я) нужно обновить метаданные, для этого щелкаем правой кнопкой по нужной папке и выбираем пункт "Синхронизировать папку", после чего в открывшемся окне убеждаемся, что стоит галочка "Синхронизировать метаданные" и нажимаем ОК.

В противном случае, если в Лайтрум фотографии были импортированы прежде, чем в них были прописаны координаты, то редактор будет экспортировать готовые (обработанные) картинки без координат.


31. Настало время посмотреть на результат наших трудов.
Я, например, храню свои альбомы на гугловском сервисе Picasa. Теперь, когда мы заходим в альбом с фотографиями, справа будет видна карта, где эти фотографии были сделаны.


32. Чтобы эта галочка стояла во всех создаваемых альбомах по умолчанию - зайдите в настройки Picasa, выберите вкладку "Конфиденциальность и разрешения" и включите опции "Автоматически отображать фотографии на карте" и "Показывать другим пользователям информацию о местах съемки".


33. Теперь, при просмотре всех фотографий альбома можно щелкнуть по ссылке "просмотреть карту" в правом нижнем углу, которая приведет на такой вот экран. На карте Google будут отображаться точные места, где были сделаны фотографии. Более того, ссылку на эту страничку можно напрямую отправлять друзьям, которые спрашивают о месте того или иного снимка.


34. При клике по любой миниатюре слева от карты покажется фотография в бОльшем размере с координатами места съемки.


35. И последнее - если вам понадобится выложить сам трек путешествия в общий доступ.

Зачастую излишняя детализация бывает вовсе не нужна, поэтому перед публикацией трек можно "упростить" (Simplify Track).


36. Опытным путем выяснено, что 300 точек обычно вполне достаточно примерно для 1000 километров пути (одного дня поездки). Если нужна более высокая детализация - можно указать большее количество точек, или же не упрощать трек вообще.


37. В списке появится дубликат трека (оригинал останется неизменным) с пометкой "simplified" в названии.
Чтобы его экспортировать, выбираем Файл - Экспорт в формате KML (или KMZ - тот же KML, только архивированный).

Даем сохраняемому треку название (например, "Быково-Домодедово (трек)").


38. На следующем экране выбираем, нужно ли вместе с треком экспортировать фотографии (никогда не пользуюсь этой опцией, так как предварительно выкладываю все картинки на Picasa), а также размер фоток-превью.


39. Далее требуется аккаунт на сайте http://maps.google.com . Логинимся, выбираем ссылку "Мои карты", далее - "Создать новую карту".


40. Даем нашей карте название ("Быково-Домодедово (трек)"), после чего нажимаем ссылку "Импорт".


41. Выбираем тот файл, который мы экспортировали из программы myTracks, далее нажимаем "Загрузить из файла".


42. Далее после загрузки трека в правом верхнем углу нажимаем "Ссылка", потом - "Настройка и предварительный просмотр встроенной карты".

В новом окне появится карта с нашим треком. Зададим нужный масштаб и расположение трека - впоследствии по созданной ссылке трек откроется на том же месте и в том же виде.

При создании записи Гуглокарта почему-то не отображается в виде встроенного объекта - вместо нее будет пустое место. Такое ощущение, что Живой Журнал при создании записи удаляет или игнорирует часть кода по встраиванию сторонних объектов в запись.

Таким образом, единственный выход - это дать ссылку на трек. Для этого оставляем только лишь текст, расположенный между тегов small и /small (то, что я выделил на снимке.


44. В предпросмотре создаваемой записи у нас остается такая вот ссылка...


45. ...При нажатии на которую в новом окне откроется трек, и теперь уже конечный пользователь может изменять масштаб и просматривать его в деталях!

Вот, пожалуй, и все, о чем я хотел рассказать. На первый взгляд кажется несколько сложным, но сейчас привязка к GPS-координатам у меня занимает 3-5 минут, так как процесс получается достаточно автоматизированным. Тем более, что некоторые настройки надо выполнить только один раз при первом запуске программы.
Еще столько же времени занимает публикация трека. Считаю, что итоговый результат того стоит.

Геоинформационные системы постепенно входят в повседневный быт.

Большинство мобильных устройств снабжены GPS/ГЛОНАСС-приёмниками. Это позволяет разработчикам получать записи пути своих пользователей (треки). Треки можно использовать для решения целого ряда задач - от навигации по карте и информирования о местоположении друзей до построения пробок и предсказания дорожной ситуации.

К сожалению, без дополнительной обработки трек пользователя малоинформативен, поэтому требуется этап связи внешних данных и внутренней карты приложения. Для этого существуют специальные алгоритмы привязки данных (map matching algorithms).

Эта статья посвящена алгоритму привязки трека к дорожному графу и результатам его применения в проекте Карты@­Mail.ru .

Алгоритм, о котором пойдёт речь, обрабатывает входящий трек, получая на выходе последовательность рёбер дорожного графа, которые своей геометрией максимально близко повторяют входные данные.

Дорожный граф - это одна из основ геоинформационного приложения. Он содержит внутри себя всю информацию о дорогах: от типа покрытия и количества полос до их геометрии. Существует несколько способов представления дорожного графа в памяти компьютера.

Рассмотрим самый простой вариант: направленный граф, у которого узлы - это перекрёстки, а рёбра - это дороги. Такое упрощение затрудняет проверку правил дорожного движения, но облегчает дальнейшие расчёты. Дороги с движением в обе стороны в подобном графе будут представлены парой рёбер. Ребро является неделимой единицей пути. Однако ребро - это математическое представление дороги. Реальное расположение дороги на карте (набор точек-координат дороги) будет определяться отдельным свойством этого ребра графа, которое назовём геометрией дороги.
Трек представляет собой упорядоченную последовательность точек, содержащих некоторую погрешность. Из-за этой погрешности точка практически никогда не будет лежать на ребре графа, к которому необходимо привязаться. По закону подлости для GPS-данных погрешность позиционирования меньше в чистом поле, чем в центре города. Другими словами, пришедшая точка может попасть на соседнее ребро.

Так выглядит одна московская развязка глазами карт:

А вот так по ней, по версии навигаторов, едут наши пользователи:

Процесс привязки трека

Для привязки точки трека к графу в самом простом случае необходимо найти рёбра с минимальным расстоянием от ребра до точки. К сожалению, на практике (особенно в центре города) привязанный таким образом маршрут может оказаться набором несвязанных между собой рёбер. Для того чтобы улучшить качество привязки, будем считать, что трек - это упорядоченное целенаправленное движение пользователя по геометриям рёбер графа. То есть весь маршрут проходит по связанным друг с другом рёбрам. При этом на каждое ребро маршрута может приходиться как несколько точек трека, так и ни одной.

Таким образом, поскольку мы отказываемся брать ближайшее к точке ребро, нам необходимо выбрать какую-то другую количественную меру, которая позволила бы определить, насколько измеряемое ребро подходит для привязки.

Существует множество факторов, которые при этом можно использовать:

  1. Расстояние от точки до геометрии ребра графа. Оценивает как кратчайшее расстояние, так и вероятность того, что приёмник мог допустить такую ошибку.
  2. Совпадение направлений движения. Оценивает угол между вектором движения транспортного средства и направлением участка геометрии ребра, к которому привязывается точка. (Данная мера устойчива к систематической погрешности GPS-приёмника, но подвержена случайной).
  3. Изменение направления движения транспортного средства. Вероятность того, что автомобиль свернёт с главной дороги, в общем случае меньше, чем вероятность того, что он продолжит движение по ней (так минимизируется количество манёвров).
  4. Физическая возможность перехода с одного ребра на другое (достижимость ребра). Адекватность скорости, с которой должен был двигаться автомобиль, чтобы совершить этот переход.
На основе этих факторов создаётся формула оценки правдоподобия. В качестве одной из таких формул используют расстояние Фреше . Проще говоря, это минимально необходимая длина собачьего поводка, если хозяин будет идти по дорожному графу, а его питомец - по GPS-треку. Эта оценка ориентируется только на географическую удалённость прокладываемого трека.

Для привязки треков в этой статье используем оценочную формулу для инкрементального алгоритма привязки данных (на основе работы S. Barcatsoulas ).

Эта формула включает две основных составляющих: и .

Составляющая учитывает взвешенное расстояние от точки трека до ребра и рассчитывается по формуле:

Где
- это коэффициенты масштабирования, а - это расстояние от точки p i до геометрии ребра c j .

Составляющая учитывает угол между направлением геометрии ребра и направлением трека:

Где
и - это коэффициенты масштабирования, а cos(α i,j) - это угол между геометрией i-того ребра графа и направлением движения по ребру трека
и - это параметры, влияющие на значимость составляющих. Для алгоритма важны значения этих параметров относительно друг друга - это определяет, какой из факторов будет иметь больший вес при сравнении.

Параметры и влияют на чувствительность к изменению описываемого фактора.

После расчёта составляющих итоговая метрика рассчитывается как:

Чем большее число получилось в итоге, тем лучше совпадение участка трека и ребра.

Имея в арсенале формулу правдоподобия прокладываемого маршрута, можно описать алгоритм привязки:

  1. Выбрать все рёбра графа с геометрией, пересекающей дельта окрестность первой точки трека;
  2. Оценить все выбранные рёбра с помощью формулы;
  3. Выбрать ребро с наибольшей оценкой. Сделать его текущим и добавить его к готовому маршруту;
  4. Если ближайшая к точке трека точка на геометрии ребра находится не на конце ребра, то выбрать следующую точку трека. (Если больше точек нет, то привязка закончена);
  5. Выбрать все исходящие из текущего рёбра графа и текущее ребро;
  6. Перейти к 2;

Стратегия учёта последующих точек

Несомненным плюсом выбранной формулы является возможность оценить правдоподобие привязки к графу не только для одной точки, но и для маршрута в целом. Это можно использовать для реализации стратегии учёта последующих точек. Если в данный момент привязывается не последняя точка маршрута, то можно посчитать оценки привязки следующих точек при условии, что маршрут пролегает по выбранному ребру. После этого можно сравнивать уже сумму оценок правдоподобия. Это позволит избежать ошибок на сложных развязках и перекрёстках, так как алгоритм будет выбирать рёбра с учётом последующего движения.

Немного про производительность

Задача привязки одного трека не является невероятно затратной, но на практике редко кто когда-либо привязывает пару треков. Как правило, необходимо успевать привязывать тысячи точек в секунду. Поэтому приходится искать компромисс между скоростью обработки и точностью привязки трека. В выбранном алгоритме на производительность влияет количество оцениваемых рёбер для каждой точки трека и глубина оценки точек «из будущего». Как показала практика, для принятия правильного решения о поведении на перекрёстках в большинстве случаев достаточно учитывать 2-3 последующие точки трека.

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

Итоги

Внедрение алгоритма привязки позволило проекту Карты@­Mail.ru не только начать работу с данными мобильных пользователей, но и быстро согласовывать собственные данные с произвольными системами. Использование новой подсистемы привязки позволяет в течение минуты на одном сервере пересчитывать на свой граф треки, суммарно содержащие до 55 тысяч точек. Благодаря этому отображение данных пользователям происходит максимально быстро. Алгоритм показывает качественную привязку даже при одной точке трека на три ребра внутреннего графа. Однако наибольшая эффективность описанного алгоритма достигается во время привязки длинных треков с одной-двумя точками на каждое ребро графа.

Литература по теме

  1. “Map Matching. An Introduction” Prof. David Bernstein, James Madison university.
  2. “On Map-Matching Vehicle tracking Data” Sotiris Bracatsoulas, Dieter Pfoser Randall Salas Carola Wank VLDB’05
  3. “Approximate Map Matching with respect to the Frechet Distance” Daniel Chen, Anne Driemel, Leonidas J. Guibas, Andy Nguyen, Carola Wenk. Stanford. 2011

Лев Драгунов, программист Карты@­Mail.ru