Как сделать панораму в Яндекс картах?

Как делают панорамы Яндекса

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

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

Далее можно посмотреть немного фотографий и почитать о том, как все снимается и что бывает во время съемки ->

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

В эти выходные мы катались по Свиблово. В планах компании стоит покрытие 90% улиц Москвы.

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

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

Установка постоянно дорабатывается, что можно видеть наглядно на примере качества более старых панорам центра Москвы и более новых на окраинах.

Конечно же, съемка проводится либо в выходные дни утром, либо в будние дни, когда движение по улицам минимально.

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

Самым большим злом в этом случае выступают поливальные машины…

Вот так процесс съемки выглядит изнутри. На телефоне Яндекс карты с GPS. На ноутбуке сама система.
Куча проводов, под ногами лежит блок, обрабатывающий сигналы от камер, GPS, информацию с колес и т.п.

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

Управление системой на ноутбуке выглядит так.

Зеленые линии – то что надо отснять по плану, красная линия – текущая съемка, черные линии – уже отснятое.
Оператор говорит водителю, с какой скоростью ехать, где останавливаться, куда поворачивать.
С ноутбука задаются параметры съемки, интервал автоматической съемки (в метрах, в данном случае стоит 50 м, на узких улицах может быть и 10 м, а на трассе и 100 м достаточно), коррекция экспозиции и прочая информация о местоположении, длительности текущей съемки и т.п. Показываются последние сделанные камерами кадры.
Параметры регулируются таким образом, чтобы не было сильных перепадов яркости между небом и домами.

Яндекс-панорамы сильно помогают актуализировать карты. За тот час пока мы катались в районе Свиблова целых два раза мы натыкались на неточности в картах: либо переулок закрыли железобетонным блоком и сквозного проезда нет, либо въезд в переулок находится не в том месте, где показан на карте.

Хотя погода была сухая и на улицах грязи не было, линзы все равно приходилось постоянно чистить.

На машину люди реагируют в основном позитивно. Фотографируют и фотографируются с ней часто. Охрана порой смотрит настороженно. Иногда останавливают работники ГИБДД, но в основном из любопытства.
Иногда бывает, что люди возмущаются. И действительно, Google на своих панорамах замазывает все лица и номера, а Яндекс нет.
Почему?
Дело в том, что американские законы требуют замазывать номера и лица без каких либо оговорок, а в российском законодательстве есть оговорка: в принципе человека также снимать нельзя, это также считается вторжением в личную жизнь, но при этом если человек не является основным объектом съемки, то можно.
В данном случае снимаются не люди, а улицы.

Это в отличие от случайных приколов, конечно, было подстроено специально.
В планах делать подобные «пасхальные яйца” и в дальнейшем.
Google вообще создал целое сообщество, где выкладывает план съемок и маршруты, а уж интересующиеся люди на местах сами выделывают перед машиной сценки.

Во время одной из съемок на бензоколонке разговорились с мотоциклистом, который предложил «показать класс”. Когда машина поехала снимать дальше мотоциклист пронесся мимо нее на огромной скорости стоя на заднем колесе.

Недавно во время съемки в районе Ходынского поля оператор заметил, что на самом поле происходит какое-то мероприятие. Подъехали, поговорили, получили «добро” и в результате отсняли Фестиваль аэрографии на машинах.

Все это будет на Яндекс картах в новом сезоне.

Я специально спросил, замазать ли номера, на что получил ответ, что машину уже столько раз фотографировали, что смысла просто нет.
На этой машине проводили съемки в Москве и Питере. В планах запустить несколько машин.

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

Спасибо Яндексу и компании Neq4 за возможность сделать этот репортаж и интересный рассказ о тонкостях работы.

www.ph4.ru

API Яндекс.Панорам: как сделать свою виртуальную прогулку или просто довести человека от метро

Нас очень давно просили сделать API, который позволяет встраивать Панорамы Яндекса на свои сайты, и мы, наконец, смогли это сделать. Даже больше: наш API даёт возможность создавать собственные панорамы.

Еще по теме:   Как сделать в Яндексе русскую клавиатуру?

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

Сервис панорам запустился на Яндекс.Картах в далеком сентябре 2009 года. Поначалу это были лишь несколько панорам достопримечательностей и работали они, как вы, наверное, догадываетесь, на Flash. С тех пор много воды утекло, панорам стало несколько миллионов, начали быстро расти мобильные платформы, а Flash туда так и не пробрался. Поэтому примерно в 2013 году мы решили, что нам нужна новая технология. И основой для этой технологии стал HTML5.

API, с которого мы начинали, — это Canvas2D. Сейчас это может показаться странным, но в 2013 году этот выбор был вполне разумен. WebGL был стандартизован всего двумя годами раньше, толком еще не добрался до мобильных (в iOS, например, WebGL работал только в уже почти почившем в бозе iAd), да и на десктопах работал не очень стабильно. Читатель может мне возразить, что надо было все делать на CSS 3D, как это было тогда популярно. Но с помощью CSS 3D можно нарисовать только кубическую панораму, в то время как все панорамы Яндекса сферические (хранящиеся в равнопромежуточной проекции).

Это же было и самой главной технической трудностью в разработке. Дело в том, что корректно и точно спроецировать сферическую панораму на экран непросто из-за нелинейности этого преобразования. Наивная реализация такой проекции требовала бы целого вороха тригонометрических вычислений на каждый пиксель экрана — ведь нужно найти соответствующую ему точку в панорамном изображении и определить его цвет. Кроме того, Canvas 2D не предоставляет эффективного способа манипулировать каждым пикселем изображения по отдельности.

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

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

Написав все это и запустив, я увидел нечто, хорошо описываемое словом «слайдшоу». Фреймрейт оказался совершенно неприемлемым. Попрофилировав, я нашел, что больше всего времени отъедают функции save() и restore() Canvas 2D контекста. Откуда они взялись? Из особенности работы с обрезкой в Canvas2D. К сожалению, чтобы иметь возможность сбросить текущую обрезку и выставить новую, необходимо сохранить перед выставлением состояние контекста (это как раз save() ), а после всего необходимого рисования восстановить сохраненное состояние (а это уже restore() ). А так как эти операции работают со всем состоянием
контекста, они недешевы. Кроме того, обрезку-то мы делаем каждый раз совершенно одинаковую (после инициализации разбиение сферы на треугольники и их наложение на панорамное изображение не меняются). Есть смысл это закешировать!

Сказано — сделано. После генерации триангулированной сферы мы «вырезаем» каждый треугольник из панорамного изображения и сохраняем его в отдельном кеше-канвасе. Остальная часть такого кэша при этом остается прозрачной. После такой оптимизации удалось получать 30—60 кадров в секунду даже на мобильных устройствах. Из этого опыта можно извлечь следующий урок: при разработке рендеринга на Canvas 2D все, что можно, кэшируйте и пререндерите. А если что-то вдруг нельзя — делайте так, чтоб было можно, и тоже пререндерите.

У любого кеширования (как и у многих вещей в этой жизни) есть и обратная сторона: неизбежно растет потребление памяти. Именно это и произошло с рендерингом панорамы. Возросшие аппетиты породили множество проблем. Самыми заметными можно назвать падения браузеров даже на декстопных платформах, а также довольно медленный старт. В конце концов, устав бороться с этими проблемами, мы отказались от репроецирования панорамного изображения на Canvas 2D и пошли другим путем. Но он уже совершенно не интересный 🙂

Однако еще до того мы начали смотреть с сторону WebGL. К этому нас подтолкнули разные причины, главной из которых, пожалуй, была iOS 8, в который WebGL заработал в Safari.

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

Встраивание панорам

Встраивание панорам с помощью API Карт начинается с подключения нужных модулей. Это можно сделать двумя способами: либо указав их в параметре load при подключении API, либо с помощью модульной системы (в скором времени мы добавим модули панорам в загружаемый по умолчанию набор модулей).

Перед началом работы с панорамами необходимо убедиться, что браузер пользователя поддерживается движком. Это можно сделать с помощью функции ymaps.panorama.isSupported :

Чтобы открыть панораму, нам сначала надо получить ее описание с сервера. Это делается с помощью функции ymaps.panorama.locate :

Результатом, которым разрешится промис, возвращаемый вызовом ymaps.panorama.locate , будет массив панорам, находящихся в некоторой окрестности переданной точки. Если ни одной такой панорамы нет, массив будет пуст. Если таких панорам будет найдено несколько, они будут отсортированы по расстоянию от переданной точки. Первая при этом будет ближайшей.

Еще можно запрашивать воздушные панорамы:

Еще по теме:   Как сделать Яндекс кассу?

Получив описание панорамы, мы можем создать плеер, который отобразит ее на странице:

И мы увидим на странице:

Самый быстрый и простой способ открыть панораму — это функция ymaps.panorama.createPlayer :

При этом можно указать одну или несколько опций третьим параметром:

После создания плеер предоставляет компактный API для управления отображением панорам и подписки на пользовательские события. Но, как мне кажется, это не самая интересная возможность API панорам.

Свои панорамы

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

Любая панорама начинается со съемки и подготовки панорамного изображения. Для съемки можно воспользоваться специальным устройством, обычным фотоаппаратом или даже смартфоном. Главное, чтобы результатом съемки и склейки была сферическая панорама в равнопромежуточной проекции. Например, стандартное приложение камеры на Android умеет снимать и склеивать панорамы в нужной проекции. Именно им мы и воспользовались для съемки панорам нашего уютного опенспейса.

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

Для нарезки изображений на тайлы можно воспользоваться любым ПО (при наличии определенной усидчивости — хоть Paint). Размеры тайлов должны быть степенями двойки (те из вас, кто работал с WebGL, думаю, догадываются, откуда растут ноги у этого ограничения). Я воспользовался ImageMagick:

Давайте наконец напишем уже какой-то код для нашей панорамы. API — это система связанных между собой интерфейсов. Эти интерфейсы описывают объект панорамы и все связанные с ним.

Давайте теперь разберем эту картинку по сущностям.

Объект панорамы должен реализовывать интерфейс IPanorama . Чтобы написать свой класс панорамы было проще, сделан абстрактный класс ymaps.panorama.Base . Он предоставляет разумные реализации по умолчанию для некоторых методов IPanorama , а также метод validate , который проверяет, удовлетворяет ли панорама ограничениям, накладываемым плеером (например, является ли указанный размер тайлов степенью двойки). Давайте им и воспользуемся.

Начнем мы с того, что опишем плееру геометрию панорамы. Для этого нужно реализовать метод getAngularBBox , возвращающий, судя по документации, массив из четырёх чисел. Каков смысл этих чисел? Чтобы ответить на этот вопрос, вспомним про то, что панорама у нам сферическая, то есть наложенная на сферу. Чтобы описать положение панорамного изображения на сфере, необходимо выбрать некоторые «опорные» точки. Обычно для прямоугольника (а панорамное изображение, не будучи на сфере, как раз им и является, как и любое изображение в компьютере) выбирают координаты двух его противоположных углов. В нашем случае этот подход продолжает работать и на сфере, ведь вертикальные стороны изображения становятся при наложении меридианами, а горизонтальные – параллелями. Это значит, что каждая сторона прямоугольника имеет собственную угловую координату, общую для всех точек этой стороны. Именно эти координаты сторон и составляют массив, возвращаемый методом getAngularBBox , определяя своего рода сферический прямоугольник, ограничивающий панораму (отсюда и названия метода).

Плеер накладывает важное ограничение на геометрию панорамы (а значит — на само панорамное изображение): панорамное изображение должно смыкаться на сфере по горизонтали, образуя полный круг. Для значений, возвращаемых методом getAngularBBox , это значит, что разница между правой и левой угловой границей панорамы должна составлять 2π. Что касается вертикальных границ, то они могут быть любыми.

Панорама, которую мы сняли смартфоном, не только полная по горизонтали, но и по вертикали, то есть от полюса до полюса. Поэтому границами панорамы на сфере будут интервалы [π/2, -π/2] по вертикали (от верхнего полюса до нижнего) и [0, 2π] по горизонтали (тут мы для простоты полагаем, что направление на стык панорамы совпало с направлением на север, что, конечно же, в действительности не так). Получается вот такой код:

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

Теперь мы опишем сами панорамные изображения — как они разрезаны на тайлы и где эти тайлы лежат. Для этого нам надо реализовать методы getTileSize и getTileLevels . С первым все очевидно: он возвращает размер тайлов.

getTileLevels возвращает массив объектов-описаний уровней масштабирования панорамного изображения. Их у нас, напомню, было два: высокого (относительно) и низкого качества. Каждый такой объект-описание должен реализовывать интерфейс IPanoramaTileLevel , состоящий из двух методов: getImageSize и getTileUrl . Для простоты не будем заводить отдельный класс для этого, просто вернем объекты с нужными методами.

На этом минимальное описание панорамы готово, и плеер сможет ее отобразить:

Кстати, такое минимальное описание панорамы можно сделать быстрее и проще с функцией-хелпером ymaps.panorama.Base.createPanorama :

Кроме собственно самой панорамы плеер умеет отображать три вида объектов: маркеры, переходы и связи.

Маркеры позволяют обозначать объекты на панораме (например, маркеры с номерами домов на панорамах Яндекса). Объект маркера должен реализовывать интерфейс IPanoramaMarker . Этот интерфейс содержит всего три метода: getIconSet , getPosition и getPanorama . Назначение последних двух вполне понятно из их названий. Первый же я вижу необходимым пояснить. Дело в том, что маркер – это интерактивный элемент. Он меняет состояние, реагируя на пользовательские события. Эти состояния и то, как они изменяются по событиям в UI, можно писать такой диаграммой:

Например, маркер, обозначающий дом. Вот его состояние по умолчанию, состояние при наведенном курсоре и раскрытое состояние:

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

Переходы — это те самые стрелки, по клику на которые плеер переходит на соседнюю панораму. Объекты, описывающие переходы, должны реализовывать интерфейс IPanoramaThorougfare :

Еще по теме:   Как сделать Яндекс как на компе?

Связи являются своего рода гибридом маркеров и переходов: выглядят они как первые, а ведут себя как последние. В коде они реализуются точно так же, как и маркеры, но с добавлением метода getConnectedPanorama (см. IPanoramaConnection ).

Вместо заключения

API панорам пока что запущен в статусе бета. Встраивайте, тестируйте на своих сайтах и приложениях, рассказывайте нам об этом в клубике, группе во ВКонтакте, Фейсбуке или через поддержку. Вот ЦИАН уже 🙂

habr.com

Как в Яндекс картах смотреть панораму?

Панорама будет только на тех улицах, которые попали в объектив специальной машинки осуществляющей объемное фотографирование.

Все отснятые улицы будут обозначены на Яндекс картах синим цветом. Для активации панорамы нужно выбрать значок слева внизу экрана.

Далее наводите указатель мыши на синюю полоску на карте, «кликаете» и получаете вполне себе приличную и очень управляемую панораму.

Это очень несложно и получше чем у Гугла.

Открываете карту. Внизу такой бинокль и на нем написано панорамы и фотографии. Жмете на него. Он предлагает выбрать панорамы или фотографии. Если выбрали фотографии можно смотреть их. Будет много фотографий и вы выбираете нужную. Если выбрали панораму, то все запанорамленые места будут подкрашены на карте синим. Если синих линий нет, значит Яндекс еще не запанорамил данную местность. Жмене на синюю линию в любое место и вы в панораме. Передвигаться по панораме можно стрелками, они присутствуют в панораме.

www.bolshoyvopros.ru

ru_travel

путешествия и прочее

.photos [Как я ездил смотреть, как делают панорамы для Яндекс.Карт]

Почти месяц назад я по приглашению компании Яндекс ездил в небольшой блог-тур, чтобы посмотреть, как же создаются панорамы для сервиса Яндекс.Карты. Все эти съемки панорам организованы в рамках проекта съемок заповедников России, который Яндекс реализует совместно с компанией Ford. Так что относительно скоро мы сможем побывать в заповедных местах вместе с Яндекс.Картами, посмотреть панорамы и полюбоваться видами уникальных мест. Ведь далеко не факт, что это получится сделать воочию. Вообще я знаю как создавать круговые (трехмерные) панорамы, поэтому технической стороной вопроса совсем не интересовался. Но это не важно, прошу приступить к просмотру фотографий.
Фото 1.

Фото 2. Небольшую группу журналистов и блогеров собрали перед отелем Мариотт. Нам компанию составляли две прекрасные девушки из компании Яндекс Элина и Оля, Вадик dadson Мельников, Антон nepokolebim , один журналист из Русского Репортера и два из Новосибирска.

Фото 3. До смотровой Култука дорога хоть не скучная, но особо о ней рассказывать нечего. Считается одной из самой опасной дорогой России. Из-за того, что большие перепады высот и сильно виляет, то практически ежедневно случаются аварии и сход фур с трассы. При снегопадах трасса практически всегда перекрывается.

Фото 4. Панорамы для Яндекс.Карт снимает компания подрядчик Neq4. Пока мы стояли любовались видами Южного Байкала, как раз подъехали эти ребята.

Фото 5. Вот так выглядит машина для съемки панорам.

Фото 6. Ребята уже целую неделю ездили по просторам нашей области и снимали панорамы. Вообще компания Neq4 разработала свою систему съемки уличных панорам SMO3. Более подробно о ней можно почитать на сайте http://smo3.neq4.ru/

Фото 7. Потом же мы направились в Слюдянку, чтобы пересесть на кораблик и отправиться на КБЖД.

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

Фото 9. Вадик dadson и я psy_factor селфимся на носу кораблика =)

А вот нас поймал в этот момент фотограф АиФ. =)

Фото 10. Красота вокруг!

Фото 13. Бескрайний Байкал.

Фото 15. Кругобайкальская железная дорога славится тем, что прорублена в отвесных скалах. Раньше была участком Транссибирской магистрали, но после постройки Иркутской ГЭС стала тупиковой веткой и туристической достопримечательностью.

Фото 16. КБЖД является архитектурно-ландшафтным заповедником, где на относительно небольшом участке побережья Байкала сконцентрировано огромное количество инженерных сооружений, многие из которых не только уникальны, но и чрезвычайно живописны.

Фото 18. Железнодорожный путь по берегу Байкала был построен за 2 года 3 месяца и сдан в эксплуатацию почти на год раньше намеченного срока (чему в значительной степени способствовало начало военных действий на Дальнем Востоке).

Фото 19. Кто желает более подробно ознакомиться с информацией про КБЖД, может почитать на сайте http://www.krugobaikalka.ru

Фото 20. Пока мы плыли до КБЖД, представители компании Neq4 рассказали нам, что и КБЖД они уже всю отсняли, установив систему съемки панорам на ЖД поезд. Говорили, что это был очень интересный первый опыт съемки с ЖД поезда. Так что осенью можно будет уже виртуально гулять по КБЖД в Яндекс.Картах.

Фото 21. Потом нас ждал ужин. Угощения бурятской кухни — позы (буузы) и сагудай. Ммммм, пальчики оближешь =)

Фото 22. Практически никто из гостей раньше не ел позы. Многие почему-то называют их большими пельменями или большими мантами. Но общего между пельменями и мантами не так много, как кажется. Позы едят по-своему, сначала надо откусить кусочек теста и насладиться тем бульоном, который внутри позы. Ну а потом можно приправить позу и дальше ее кушать. Только те люди, которые живут в нашем регионе и побывали у нас в гостях, и отведав поз, могут понять сакральный смысл фразы «Горячие бурятские позы» =)))

Фото 24. Небольшая прогулка до ближайшего туннеля.

Фото 27. Селфи на фоне Байкала.

Фото 29. И снова в путь. В обратный путь.

Фото 30. Пока плыли обратно до Култука, нам устроили аттракцион «покорми чайку».

Фото 32. Чайки любят покушать =)

Фото 34. Весь путь сопровождался беседами.

Фото 37. Автобус нас уже ждал у пристани.

Фото 38. Ну и вообще, перед тем как поехать обратно, надо было помочить ножки. Я в очередной раз безуспешно пытался уговорить Вадика искупаться.

Фото 42. Ну вот и все, пора домой. Спасибо всем за компанию!

Фото 43. Ну а перед тем как отправиться в Иркутск, все кто пожелал закупились рыбкой. Я себе взял парочку хвостов омуля холодного копчения, для того, чтобы вечером умять их дома под пивко.

Вот так прошел этот чудесный день в компании прекрасных людей.

ru-travel.livejournal.com

Поделиться:
Нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.

×
Рекомендуем посмотреть
Adblock
detector