Добавляем панорамы на Google Maps


Вступление

Виртуальные панорамы это одно из новых медиа, которое спустя 20 лет развития технологии начало обретать массовую популярность. Первым важным этапом на этом пути было появление социального сервиса для публикации, всем известного 360cities.net. Вторым этапом стала возможность снимать панорамы с помощью смартфонов, созданная Google для своей платформы Android. Простота съёмки и публикации панорам в картах придала широкую популярность новому сервису и привлекла профессионалов панорамной съёмки.

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

I. Подготовка панорам

Существуют ограничения, накладываемые на изображения, которые можно публиковать:
• изображения передаются в формате jpeg,
• максимально допустимый вес загружаемого изображения — 50 мегабайт,
• тип проекции панорамы — только equirectangular, другие проекции не поддерживаются.

По опыту, чтобы уложиться в ограничение по весу, оптимальным будет размер панорамы с полной сферой в 10000 на 5000 точек, а качество сжатия JPG 85%. Размер сжатых панорам лежит в диапазоне 10-35 мегабайт.

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


II. Загрузка панорамы на сервер

Для загрузки панорам требуется наличие аккаунта в экосистеме Google, а сама загрузка осуществляется через сервис Google+. Перед загрузкой необходимо в настройках своего аккаунта включить чекбокс «Загружать фото в полном размере».

Этот сервис уже позволяет отображать виртуальные панорамы и управлять ими по одной, но, чтобы он распознал загруженное изображение как панораму, в файл необходимо добавить метаданные. Для добавления метаданных доступны два способа:
1. Воспользоваться этим сайтом, загрузить в него изображение панорамы и получить обратно файл с прописанными метаданными,
2. Записать метаданные вручную.

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

Для второго варианта существует специальное руководство, которое описывает XMP-спецификацию метаданных. Там приведён готовый пример, который можно переправить под себя, сохранить в формате xmp и попробовать добавить, например, в Photoshop. Необходимо открыть свойства файла File → File Info или комбинацией клавиш Alt+Ctrl+Shift+i:

Добавляем панорамы на Google Maps
Рис. 1. Окно редактирования метаданных
Импортируем файл метаданных (кнопка Import, доступна в выпадающем списке). Однако, импорт закончится ошибкой. 🙂 Причина — спецификация не соответствует формату, который понимает Photoshop. Требуется обёртка из метатегов, верный вариант дан ниже:

    <?xpacket?>
        <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27">
            <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
                <rdf:Description rdf:about="" xmlns:GPano="http://ns.google.com/photos/1.0/panorama/">
                    <GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>
                    <GPano:CaptureSoftware>Photo Sphere</GPano:CaptureSoftware>
                    <GPano:StitchingSoftware>Photo Sphere</GPano:StitchingSoftware>
                    <GPano:ProjectionType>equirectangular</GPano:ProjectionType>
                    <GPano:PoseHeadingDegrees>350.0</GPano:PoseHeadingDegrees>
                    <GPano:InitialViewHeadingDegrees>90.0</GPano:InitialViewHeadingDegrees>
                    <GPano:InitialViewPitchDegrees>0.0</GPano:InitialViewPitchDegrees>
                    <GPano:InitialViewRollDegrees>0.0</GPano:InitialViewRollDegrees>
                    <GPano:InitialHorizontalFOVDegrees>75.0</GPano:InitialHorizontalFOVDegrees>
                    <GPano:CroppedAreaLeftPixels>0</GPano:CroppedAreaLeftPixels>
                    <GPano:CroppedAreaTopPixels>0</GPano:CroppedAreaTopPixels>
                    <GPano:CroppedAreaImageWidthPixels>10000</GPano:CroppedAreaImageWidthPixels>
                    <GPano:CroppedAreaImageHeightPixels>5000</GPano:CroppedAreaImageHeightPixels>
                    <GPano:FullPanoWidthPixels>10000</GPano:FullPanoWidthPixels>
                    <GPano:FullPanoHeightPixels>5000</GPano:FullPanoHeightPixels>
                    <GPano:FirstPhotoDate>2013-16-12T18:03:13.0Z</GPano:FirstPhotoDate>
                    <GPano:LastPhotoDate>2012-11-07T18:10:10.0Z</GPano:LastPhotoDate>
                    <GPano:SourcePhotosCount>6</GPano:SourcePhotosCount>
                    <GPano:ExposureLockUsed>False</GPano:ExposureLockUsed>
                </rdf:Description>
            </rdf:RDF>
        </x:xmpmeta>
    <?xpacket end="w"?>

Нужно сохранить этот файл в формате *.xmp в папку C:\Users\имя пользователя компьютера\AppData\Roaming\Adobe\XMP\Metadata Templates (для Windows 7). Photoshop всегда предлагает импортировать и экспортировать данные в папку по умолчанию, так что в других системах вы не потеряетесь. Кроме того, уже импортированные файлы появляются в выпадающем меню на кнопке импорта для более быстрого доступа.

После импорта метаданных, изображение можно сохранить. Чтобы добавить изображение, нужно загрузить его как обычную фотографию в свою ленту Google+.

Добавляем панорамы на Google Maps
Рис. 1. Форма создания новой записи в Google+
Также, создать новую запись можно, нажав на кнопку «+» в правом верхнем углу экрана. После загрузки и обработки панораму можно будет публиковать и просматривать в своей ленте.

III. Публикация панорамы в сервисе «Фототуры»

Напрямую попасть из Google+ на свой профиль в фототурах не получится, и в меню этот пункт искать долго. Так что даю прямую ссылку: https://www.google.com/maps/views/home?gl=ru. Чтобы попасть в профиль, необходимо кликнуть по своей аватарке в верхнем правом углу экрана.

В том же углу экрана находится кнопка добавления панорам из Google+. Процесс добавления достаточно прост: можно выбрать множество файлов (потом нажать на кнопку «Выбрать», указать по карте их местоположение и добавить описание, нажать на «Отправить»).

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

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

источник

П.С. Апдейт 02.04.2017

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

<?xpacket?>
	<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27">
		<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
			<rdf:Description rdf:about="" xmlns:GPano="http://ns.google.com/photos/1.0/panorama/">
				<GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>
				<GPano:CaptureSoftware>Photo Sphere</GPano:CaptureSoftware>
				<GPano:StitchingSoftware>Photo Sphere</GPano:StitchingSoftware>
				<GPano:ProjectionType>equirectangular</GPano:ProjectionType>
				<GPano:PoseHeadingDegrees>360.0</GPano:PoseHeadingDegrees>
				<GPano:InitialViewHeadingDegrees>90.0</GPano:InitialViewHeadingDegrees>
				<GPano:InitialViewPitchDegrees>0.0</GPano:InitialViewPitchDegrees>
				<GPano:InitialViewRollDegrees>0.0</GPano:InitialViewRollDegrees>
				<GPano:InitialHorizontalFOVDegrees>65.0</GPano:InitialHorizontalFOVDegrees>
				<GPano:CroppedAreaLeftPixels>0</GPano:CroppedAreaLeftPixels>
				<GPano:CroppedAreaTopPixels>0</GPano:CroppedAreaTopPixels>
				<GPano:CroppedAreaImageWidthPixels>6000</GPano:CroppedAreaImageWidthPixels>
				<GPano:CroppedAreaImageHeightPixels>3000</GPano:CroppedAreaImageHeightPixels>
				<GPano:FullPanoWidthPixels>6000</GPano:FullPanoWidthPixels>
				<GPano:FullPanoHeightPixels>3000</GPano:FullPanoHeightPixels>
				<GPano:FirstPhotoDate>2013-16-12T18:03:13.0Z</GPano:FirstPhotoDate>
				<GPano:LastPhotoDate>2012-11-07T18:10:10.0Z</GPano:LastPhotoDate>
				<GPano:SourcePhotosCount>6</GPano:SourcePhotosCount>
				<GPano:ExposureLockUsed>False</GPano:ExposureLockUsed>
			</rdf:Description>
		</rdf:RDF>
	</x:xmpmeta>
<?xpacket end="w"?>