1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.streetview.publish.v1; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto"; 20*d5c09012SAndroid Build Coastguard Workerimport "google/api/resource.proto"; 21*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/duration.proto"; 22*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto"; 23*d5c09012SAndroid Build Coastguard Workerimport "google/type/latlng.proto"; 24*d5c09012SAndroid Build Coastguard Worker 25*d5c09012SAndroid Build Coastguard Workeroption go_package = "google.golang.org/genproto/googleapis/streetview/publish/v1;publish"; 26*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "StreetViewPublishResources"; 27*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.geo.ugc.streetview.publish.v1"; 28*d5c09012SAndroid Build Coastguard Worker 29*d5c09012SAndroid Build Coastguard Worker// Upload reference for media files. 30*d5c09012SAndroid Build Coastguard Workermessage UploadRef { 31*d5c09012SAndroid Build Coastguard Worker // Required. 32*d5c09012SAndroid Build Coastguard Worker oneof file_source { 33*d5c09012SAndroid Build Coastguard Worker // An upload reference should be unique for each user. It follows 34*d5c09012SAndroid Build Coastguard Worker // the form: 35*d5c09012SAndroid Build Coastguard Worker // "https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}" 36*d5c09012SAndroid Build Coastguard Worker string upload_url = 1; 37*d5c09012SAndroid Build Coastguard Worker } 38*d5c09012SAndroid Build Coastguard Worker} 39*d5c09012SAndroid Build Coastguard Worker 40*d5c09012SAndroid Build Coastguard Worker// Identifier for a [Photo][google.streetview.publish.v1.Photo]. 41*d5c09012SAndroid Build Coastguard Workermessage PhotoId { 42*d5c09012SAndroid Build Coastguard Worker // A unique identifier for a photo. 43*d5c09012SAndroid Build Coastguard Worker string id = 1; 44*d5c09012SAndroid Build Coastguard Worker} 45*d5c09012SAndroid Build Coastguard Worker 46*d5c09012SAndroid Build Coastguard Worker// Level information containing level number and its corresponding name. 47*d5c09012SAndroid Build Coastguard Workermessage Level { 48*d5c09012SAndroid Build Coastguard Worker // Optional. Floor number, used for ordering. 0 indicates the ground level, 1 49*d5c09012SAndroid Build Coastguard Worker // indicates the first level above ground level, -1 indicates the first level 50*d5c09012SAndroid Build Coastguard Worker // under ground level. Non-integer values are OK. 51*d5c09012SAndroid Build Coastguard Worker double number = 1 [(google.api.field_behavior) = OPTIONAL]; 52*d5c09012SAndroid Build Coastguard Worker 53*d5c09012SAndroid Build Coastguard Worker // Required. A name assigned to this Level, restricted to 3 characters. 54*d5c09012SAndroid Build Coastguard Worker // Consider how the elevator buttons would be labeled for this level if there 55*d5c09012SAndroid Build Coastguard Worker // was an elevator. 56*d5c09012SAndroid Build Coastguard Worker string name = 2 [(google.api.field_behavior) = REQUIRED]; 57*d5c09012SAndroid Build Coastguard Worker} 58*d5c09012SAndroid Build Coastguard Worker 59*d5c09012SAndroid Build Coastguard Worker// Raw pose measurement for an entity. 60*d5c09012SAndroid Build Coastguard Workermessage Pose { 61*d5c09012SAndroid Build Coastguard Worker // Latitude and longitude pair of the pose, as explained here: 62*d5c09012SAndroid Build Coastguard Worker // https://cloud.google.com/datastore/docs/reference/rest/Shared.Types/LatLng 63*d5c09012SAndroid Build Coastguard Worker // When creating a [Photo][google.streetview.publish.v1.Photo], if the 64*d5c09012SAndroid Build Coastguard Worker // latitude and longitude pair are not provided, the geolocation from the 65*d5c09012SAndroid Build Coastguard Worker // exif header is used. A latitude and longitude pair not provided in the 66*d5c09012SAndroid Build Coastguard Worker // photo or exif header causes the photo process to fail. 67*d5c09012SAndroid Build Coastguard Worker google.type.LatLng lat_lng_pair = 1; 68*d5c09012SAndroid Build Coastguard Worker 69*d5c09012SAndroid Build Coastguard Worker // Altitude of the pose in meters above WGS84 ellipsoid. 70*d5c09012SAndroid Build Coastguard Worker // NaN indicates an unmeasured quantity. 71*d5c09012SAndroid Build Coastguard Worker double altitude = 2; 72*d5c09012SAndroid Build Coastguard Worker 73*d5c09012SAndroid Build Coastguard Worker // The following pose parameters pertain to the center of the photo. They 74*d5c09012SAndroid Build Coastguard Worker // match https://developers.google.com/streetview/spherical-metadata. 75*d5c09012SAndroid Build Coastguard Worker // Compass heading, measured at the center of the photo in degrees clockwise 76*d5c09012SAndroid Build Coastguard Worker // from North. Value must be >=0 and <360. NaN indicates an unmeasured 77*d5c09012SAndroid Build Coastguard Worker // quantity. 78*d5c09012SAndroid Build Coastguard Worker double heading = 3; 79*d5c09012SAndroid Build Coastguard Worker 80*d5c09012SAndroid Build Coastguard Worker // Pitch, measured at the center of the photo in degrees. Value must be >=-90 81*d5c09012SAndroid Build Coastguard Worker // and <= 90. A value of -90 means looking directly down, and a value of 90 82*d5c09012SAndroid Build Coastguard Worker // means looking directly up. 83*d5c09012SAndroid Build Coastguard Worker // NaN indicates an unmeasured quantity. 84*d5c09012SAndroid Build Coastguard Worker double pitch = 4; 85*d5c09012SAndroid Build Coastguard Worker 86*d5c09012SAndroid Build Coastguard Worker // Roll, measured in degrees. Value must be >= 0 and <360. A value of 0 87*d5c09012SAndroid Build Coastguard Worker // means level with the horizon. 88*d5c09012SAndroid Build Coastguard Worker // NaN indicates an unmeasured quantity. 89*d5c09012SAndroid Build Coastguard Worker double roll = 5; 90*d5c09012SAndroid Build Coastguard Worker 91*d5c09012SAndroid Build Coastguard Worker // Time of the GPS record since UTC epoch. 92*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp gps_record_timestamp_unix_epoch = 6; 93*d5c09012SAndroid Build Coastguard Worker 94*d5c09012SAndroid Build Coastguard Worker // Level (the floor in a building) used to configure vertical navigation. 95*d5c09012SAndroid Build Coastguard Worker Level level = 7; 96*d5c09012SAndroid Build Coastguard Worker 97*d5c09012SAndroid Build Coastguard Worker // The estimated horizontal accuracy of this pose in meters with 68% 98*d5c09012SAndroid Build Coastguard Worker // confidence (one standard deviation). For example, on Android, this value is 99*d5c09012SAndroid Build Coastguard Worker // available from this method: 100*d5c09012SAndroid Build Coastguard Worker // https://developer.android.com/reference/android/location/Location#getAccuracy(). 101*d5c09012SAndroid Build Coastguard Worker // Other platforms have different methods of obtaining similar accuracy 102*d5c09012SAndroid Build Coastguard Worker // estimations. 103*d5c09012SAndroid Build Coastguard Worker float accuracy_meters = 9; 104*d5c09012SAndroid Build Coastguard Worker} 105*d5c09012SAndroid Build Coastguard Worker 106*d5c09012SAndroid Build Coastguard Worker// IMU data from the device sensors. 107*d5c09012SAndroid Build Coastguard Workermessage Imu { 108*d5c09012SAndroid Build Coastguard Worker // A Generic 3d measurement sample. 109*d5c09012SAndroid Build Coastguard Worker message Measurement3d { 110*d5c09012SAndroid Build Coastguard Worker // The timestamp of the IMU measurement. 111*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp capture_time = 1; 112*d5c09012SAndroid Build Coastguard Worker 113*d5c09012SAndroid Build Coastguard Worker // The sensor measurement in the x axis. 114*d5c09012SAndroid Build Coastguard Worker float x = 2; 115*d5c09012SAndroid Build Coastguard Worker 116*d5c09012SAndroid Build Coastguard Worker // The sensor measurement in the y axis. 117*d5c09012SAndroid Build Coastguard Worker float y = 3; 118*d5c09012SAndroid Build Coastguard Worker 119*d5c09012SAndroid Build Coastguard Worker // The sensor measurement in the z axis. 120*d5c09012SAndroid Build Coastguard Worker float z = 4; 121*d5c09012SAndroid Build Coastguard Worker } 122*d5c09012SAndroid Build Coastguard Worker 123*d5c09012SAndroid Build Coastguard Worker // The accelerometer measurements in meters/sec^2 with increasing timestamps 124*d5c09012SAndroid Build Coastguard Worker // from devices. 125*d5c09012SAndroid Build Coastguard Worker repeated Measurement3d accel_mpsps = 1; 126*d5c09012SAndroid Build Coastguard Worker 127*d5c09012SAndroid Build Coastguard Worker // The gyroscope measurements in radians/sec with increasing timestamps from 128*d5c09012SAndroid Build Coastguard Worker // devices. 129*d5c09012SAndroid Build Coastguard Worker repeated Measurement3d gyro_rps = 2; 130*d5c09012SAndroid Build Coastguard Worker 131*d5c09012SAndroid Build Coastguard Worker // The magnetometer measurements of the magnetic field in microtesla (uT) with 132*d5c09012SAndroid Build Coastguard Worker // increasing timestamps from devices. 133*d5c09012SAndroid Build Coastguard Worker repeated Measurement3d mag_ut = 3; 134*d5c09012SAndroid Build Coastguard Worker} 135*d5c09012SAndroid Build Coastguard Worker 136*d5c09012SAndroid Build Coastguard Worker// Place metadata for an entity. 137*d5c09012SAndroid Build Coastguard Workermessage Place { 138*d5c09012SAndroid Build Coastguard Worker // Place identifier, as described in 139*d5c09012SAndroid Build Coastguard Worker // https://developers.google.com/places/place-id. 140*d5c09012SAndroid Build Coastguard Worker string place_id = 1; 141*d5c09012SAndroid Build Coastguard Worker 142*d5c09012SAndroid Build Coastguard Worker // Output only. The name of the place, localized to the language_code. 143*d5c09012SAndroid Build Coastguard Worker string name = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; 144*d5c09012SAndroid Build Coastguard Worker 145*d5c09012SAndroid Build Coastguard Worker // Output only. The language_code that the name is localized with. This should 146*d5c09012SAndroid Build Coastguard Worker // be the language_code specified in the request, but may be a fallback. 147*d5c09012SAndroid Build Coastguard Worker string language_code = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 148*d5c09012SAndroid Build Coastguard Worker} 149*d5c09012SAndroid Build Coastguard Worker 150*d5c09012SAndroid Build Coastguard Worker// A connection is the link from a source photo to a destination photo. 151*d5c09012SAndroid Build Coastguard Workermessage Connection { 152*d5c09012SAndroid Build Coastguard Worker // Required. The destination of the connection from the containing photo to 153*d5c09012SAndroid Build Coastguard Worker // another photo. 154*d5c09012SAndroid Build Coastguard Worker PhotoId target = 1 [(google.api.field_behavior) = REQUIRED]; 155*d5c09012SAndroid Build Coastguard Worker} 156*d5c09012SAndroid Build Coastguard Worker 157*d5c09012SAndroid Build Coastguard Worker// Photo is used to store 360 photos along with photo metadata. 158*d5c09012SAndroid Build Coastguard Workermessage Photo { 159*d5c09012SAndroid Build Coastguard Worker // Status of rights transfer. 160*d5c09012SAndroid Build Coastguard Worker enum TransferStatus { 161*d5c09012SAndroid Build Coastguard Worker // The status of this transfer is unspecified. 162*d5c09012SAndroid Build Coastguard Worker TRANSFER_STATUS_UNKNOWN = 0; 163*d5c09012SAndroid Build Coastguard Worker 164*d5c09012SAndroid Build Coastguard Worker // This photo has never been in a transfer. 165*d5c09012SAndroid Build Coastguard Worker NEVER_TRANSFERRED = 1; 166*d5c09012SAndroid Build Coastguard Worker 167*d5c09012SAndroid Build Coastguard Worker // This photo transfer has been initiated, but the receiver has not yet 168*d5c09012SAndroid Build Coastguard Worker // responded. 169*d5c09012SAndroid Build Coastguard Worker PENDING = 2; 170*d5c09012SAndroid Build Coastguard Worker 171*d5c09012SAndroid Build Coastguard Worker // The photo transfer has been completed, and this photo has been 172*d5c09012SAndroid Build Coastguard Worker // transferred to the recipient. 173*d5c09012SAndroid Build Coastguard Worker COMPLETED = 3; 174*d5c09012SAndroid Build Coastguard Worker 175*d5c09012SAndroid Build Coastguard Worker // The recipient rejected this photo transfer. 176*d5c09012SAndroid Build Coastguard Worker REJECTED = 4; 177*d5c09012SAndroid Build Coastguard Worker 178*d5c09012SAndroid Build Coastguard Worker // The photo transfer expired before the recipient took any action. 179*d5c09012SAndroid Build Coastguard Worker EXPIRED = 5; 180*d5c09012SAndroid Build Coastguard Worker 181*d5c09012SAndroid Build Coastguard Worker // The sender cancelled this photo transfer. 182*d5c09012SAndroid Build Coastguard Worker CANCELLED = 6; 183*d5c09012SAndroid Build Coastguard Worker 184*d5c09012SAndroid Build Coastguard Worker // The recipient owns this photo due to a rights transfer. 185*d5c09012SAndroid Build Coastguard Worker RECEIVED_VIA_TRANSFER = 7; 186*d5c09012SAndroid Build Coastguard Worker } 187*d5c09012SAndroid Build Coastguard Worker 188*d5c09012SAndroid Build Coastguard Worker // Publication status of the photo in Google Maps. 189*d5c09012SAndroid Build Coastguard Worker enum MapsPublishStatus { 190*d5c09012SAndroid Build Coastguard Worker // The status of the photo is unknown. 191*d5c09012SAndroid Build Coastguard Worker UNSPECIFIED_MAPS_PUBLISH_STATUS = 0; 192*d5c09012SAndroid Build Coastguard Worker 193*d5c09012SAndroid Build Coastguard Worker // The photo is published to the public through Google Maps. 194*d5c09012SAndroid Build Coastguard Worker PUBLISHED = 1; 195*d5c09012SAndroid Build Coastguard Worker 196*d5c09012SAndroid Build Coastguard Worker // The photo has been rejected for an unknown reason. 197*d5c09012SAndroid Build Coastguard Worker REJECTED_UNKNOWN = 2; 198*d5c09012SAndroid Build Coastguard Worker } 199*d5c09012SAndroid Build Coastguard Worker 200*d5c09012SAndroid Build Coastguard Worker // Required. Output only. Required when updating a photo. Output only when 201*d5c09012SAndroid Build Coastguard Worker // creating a photo. Identifier for the photo, which is unique among all 202*d5c09012SAndroid Build Coastguard Worker // photos in Google. 203*d5c09012SAndroid Build Coastguard Worker PhotoId photo_id = 1 [ 204*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = REQUIRED, 205*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = OUTPUT_ONLY 206*d5c09012SAndroid Build Coastguard Worker ]; 207*d5c09012SAndroid Build Coastguard Worker 208*d5c09012SAndroid Build Coastguard Worker // Input only. Required when creating a photo. Input only. The resource URL 209*d5c09012SAndroid Build Coastguard Worker // where the photo bytes are uploaded to. 210*d5c09012SAndroid Build Coastguard Worker UploadRef upload_reference = 2 [(google.api.field_behavior) = INPUT_ONLY]; 211*d5c09012SAndroid Build Coastguard Worker 212*d5c09012SAndroid Build Coastguard Worker // Output only. The download URL for the photo bytes. This field is set only 213*d5c09012SAndroid Build Coastguard Worker // when 214*d5c09012SAndroid Build Coastguard Worker // [GetPhotoRequest.view][google.streetview.publish.v1.GetPhotoRequest.view] 215*d5c09012SAndroid Build Coastguard Worker // is set to 216*d5c09012SAndroid Build Coastguard Worker // [PhotoView.INCLUDE_DOWNLOAD_URL][google.streetview.publish.v1.PhotoView.INCLUDE_DOWNLOAD_URL]. 217*d5c09012SAndroid Build Coastguard Worker string download_url = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 218*d5c09012SAndroid Build Coastguard Worker 219*d5c09012SAndroid Build Coastguard Worker // Output only. The thumbnail URL for showing a preview of the given photo. 220*d5c09012SAndroid Build Coastguard Worker string thumbnail_url = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; 221*d5c09012SAndroid Build Coastguard Worker 222*d5c09012SAndroid Build Coastguard Worker // Output only. The share link for the photo. 223*d5c09012SAndroid Build Coastguard Worker string share_link = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; 224*d5c09012SAndroid Build Coastguard Worker 225*d5c09012SAndroid Build Coastguard Worker // Optional. Pose of the photo. 226*d5c09012SAndroid Build Coastguard Worker Pose pose = 4 [(google.api.field_behavior) = OPTIONAL]; 227*d5c09012SAndroid Build Coastguard Worker 228*d5c09012SAndroid Build Coastguard Worker // Optional. Connections to other photos. A connection represents the link 229*d5c09012SAndroid Build Coastguard Worker // from this photo to another photo. 230*d5c09012SAndroid Build Coastguard Worker repeated Connection connections = 5 [(google.api.field_behavior) = OPTIONAL]; 231*d5c09012SAndroid Build Coastguard Worker 232*d5c09012SAndroid Build Coastguard Worker // Optional. Absolute time when the photo was captured. 233*d5c09012SAndroid Build Coastguard Worker // When the photo has no exif timestamp, this is used to set a timestamp in 234*d5c09012SAndroid Build Coastguard Worker // the photo metadata. 235*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp capture_time = 6 236*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OPTIONAL]; 237*d5c09012SAndroid Build Coastguard Worker 238*d5c09012SAndroid Build Coastguard Worker // Output only. Time when the image was uploaded. 239*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp upload_time = 14 240*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 241*d5c09012SAndroid Build Coastguard Worker 242*d5c09012SAndroid Build Coastguard Worker // Optional. Places where this photo belongs. 243*d5c09012SAndroid Build Coastguard Worker repeated Place places = 7 [(google.api.field_behavior) = OPTIONAL]; 244*d5c09012SAndroid Build Coastguard Worker 245*d5c09012SAndroid Build Coastguard Worker // Output only. View count of the photo. 246*d5c09012SAndroid Build Coastguard Worker int64 view_count = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; 247*d5c09012SAndroid Build Coastguard Worker 248*d5c09012SAndroid Build Coastguard Worker // Output only. Status of rights transfer on this photo. 249*d5c09012SAndroid Build Coastguard Worker TransferStatus transfer_status = 12 250*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 251*d5c09012SAndroid Build Coastguard Worker 252*d5c09012SAndroid Build Coastguard Worker // Output only. Status in Google Maps, whether this photo was published or 253*d5c09012SAndroid Build Coastguard Worker // rejected. 254*d5c09012SAndroid Build Coastguard Worker MapsPublishStatus maps_publish_status = 13 255*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 256*d5c09012SAndroid Build Coastguard Worker} 257*d5c09012SAndroid Build Coastguard Worker 258*d5c09012SAndroid Build Coastguard Worker// A sequence of 360 photos along with metadata. 259*d5c09012SAndroid Build Coastguard Workermessage PhotoSequence { 260*d5c09012SAndroid Build Coastguard Worker // Primary source of GPS measurements. 261*d5c09012SAndroid Build Coastguard Worker enum GpsSource { 262*d5c09012SAndroid Build Coastguard Worker // GPS in raw_gps_timeline takes precedence if it exists. 263*d5c09012SAndroid Build Coastguard Worker PHOTO_SEQUENCE = 0; 264*d5c09012SAndroid Build Coastguard Worker 265*d5c09012SAndroid Build Coastguard Worker // GPS in Camera Motion Metadata Track (CAMM) takes precedence if it exists. 266*d5c09012SAndroid Build Coastguard Worker CAMERA_MOTION_METADATA_TRACK = 1; 267*d5c09012SAndroid Build Coastguard Worker } 268*d5c09012SAndroid Build Coastguard Worker 269*d5c09012SAndroid Build Coastguard Worker // Output only. Unique identifier for the photo sequence. 270*d5c09012SAndroid Build Coastguard Worker // This also acts as a long running operation ID if uploading is performed 271*d5c09012SAndroid Build Coastguard Worker // asynchronously. 272*d5c09012SAndroid Build Coastguard Worker string id = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 273*d5c09012SAndroid Build Coastguard Worker 274*d5c09012SAndroid Build Coastguard Worker // Output only. Photos with increasing timestamps. 275*d5c09012SAndroid Build Coastguard Worker repeated Photo photos = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; 276*d5c09012SAndroid Build Coastguard Worker 277*d5c09012SAndroid Build Coastguard Worker // Input only. Required when creating photo sequence. The resource name 278*d5c09012SAndroid Build Coastguard Worker // where the bytes of the photo sequence (in the form of video) are uploaded. 279*d5c09012SAndroid Build Coastguard Worker UploadRef upload_reference = 3 [(google.api.field_behavior) = INPUT_ONLY]; 280*d5c09012SAndroid Build Coastguard Worker 281*d5c09012SAndroid Build Coastguard Worker // Optional. Absolute time when the photo sequence starts to be captured. 282*d5c09012SAndroid Build Coastguard Worker // If the photo sequence is a video, this is the start time of the video. 283*d5c09012SAndroid Build Coastguard Worker // If this field is populated in input, it overrides the capture time in the 284*d5c09012SAndroid Build Coastguard Worker // video or XDM file. 285*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp capture_time_override = 4 286*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OPTIONAL]; 287*d5c09012SAndroid Build Coastguard Worker 288*d5c09012SAndroid Build Coastguard Worker // Output only. The time this photo sequence was created in uSV Store service. 289*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp upload_time = 18 290*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 291*d5c09012SAndroid Build Coastguard Worker 292*d5c09012SAndroid Build Coastguard Worker // Input only. Raw GPS measurements with increasing timestamps from the device 293*d5c09012SAndroid Build Coastguard Worker // that aren't time synced with each photo. These raw measurements will be 294*d5c09012SAndroid Build Coastguard Worker // used to infer the pose of each frame. Required in input when InputType is 295*d5c09012SAndroid Build Coastguard Worker // VIDEO and raw GPS measurements are not in Camera Motion Metadata Track 296*d5c09012SAndroid Build Coastguard Worker // (CAMM). User can indicate which takes precedence using gps_source if raw 297*d5c09012SAndroid Build Coastguard Worker // GPS measurements are provided in both raw_gps_timeline and Camera Motion 298*d5c09012SAndroid Build Coastguard Worker // Metadata Track (CAMM). 299*d5c09012SAndroid Build Coastguard Worker repeated Pose raw_gps_timeline = 7 [(google.api.field_behavior) = INPUT_ONLY]; 300*d5c09012SAndroid Build Coastguard Worker 301*d5c09012SAndroid Build Coastguard Worker // Input only. If both raw_gps_timeline and 302*d5c09012SAndroid Build Coastguard Worker // the Camera Motion Metadata Track (CAMM) contain GPS measurements, 303*d5c09012SAndroid Build Coastguard Worker // indicate which takes precedence. 304*d5c09012SAndroid Build Coastguard Worker GpsSource gps_source = 8 [(google.api.field_behavior) = INPUT_ONLY]; 305*d5c09012SAndroid Build Coastguard Worker 306*d5c09012SAndroid Build Coastguard Worker // Input only. Three axis IMU data for the collection. 307*d5c09012SAndroid Build Coastguard Worker // If this data is too large to put in the request, then it should be put in 308*d5c09012SAndroid Build Coastguard Worker // the CAMM track for the video. This data always takes precedence over the 309*d5c09012SAndroid Build Coastguard Worker // equivalent CAMM data, if it exists. 310*d5c09012SAndroid Build Coastguard Worker Imu imu = 11 [(google.api.field_behavior) = INPUT_ONLY]; 311*d5c09012SAndroid Build Coastguard Worker 312*d5c09012SAndroid Build Coastguard Worker // Output only. The processing state of this sequence. 313*d5c09012SAndroid Build Coastguard Worker ProcessingState processing_state = 12 314*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 315*d5c09012SAndroid Build Coastguard Worker 316*d5c09012SAndroid Build Coastguard Worker // Output only. If this sequence has processing_state = FAILED, this will 317*d5c09012SAndroid Build Coastguard Worker // contain the reason why it failed. If the processing_state is any other 318*d5c09012SAndroid Build Coastguard Worker // value, this field will be unset. 319*d5c09012SAndroid Build Coastguard Worker ProcessingFailureReason failure_reason = 13 320*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 321*d5c09012SAndroid Build Coastguard Worker 322*d5c09012SAndroid Build Coastguard Worker // Output only. If this sequence has `failure_reason` set, this may contain 323*d5c09012SAndroid Build Coastguard Worker // additional details about the failure. 324*d5c09012SAndroid Build Coastguard Worker ProcessingFailureDetails failure_details = 23 325*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 326*d5c09012SAndroid Build Coastguard Worker 327*d5c09012SAndroid Build Coastguard Worker // Output only. The computed distance of the photo sequence in meters. 328*d5c09012SAndroid Build Coastguard Worker double distance_meters = 16 [(google.api.field_behavior) = OUTPUT_ONLY]; 329*d5c09012SAndroid Build Coastguard Worker 330*d5c09012SAndroid Build Coastguard Worker // Output only. A rectangular box that encapsulates every image in this photo 331*d5c09012SAndroid Build Coastguard Worker // sequence. 332*d5c09012SAndroid Build Coastguard Worker LatLngBounds sequence_bounds = 20 [(google.api.field_behavior) = OUTPUT_ONLY]; 333*d5c09012SAndroid Build Coastguard Worker 334*d5c09012SAndroid Build Coastguard Worker // Output only. The total number of views that all the published images in 335*d5c09012SAndroid Build Coastguard Worker // this PhotoSequence have received. 336*d5c09012SAndroid Build Coastguard Worker int64 view_count = 21 [(google.api.field_behavior) = OUTPUT_ONLY]; 337*d5c09012SAndroid Build Coastguard Worker 338*d5c09012SAndroid Build Coastguard Worker // Output only. The filename of the upload. Does not include the directory 339*d5c09012SAndroid Build Coastguard Worker // path. Only available if the sequence was uploaded on a platform that 340*d5c09012SAndroid Build Coastguard Worker // provides the filename. 341*d5c09012SAndroid Build Coastguard Worker string filename = 22 [(google.api.field_behavior) = OUTPUT_ONLY]; 342*d5c09012SAndroid Build Coastguard Worker} 343*d5c09012SAndroid Build Coastguard Worker 344*d5c09012SAndroid Build Coastguard Worker// A rectangle in geographical coordinates. 345*d5c09012SAndroid Build Coastguard Workermessage LatLngBounds { 346*d5c09012SAndroid Build Coastguard Worker // The southwest corner of these bounds. 347*d5c09012SAndroid Build Coastguard Worker google.type.LatLng southwest = 1; 348*d5c09012SAndroid Build Coastguard Worker 349*d5c09012SAndroid Build Coastguard Worker // The northeast corner of these bounds. 350*d5c09012SAndroid Build Coastguard Worker google.type.LatLng northeast = 2; 351*d5c09012SAndroid Build Coastguard Worker} 352*d5c09012SAndroid Build Coastguard Worker 353*d5c09012SAndroid Build Coastguard Worker// The processing state of the sequence. The states move as follows: 354*d5c09012SAndroid Build Coastguard Worker// 355*d5c09012SAndroid Build Coastguard Worker// ``` 356*d5c09012SAndroid Build Coastguard Worker// +-------------------------+ 357*d5c09012SAndroid Build Coastguard Worker// | | 358*d5c09012SAndroid Build Coastguard Worker// +---v---+ +----------+ +----+----+ 359*d5c09012SAndroid Build Coastguard Worker// |PENDING+-->PROCESSING+-->PROCESSED| 360*d5c09012SAndroid Build Coastguard Worker// +---+---+ +----+-----+ +----+----+ 361*d5c09012SAndroid Build Coastguard Worker// | | | 362*d5c09012SAndroid Build Coastguard Worker// | +--v---+ | 363*d5c09012SAndroid Build Coastguard Worker// +-------->FAILED<---------+ 364*d5c09012SAndroid Build Coastguard Worker// +------+ 365*d5c09012SAndroid Build Coastguard Worker// ``` 366*d5c09012SAndroid Build Coastguard Worker// 367*d5c09012SAndroid Build Coastguard Worker// The sequence may move to FAILED from any state. Additionally, a processed 368*d5c09012SAndroid Build Coastguard Worker// sequence may be re-processed at any time. 369*d5c09012SAndroid Build Coastguard Workerenum ProcessingState { 370*d5c09012SAndroid Build Coastguard Worker // The state is unspecified, this is the default value. 371*d5c09012SAndroid Build Coastguard Worker PROCESSING_STATE_UNSPECIFIED = 0; 372*d5c09012SAndroid Build Coastguard Worker 373*d5c09012SAndroid Build Coastguard Worker // The sequence has not yet started processing. 374*d5c09012SAndroid Build Coastguard Worker PENDING = 1; 375*d5c09012SAndroid Build Coastguard Worker 376*d5c09012SAndroid Build Coastguard Worker // The sequence is currently in processing. 377*d5c09012SAndroid Build Coastguard Worker PROCESSING = 2; 378*d5c09012SAndroid Build Coastguard Worker 379*d5c09012SAndroid Build Coastguard Worker // The sequence has finished processing including refining position. 380*d5c09012SAndroid Build Coastguard Worker PROCESSED = 3; 381*d5c09012SAndroid Build Coastguard Worker 382*d5c09012SAndroid Build Coastguard Worker // The sequence failed processing. See FailureReason for more details. 383*d5c09012SAndroid Build Coastguard Worker FAILED = 4; 384*d5c09012SAndroid Build Coastguard Worker} 385*d5c09012SAndroid Build Coastguard Worker 386*d5c09012SAndroid Build Coastguard Worker// The possible reasons this [PhotoSequence] 387*d5c09012SAndroid Build Coastguard Worker// [google.streetview.publish.v1.PhotoSequence] failed to process. 388*d5c09012SAndroid Build Coastguard Workerenum ProcessingFailureReason { 389*d5c09012SAndroid Build Coastguard Worker // The failure reason is unspecified, this is the default value. 390*d5c09012SAndroid Build Coastguard Worker PROCESSING_FAILURE_REASON_UNSPECIFIED = 0; 391*d5c09012SAndroid Build Coastguard Worker 392*d5c09012SAndroid Build Coastguard Worker // Video frame's resolution is too small. 393*d5c09012SAndroid Build Coastguard Worker LOW_RESOLUTION = 1; 394*d5c09012SAndroid Build Coastguard Worker 395*d5c09012SAndroid Build Coastguard Worker // This video has been uploaded before. 396*d5c09012SAndroid Build Coastguard Worker DUPLICATE = 2; 397*d5c09012SAndroid Build Coastguard Worker 398*d5c09012SAndroid Build Coastguard Worker // Too few GPS points. 399*d5c09012SAndroid Build Coastguard Worker INSUFFICIENT_GPS = 3; 400*d5c09012SAndroid Build Coastguard Worker 401*d5c09012SAndroid Build Coastguard Worker // No overlap between the time frame of GPS track and the time frame of 402*d5c09012SAndroid Build Coastguard Worker // video. 403*d5c09012SAndroid Build Coastguard Worker NO_OVERLAP_GPS = 4; 404*d5c09012SAndroid Build Coastguard Worker 405*d5c09012SAndroid Build Coastguard Worker // GPS is invalid (e.x. all GPS points are at (0,0)) 406*d5c09012SAndroid Build Coastguard Worker INVALID_GPS = 5; 407*d5c09012SAndroid Build Coastguard Worker 408*d5c09012SAndroid Build Coastguard Worker // The sequence of photos could not be accurately located in the world. 409*d5c09012SAndroid Build Coastguard Worker FAILED_TO_REFINE_POSITIONS = 6; 410*d5c09012SAndroid Build Coastguard Worker 411*d5c09012SAndroid Build Coastguard Worker // The sequence was taken down for policy reasons. 412*d5c09012SAndroid Build Coastguard Worker TAKEDOWN = 7; 413*d5c09012SAndroid Build Coastguard Worker 414*d5c09012SAndroid Build Coastguard Worker // The video file was corrupt or could not be decoded. 415*d5c09012SAndroid Build Coastguard Worker CORRUPT_VIDEO = 8; 416*d5c09012SAndroid Build Coastguard Worker 417*d5c09012SAndroid Build Coastguard Worker // A permanent failure in the underlying system occurred. 418*d5c09012SAndroid Build Coastguard Worker INTERNAL = 9; 419*d5c09012SAndroid Build Coastguard Worker 420*d5c09012SAndroid Build Coastguard Worker // The video format is invalid or unsupported. 421*d5c09012SAndroid Build Coastguard Worker INVALID_VIDEO_FORMAT = 10; 422*d5c09012SAndroid Build Coastguard Worker 423*d5c09012SAndroid Build Coastguard Worker // Invalid image aspect ratio found. 424*d5c09012SAndroid Build Coastguard Worker INVALID_VIDEO_DIMENSIONS = 11; 425*d5c09012SAndroid Build Coastguard Worker 426*d5c09012SAndroid Build Coastguard Worker // Invalid capture time. Timestamps were from the future. 427*d5c09012SAndroid Build Coastguard Worker INVALID_CAPTURE_TIME = 12; 428*d5c09012SAndroid Build Coastguard Worker 429*d5c09012SAndroid Build Coastguard Worker // GPS data contains a gap greater than 5 seconds in duration. 430*d5c09012SAndroid Build Coastguard Worker GPS_DATA_GAP = 13; 431*d5c09012SAndroid Build Coastguard Worker 432*d5c09012SAndroid Build Coastguard Worker // GPS data is too erratic to be processed. 433*d5c09012SAndroid Build Coastguard Worker JUMPY_GPS = 14; 434*d5c09012SAndroid Build Coastguard Worker 435*d5c09012SAndroid Build Coastguard Worker // IMU (Accelerometer, Gyroscope, etc.) data are not valid. They may be 436*d5c09012SAndroid Build Coastguard Worker // missing required fields (x, y, z or time), may not be formatted correctly, 437*d5c09012SAndroid Build Coastguard Worker // or any other issue that prevents our systems from parsing it. 438*d5c09012SAndroid Build Coastguard Worker INVALID_IMU = 15; 439*d5c09012SAndroid Build Coastguard Worker 440*d5c09012SAndroid Build Coastguard Worker // Too few IMU points. 441*d5c09012SAndroid Build Coastguard Worker INSUFFICIENT_IMU = 21; 442*d5c09012SAndroid Build Coastguard Worker 443*d5c09012SAndroid Build Coastguard Worker // Insufficient overlap in the time frame between GPS, IMU, and other time 444*d5c09012SAndroid Build Coastguard Worker // series data. 445*d5c09012SAndroid Build Coastguard Worker INSUFFICIENT_OVERLAP_TIME_SERIES = 22; 446*d5c09012SAndroid Build Coastguard Worker 447*d5c09012SAndroid Build Coastguard Worker // IMU (Accelerometer, Gyroscope, etc.) data contain gaps greater than 0.1 448*d5c09012SAndroid Build Coastguard Worker // seconds in duration. 449*d5c09012SAndroid Build Coastguard Worker IMU_DATA_GAP = 16; 450*d5c09012SAndroid Build Coastguard Worker 451*d5c09012SAndroid Build Coastguard Worker // The camera is not supported. 452*d5c09012SAndroid Build Coastguard Worker UNSUPPORTED_CAMERA = 17; 453*d5c09012SAndroid Build Coastguard Worker 454*d5c09012SAndroid Build Coastguard Worker // Some frames were indoors, which is unsupported. 455*d5c09012SAndroid Build Coastguard Worker NOT_OUTDOORS = 18; 456*d5c09012SAndroid Build Coastguard Worker 457*d5c09012SAndroid Build Coastguard Worker // Not enough video frames. 458*d5c09012SAndroid Build Coastguard Worker INSUFFICIENT_VIDEO_FRAMES = 19; 459*d5c09012SAndroid Build Coastguard Worker 460*d5c09012SAndroid Build Coastguard Worker // Not enough moving data. 461*d5c09012SAndroid Build Coastguard Worker INSUFFICIENT_MOVEMENT = 20; 462*d5c09012SAndroid Build Coastguard Worker 463*d5c09012SAndroid Build Coastguard Worker // Mast is down. 464*d5c09012SAndroid Build Coastguard Worker MAST_DOWN = 27; 465*d5c09012SAndroid Build Coastguard Worker 466*d5c09012SAndroid Build Coastguard Worker // Camera is covered. 467*d5c09012SAndroid Build Coastguard Worker CAMERA_COVERED = 28; 468*d5c09012SAndroid Build Coastguard Worker} 469*d5c09012SAndroid Build Coastguard Worker 470*d5c09012SAndroid Build Coastguard Worker// Additional details to accompany the ProcessingFailureReason enum. 471*d5c09012SAndroid Build Coastguard Worker// This message is always expected to be used in conjunction with 472*d5c09012SAndroid Build Coastguard Worker// ProcessingFailureReason, and the oneof value set in this message should match 473*d5c09012SAndroid Build Coastguard Worker// the FailureReason. 474*d5c09012SAndroid Build Coastguard Workermessage ProcessingFailureDetails { 475*d5c09012SAndroid Build Coastguard Worker // Only one set of details will be set, and must match the corresponding enum 476*d5c09012SAndroid Build Coastguard Worker // in ProcessingFailureReason. 477*d5c09012SAndroid Build Coastguard Worker oneof details { 478*d5c09012SAndroid Build Coastguard Worker // See InsufficientGpsFailureDetails. 479*d5c09012SAndroid Build Coastguard Worker InsufficientGpsFailureDetails insufficient_gps_details = 1; 480*d5c09012SAndroid Build Coastguard Worker 481*d5c09012SAndroid Build Coastguard Worker // See GpsDataGapFailureDetails. 482*d5c09012SAndroid Build Coastguard Worker GpsDataGapFailureDetails gps_data_gap_details = 2; 483*d5c09012SAndroid Build Coastguard Worker 484*d5c09012SAndroid Build Coastguard Worker // See ImuDataGapFailureDetails. 485*d5c09012SAndroid Build Coastguard Worker ImuDataGapFailureDetails imu_data_gap_details = 3; 486*d5c09012SAndroid Build Coastguard Worker 487*d5c09012SAndroid Build Coastguard Worker // See NotOutdoorsFailureDetails. 488*d5c09012SAndroid Build Coastguard Worker NotOutdoorsFailureDetails not_outdoors_details = 4; 489*d5c09012SAndroid Build Coastguard Worker 490*d5c09012SAndroid Build Coastguard Worker // See NoOverlapGpsFailureDetails. 491*d5c09012SAndroid Build Coastguard Worker NoOverlapGpsFailureDetails no_overlap_gps_details = 5; 492*d5c09012SAndroid Build Coastguard Worker } 493*d5c09012SAndroid Build Coastguard Worker} 494*d5c09012SAndroid Build Coastguard Worker 495*d5c09012SAndroid Build Coastguard Worker// Details related to ProcessingFailureReason#INSUFFICIENT_GPS. 496*d5c09012SAndroid Build Coastguard Workermessage InsufficientGpsFailureDetails { 497*d5c09012SAndroid Build Coastguard Worker // The number of GPS points that were found in the video. 498*d5c09012SAndroid Build Coastguard Worker optional int32 gps_points_found = 1; 499*d5c09012SAndroid Build Coastguard Worker} 500*d5c09012SAndroid Build Coastguard Worker 501*d5c09012SAndroid Build Coastguard Worker// Details related to ProcessingFailureReason#GPS_DATA_GAP. 502*d5c09012SAndroid Build Coastguard Worker// If there are multiple GPS data gaps, only the one with the largest duration 503*d5c09012SAndroid Build Coastguard Worker// is reported here. 504*d5c09012SAndroid Build Coastguard Workermessage GpsDataGapFailureDetails { 505*d5c09012SAndroid Build Coastguard Worker // The duration of the gap in GPS data that was found. 506*d5c09012SAndroid Build Coastguard Worker optional google.protobuf.Duration gap_duration = 1; 507*d5c09012SAndroid Build Coastguard Worker 508*d5c09012SAndroid Build Coastguard Worker // Relative time (from the start of the video stream) when the gap started. 509*d5c09012SAndroid Build Coastguard Worker optional google.protobuf.Duration gap_start_time = 2; 510*d5c09012SAndroid Build Coastguard Worker} 511*d5c09012SAndroid Build Coastguard Worker 512*d5c09012SAndroid Build Coastguard Worker// Details related to ProcessingFailureReason#IMU_DATA_GAP. 513*d5c09012SAndroid Build Coastguard Worker// If there are multiple IMU data gaps, only the one with the largest duration 514*d5c09012SAndroid Build Coastguard Worker// is reported here. 515*d5c09012SAndroid Build Coastguard Workermessage ImuDataGapFailureDetails { 516*d5c09012SAndroid Build Coastguard Worker // The duration of the gap in IMU data that was found. 517*d5c09012SAndroid Build Coastguard Worker optional google.protobuf.Duration gap_duration = 1; 518*d5c09012SAndroid Build Coastguard Worker 519*d5c09012SAndroid Build Coastguard Worker // Relative time (from the start of the video stream) when the gap started. 520*d5c09012SAndroid Build Coastguard Worker optional google.protobuf.Duration gap_start_time = 2; 521*d5c09012SAndroid Build Coastguard Worker} 522*d5c09012SAndroid Build Coastguard Worker 523*d5c09012SAndroid Build Coastguard Worker// Details related to ProcessingFailureReason#NOT_OUTDOORS. 524*d5c09012SAndroid Build Coastguard Worker// If there are multiple indoor frames found, the first frame is recorded here. 525*d5c09012SAndroid Build Coastguard Workermessage NotOutdoorsFailureDetails { 526*d5c09012SAndroid Build Coastguard Worker // Relative time (from the start of the video stream) when an indoor frame was 527*d5c09012SAndroid Build Coastguard Worker // found. 528*d5c09012SAndroid Build Coastguard Worker optional google.protobuf.Duration start_time = 1; 529*d5c09012SAndroid Build Coastguard Worker} 530*d5c09012SAndroid Build Coastguard Worker 531*d5c09012SAndroid Build Coastguard Worker// Details related to PhotoSequenceProcessingFailureReason#NO_OVERLAP_GPS. 532*d5c09012SAndroid Build Coastguard Workermessage NoOverlapGpsFailureDetails { 533*d5c09012SAndroid Build Coastguard Worker // Time of first recorded GPS point. 534*d5c09012SAndroid Build Coastguard Worker optional google.protobuf.Timestamp gps_start_time = 1; 535*d5c09012SAndroid Build Coastguard Worker 536*d5c09012SAndroid Build Coastguard Worker // Time of last recorded GPS point. 537*d5c09012SAndroid Build Coastguard Worker optional google.protobuf.Timestamp gps_end_time = 2; 538*d5c09012SAndroid Build Coastguard Worker 539*d5c09012SAndroid Build Coastguard Worker // Start time of video. 540*d5c09012SAndroid Build Coastguard Worker optional google.protobuf.Timestamp video_start_time = 3; 541*d5c09012SAndroid Build Coastguard Worker 542*d5c09012SAndroid Build Coastguard Worker // End time of video. 543*d5c09012SAndroid Build Coastguard Worker optional google.protobuf.Timestamp video_end_time = 4; 544*d5c09012SAndroid Build Coastguard Worker} 545