360 Camera with GPS and Heading Metadata for Spatial Object Localization

Hello everyone,
I am looking for a 360 camera for a workflow in which objects detected in a 360 image can later be spatially located.

I need a camera that records the camera orientation at capture time, for example yaw/azimuth. I found that the Ricoh THETA X provides PoseHeadingDegrees metadata and also has built-in GPS.

However, I would like to know whether there are other 360 cameras that provide similar metadata and would allow me to determine, for example, whether a building in the image is on the left or right side of the road.

The Mapillary recommended line of GoPro MAX, MAX 2025, and MAX2 cameras record gyroscopic and compass data at about 10 Hz. However, the data comes as a GoPro proprietary but well documented and machine readable GPMF (but GPMD FourCC) metadata stream. And, although MAX and MAX 2025 do produce Google Pano XMP metadata, all Pose* tags are always 0.0, so reading PoseHeadingDegrees will not do you any good.

Xmp.GPano.UsePanoramaViewer                  XmpText     4  True
Xmp.GPano.CaptureSoftware                    XmpText     9  GoPro Max
Xmp.GPano.StitchingSoftware                  XmpText     9  GoPro Max
Xmp.GPano.ProjectionType                     XmpText    15  equirectangular
Xmp.GPano.PoseHeadingDegrees                 XmpText     3  0.0
Xmp.GPano.PosePitchDegrees                   XmpText     3  0.0
Xmp.GPano.PoseRollDegrees                    XmpText     3  0.0
Xmp.GPano.InitialViewHeadingDegrees          XmpText     3  0.0
Xmp.GPano.InitialViewPitchDegrees            XmpText     3  0.0
Xmp.GPano.InitialViewRollDegrees             XmpText     3  0.0
Xmp.GPano.InitialHorizontalFOVDegrees        XmpText     3  0.0
Xmp.GPano.InitialVerticalFOVDegrees          XmpText     3  0.0
Xmp.GPano.CroppedAreaLeftPixels              XmpText     1  0
Xmp.GPano.CroppedAreaTopPixels               XmpText     1  0
Xmp.GPano.CroppedAreaImageWidthPixels        XmpText     4  5760
Xmp.GPano.CroppedAreaImageHeightPixels       XmpText     4  2880
Xmp.GPano.FullPanoWidthPixels                XmpText     4  5760
Xmp.GPano.FullPanoHeightPixels               XmpText     4  2880
Xmp.GPano.FirstPhotoDate                     XmpText    19  YYYY:MM:DD HH:MM:SS
Xmp.GPano.LastPhotoDate                      XmpText    19  YYYY:MM:DD HH:MM:SS
Xmp.GPano.SourcePhotosCount                  XmpText     1  2
Xmp.GPano.ExposureLockUsed                   XmpText     5  False
Xmp.GPano.InitialCameraDolly                 XmpText     3  0.0

MAX and MAX 2025 do not write GPSImgDirection either, except like already mentioned, compass data in the GPMF stream.

I do not know whether MAX2 has been improved in this regard. Perhaps @TheWizard can share some insight?

This is the output of the Max 2 (a CineForm output of the original 360):

[ExifTool] ExifToolVersion : 13.54
[System] FileName : GS020595.mov
[System] Directory : .
[System] FileSize : 2.1 GB
[System] FileModifyDate : 2026:04:10 18:41:39+02:00
[System] FileAccessDate : 2026:04:10 22:11:59+02:00
[System] FileCreateDate : 2026:04:10 22:11:56+02:00
[System] FilePermissions : -rw-rw-rw-
[File] FileType : MP4
[File] FileTypeExtension : mp4
[File] MIMEType : video/mp4
[QuickTime] MajorBrand : MP4 v2 [ISO 14496-14]
[QuickTime] MinorVersion : 0.0.0
[QuickTime] CompatibleBrands : mp41, isom
[QuickTime] MediaDataSize : 2136056524
[QuickTime] MediaDataOffset : 72
[QuickTime] MovieHeaderVersion : 0
[QuickTime] CreateDate : 2026:04:10 16:41:28
[QuickTime] ModifyDate : 2026:04:10 16:41:28
[QuickTime] TimeScale : 48000
[QuickTime] Duration : 17.54 s
[QuickTime] PreferredRate : 1
[QuickTime] PreferredVolume : 100.00%
[QuickTime] MatrixStructure : 1 0 0 0 1 0 0 0 1
[QuickTime] PreviewTime : 0 s
[QuickTime] PreviewDuration : 0 s
[QuickTime] PosterTime : 0 s
[QuickTime] SelectionTime : 0 s
[QuickTime] SelectionDuration : 0 s
[QuickTime] CurrentTime : 0 s
[QuickTime] NextTrackID : 3
[QuickTime] HandlerType : Metadata
[Track1] TrackHeaderVersion : 0
[Track1] TrackCreateDate : 2026:04:10 16:41:28
[Track1] TrackModifyDate : 2026:04:10 16:41:28
[Track1] TrackID : 1
[Track1] TrackDuration : 16.92 s
[Track1] TrackLayer : 0
[Track1] TrackVolume : 0.00%
[Track1] MatrixStructure : 1 0 0 0 1 0 0 0 1
[Track1] ImageWidth : 7680
[Track1] ImageHeight : 3840
[Track1] MediaHeaderVersion : 0
[Track1] MediaCreateDate : 2026:04:10 16:41:28
[Track1] MediaModifyDate : 2026:04:10 16:41:28
[Track1] MediaTimeScale : 25000
[Track1] MediaDuration : 16.92 s
[Track1] MediaLanguageCode : und
[Track1] HandlerType : Video Track
[Track1] HandlerDescription : VideoHandler
[Track1] GraphicsMode : srcCopy
[Track1] OpColor : 0 0 0
[Track1] CompressorID : CFHD
[Track1] VendorID : Unknown (gpro)
[Track1] SourceImageWidth : 7680
[Track1] SourceImageHeight : 3840
[Track1] XResolution : 72
[Track1] YResolution : 72
[Track1] CompressorName : CineForm HD
[Track1] BitDepth : 24
[Track1] VideoFrameRate : 25
[Track1] TimecodeTrack : 3
[XMP-GSpherical] Spherical : true
[XMP-GSpherical] Stitched : true
[XMP-GSpherical] StitchingSoftware : Spherical Metadata Tool
[XMP-GSpherical] ProjectionType : equirectangular
[Track2] TrackHeaderVersion : 0
[Track2] TrackCreateDate : 2026:04:10 16:41:28
[Track2] TrackModifyDate : 2026:04:10 16:41:28
[Track2] TrackID : 2
[Track2] TrackDuration : 17.54 s
[Track2] TrackLayer : 0
[Track2] TrackVolume : 100.00%
[Track2] MatrixStructure : 1 0 0 0 1 0 0 0 1
[Track2] MediaHeaderVersion : 0
[Track2] MediaCreateDate : 2026:04:10 16:41:28
[Track2] MediaModifyDate : 2026:04:10 16:41:28
[Track2] MediaTimeScale : 48000
[Track2] MediaDuration : 17.54 s
[Track2] MediaLanguageCode : und
[Track2] HandlerType : Audio Track
[Track2] HandlerDescription : SoundHandler
[Track2] Balance : 0
[Track2] AudioFormat : mp4a
[Track2] AudioChannels : 2
[Track2] AudioBitsPerSample : 24
[Track2] AudioSampleRate : 48000
[Track2] TimecodeTrack : 3
[Track3] TrackHeaderVersion : 0
[Track3] TrackCreateDate : 2026:04:10 07:03:20
[Track3] TrackModifyDate : 2026:04:10 07:03:20
[Track3] TrackID : 3
[Track3] TrackDuration : 0:00:33
[Track3] TrackLayer : 0
[Track3] TrackVolume : 0.00%
[Track3] MatrixStructure : 1 0 0 0 1 0 0 0 1
[Track3] MediaHeaderVersion : 0
[Track3] MediaCreateDate : 2026:04:10 07:03:20
[Track3] MediaModifyDate : 2026:04:10 07:03:20
[Track3] MediaTimeScale : 25000
[Track3] MediaDuration : 16.92 s
[Track3] HandlerClass : Media Handler
[Track3] HandlerType : Time Code
[Track3] HandlerDescription : GoPro TCD
[Track3] GenMediaVersion : 0
[Track3] GenFlags : 0 0 0
[Track3] GenGraphicsMode : ditherCopy
[Track3] GenOpColor : 32768 32768 32768
[Track3] GenBalance : 0
[Track3] TextFont : Unknown (21)
[Track3] TextFace : Plain
[Track3] TextSize : 10
[Track3] TextColor : 0 0 0
[Track3] BackgroundColor : 65535 65535 65535
[Track3] FontName : Helvetica
[Track3] OtherFormat : tmcd
[Track3] PlaybackFrameRate : 25
[Composite] ImageSize : 7680x3840
[Composite] Megapixels : 29.5
[Composite] AvgBitrate : 974 Mbps
[Composite] Rotation : 0

1 Like