How to add mandatory Photo Sphere meta data to an equirectangular image (Photoshop CC 2014)

Preface

Some information on this post is outdated! Google Views has been migrated to Google Maps / Google Streeet View. Outdated information has been struck through.

Last year Google added a new feature to their set of web based applications. Publishing geo located spherical panoramas (aka Photo Spheres) on Views.

In another article, Markus already described the complete workflow which is needed to publish a panoramic image on Views and embed it into your website.

I already described different methods of adding mandatory Photo Sphere meta data to an equirectangular image in a second article. One of the methods described a custom meta data panel which could be used within Photoshop CS6 and Photoshop CC to read and write the photosphere meta data.

As Adobe changed their specification for creating meta data panels for Photoshop CC 2014, I redid the description…

Note for downloading the XML files

Depending on your browser it could be the best option to click the XML download link and use the context menu to save the link as XML to your local computer!

Custom photo sphere meta data panel for Photoshop CC 2014

First you have to identify the proper location for the File Panels. On a Windows system running PS CC 2014 the files are located in

C:\Users\[Username]\AppData\Roaming\Adobe\XMP\Metadata Extensions

or directly using the appropriate environment variable:

%USERPROFILE%\AppData\Roaming\Adobe\XMP\Metadata Extensions

PS CC 2014 running on Mac OS uses the following location

[Username]/Library/Application Support/Adobe/XMP/Metadata Extensions

Navigate to the location and create a sub directory named

Photosphere

with two subdirectories named

schema

and

view

Change to the newly created directory ‘Photosphere’ and create a file named

manifest.xml

with the following content (or download the file here):

<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2014 by Jürgen Matern (/author/juergen/)
 
This file is licensed under the Creative Commons Attribution ShareAlike 3.0
License (http://creativecommons.org/licenses/by-sa/3.0/).
 
In short: you are free to share and make derivative works of the file under
the conditions that you appropriately attribute it and that you distribute
it only under a license identical to this one.
 
Photosphere File Info Panel (manifest.xml)	
-->
<extension xmlns="http://ns.adobe.com/metadata/extension/1.0/"
   name="Photosphere"
   version="1.0"
   locFilePrefix="photosphere">
</extension>

Change to the newly created directory ‘schema’ and create a file named

photosphereSchema.xml

with the following content (or download the file here):

<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2014 by Jürgen Matern (/author/juergen/)
 
This file is licensed under the Creative Commons Attribution ShareAlike 3.0
License (http://creativecommons.org/licenses/by-sa/3.0/).
 
In short: you are free to share and make derivative works of the file under
the conditions that you appropriately attribute it and that you distribute
it only under a license identical to this one.
 
Photosphere File Info Panel (photosphereSchema.xml)	
-->
<xmp_definitions>
  <!-- Defining the namespace and prefix of the schema --> 	
	<xmp_schema prefix='GPano' namespace='http://ns.google.com/photos/1.0/panorama/' label='Photosphere' description='Properties for Photospheres'>
 
		<!-- Defining the properties -->
		<xmp_property name='StitchingSoftware' category='external' type='openchoice' element_type='text' label='Stitching Software:' description='The software which created the panorama.'>
			<xmp_choice raw_value='PTGui Pro 10.0.10' label='PTGui Pro 10.0.10'/>
			<xmp_choice raw_value='PTGui 10.0.10' label='PTGui 10.0.10'/>
			<xmp_choice raw_value='Hugin' label='Hugin'/>
		</xmp_property>
 
		<xmp_property name='ProjectionType' category='external' type='closedchoice' element_type='text' label='Pano Projection:' description='Currently Google applications only support equirectangular projection.' >
			<xmp_choice raw_value='equirectangular' label='equirectangular'/>
			<xmp_choice raw_value='' label='none specified'/>
		</xmp_property>
 
		<xmp_property name='UsePanoramaViewer' category='external' type='boolean' label='Use Panorama Viewer:' description='Set this value if the image should show as photosphere.' />
		<xmp_property name='PoseHeadingDegrees' category='external' type='real' label='Heading:' description='This field is only mandatory for Google Maps. It is the direction in the middle of the image in degrees. North=0, East=90, South=180, West=270. See [GPS].' />
		<xmp_property name='CroppedAreaImageWidthPixels' category='external' type='integer'  label='Cropped Area Image Width:' description='For full spheres the same as Full Pano Width and width of the image in pixels (see [Image Size] further down).'/>
		<xmp_property name='CroppedAreaImageHeightPixels' category='external' type='integer' label='Cropped Image Heigth:' description='For full spheres the same as Full Pano heigth and height of the image in pixels (see [Image Size] further down).'/>
		<xmp_property name='FullPanoWidthPixels' category='external' type='integer' label='Full Pano Width:' description='For full spheres this equals to the height of the image in pixels (see [Image Size] further down).'/>
		<xmp_property name='FullPanoHeightPixels' category='external' type='integer'  label='Full Pano Heigth:' description='For full spheres this equals to the height of the image in pixels (see [Image Size] further down).'/>
		<xmp_property name='CroppedAreaLeftPixels' category='external' type='integer' label='Cropped Pixels Left:' description='Set to 0 for full spheres.'/>
		<xmp_property name='CroppedAreaTopPixels' category='external' type='integer' label='Cropped Pixels Top:' description='Set to 0 for full spheres.'/>
		<xmp_property name='SourcePhotosCount' category='external' type='integer' label='Source Photos Count:' description='Number of source image. This value is optional.'/>
		<xmp_property name='FirstPhotoDate' category='external' type='date' label='First Photo Date' description='Date and time of the first image taken.  This value is optional.'/>
		<xmp_property name='LastPhotoDate' category='external' type='date' label='Last Photo Date' description='Date and time of the last image taken.  This value is optional.'/>
	</xmp_schema>		
</xmp_definitions>

Change to the newly created directory ‘view’ and create a file named

photosphereView.xml

with the following content (or download the file here):

<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2014 by Jürgen Matern (/author/juergen/)
 
This file is licensed under the Creative Commons Attribution ShareAlike 3.0
License (http://creativecommons.org/licenses/by-sa/3.0/).
 
In short: you are free to share and make derivative works of the file under
the conditions that you appropriately attribute it and that you distribute
it only under a license identical to this one.
 
Photosphere File Info Panel (photosphereView.xml)	
-->
 
<views xmlns="http://ns.adobe.com/metadata/ui/1.0/"> 
	<view
		xmlns:exif="http://ns.adobe.com/exif/1.0/"
		xmlns:GPano='http://ns.google.com/photos/1.0/panorama/' 
		name="Photosphere"
		label="Photosphere"
		description="This view shows the GPano properties and some other values from the EXIF metadata.">
 
		<section label="Photosphere" type="labelled">
			<property name='GPano:StitchingSoftware' />
			<property name='GPano:ProjectionType' />
			<property name='GPano:UsePanoramaViewer' />
			<property name='GPano:PoseHeadingDegrees' />
			<property name='GPano:CroppedAreaImageWidthPixels' />
			<property name='GPano:CroppedAreaImageHeightPixels' />
			<property name='GPano:FullPanoWidthPixels' />
			<property name='GPano:FullPanoHeightPixels' />
			<property name='GPano:CroppedAreaLeftPixels' />
			<property name='GPano:CroppedAreaTopPixels' />
			<property name='GPano:SourcePhotosCount' />
			<property name='GPano:FirstPhotoDate' />
			<property name='GPano:LastPhotoDate' />
		</section>
		<section label="Image Size" type="labelled">
			<property name="exif:PixelXDimension"/>
			<property name="exif:PixelYDimension"/>
		</section>
		<section label="GPS" type="labelled">
			<property name='exif:GPSLongitude' />
			<property name='exif:GPSLatitude' />
			<property name='exif:GPSAltitude' />
			<property name='exif:GPSImgDirection' />
			<property name='exif:GPSDestLongitude' />
			<property name='exif:GPSDestLatitude' />
		</section>
	</view>		
</views>

The properties ‘SourcePhotosCount’, ‘FirstPhotoDate’ and ‘LastPhotoDate’ are optional values for a photosphere.

Then open the file info dialog of Photoshop CC 2014. When all the meta data is missing, the new panel looks like this on a german installation:
Custom file info panel within Photoshop CC 2014, empty
And the following screenshot shows the panel, when the meta data fields are already populated.
Custom file info panel within Photoshop CC 2014, populated

Bayernpark in November

This panorama has been shot from a 6m high pole using the innovative Sony ILCE-QX1 ‘camera’. I took on e image in each cardinal direction and an extra shot to get rid of my shadow. For a more detailed description of the camera and lens setup see this post from PanoTwin Jürgen.

Geotag Icon Show on map




Court House Courtyard

This panorama has been shot handheld with the innovative Sony ILCE-QX1 ‘camera’. I took one image in each cardinal direction and an extra shot for zenith and nadir. I held the camera obove my head to reach a higher view point and released using my smart phone. For a more detailed description of the setup see this post from PanoTwin Jürgen.

The maximum equirectangular panorama size of this setup is about 10000×5000 pixel according to PTGui. However the one you see below has been downsized to 6000×3000 pixel before publishing it on Google Views.

Geotag Icon Show on map




QR Code Business Card