diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..9ed7947 --- /dev/null +++ b/404.html @@ -0,0 +1,616 @@ + + + + + + + + + + + + + + + + + + Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..a940d07 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +locationhistoryformat.com \ No newline at end of file diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000..1cf13b9 Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/javascripts/bundle.b425cdc4.min.js b/assets/javascripts/bundle.b425cdc4.min.js new file mode 100644 index 0000000..201e523 --- /dev/null +++ b/assets/javascripts/bundle.b425cdc4.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Ci=Object.create;var gr=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var ki=Object.getOwnPropertyNames,Ht=Object.getOwnPropertySymbols,Hi=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,nn=Object.prototype.propertyIsEnumerable;var rn=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))yr.call(t,r)&&rn(e,r,t[r]);if(Ht)for(var r of Ht(t))nn.call(t,r)&&rn(e,r,t[r]);return e};var on=(e,t)=>{var r={};for(var n in e)yr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ht)for(var n of Ht(e))t.indexOf(n)<0&&nn.call(e,n)&&(r[n]=e[n]);return r};var Pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Pi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ki(t))!yr.call(e,o)&&o!==r&&gr(e,o,{get:()=>t[o],enumerable:!(n=Ri(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Ci(Hi(e)):{},Pi(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var sn=Pt((xr,an)=>{(function(e,t){typeof xr=="object"&&typeof an!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(xr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(O){return!!(O&&O!==document&&O.nodeName!=="HTML"&&O.nodeName!=="BODY"&&"classList"in O&&"contains"in O.classList)}function f(O){var Qe=O.type,De=O.tagName;return!!(De==="INPUT"&&s[Qe]&&!O.readOnly||De==="TEXTAREA"&&!O.readOnly||O.isContentEditable)}function c(O){O.classList.contains("focus-visible")||(O.classList.add("focus-visible"),O.setAttribute("data-focus-visible-added",""))}function u(O){O.hasAttribute("data-focus-visible-added")&&(O.classList.remove("focus-visible"),O.removeAttribute("data-focus-visible-added"))}function p(O){O.metaKey||O.altKey||O.ctrlKey||(a(r.activeElement)&&c(r.activeElement),n=!0)}function m(O){n=!1}function d(O){a(O.target)&&(n||f(O.target))&&c(O.target)}function h(O){a(O.target)&&(O.target.classList.contains("focus-visible")||O.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(O.target))}function v(O){document.visibilityState==="hidden"&&(o&&(n=!0),Y())}function Y(){document.addEventListener("mousemove",N),document.addEventListener("mousedown",N),document.addEventListener("mouseup",N),document.addEventListener("pointermove",N),document.addEventListener("pointerdown",N),document.addEventListener("pointerup",N),document.addEventListener("touchmove",N),document.addEventListener("touchstart",N),document.addEventListener("touchend",N)}function B(){document.removeEventListener("mousemove",N),document.removeEventListener("mousedown",N),document.removeEventListener("mouseup",N),document.removeEventListener("pointermove",N),document.removeEventListener("pointerdown",N),document.removeEventListener("pointerup",N),document.removeEventListener("touchmove",N),document.removeEventListener("touchstart",N),document.removeEventListener("touchend",N)}function N(O){O.target.nodeName&&O.target.nodeName.toLowerCase()==="html"||(n=!1,B())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),Y(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var cn=Pt(Er=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(c){return!1}},r=t(),n=function(c){var u={next:function(){var p=c.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(c){return encodeURIComponent(c).replace(/%20/g,"+")},i=function(c){return decodeURIComponent(String(c).replace(/\+/g," "))},s=function(){var c=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof c){var d=this;p.forEach(function(B,N){d.append(N,B)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),c._entries&&(c._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(f,c){typeof f!="string"&&(f=String(f)),c&&typeof c!="string"&&(c=String(c));var u=document,p;if(c&&(e.location===void 0||c!==e.location.href)){c=c.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=c,u.head.appendChild(p);try{if(p.href.indexOf(c)!==0)throw new Error(p.href)}catch(O){throw new Error("URL unable to set base "+c+" due to "+O)}}var m=u.createElement("a");m.href=f,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=f,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!c)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,Y=!0,B=this;["append","delete","set"].forEach(function(O){var Qe=h[O];h[O]=function(){Qe.apply(h,arguments),v&&(Y=!1,B.search=h.toString(),Y=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var N=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==N&&(N=this.search,Y&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},s=i.prototype,a=function(f){Object.defineProperty(s,f,{get:function(){return this._anchorElement[f]},set:function(c){this._anchorElement[f]=c},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(f){a(f)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(f){this._anchorElement.search=f,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var f=this;return function(){return f.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(f){this._anchorElement.href=f,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(f){this._anchorElement.pathname=f},enumerable:!0},origin:{get:function(){var f={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],c=this._anchorElement.port!=f&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(c?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(f){},enumerable:!0},username:{get:function(){return""},set:function(f){},enumerable:!0}}),i.createObjectURL=function(f){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(f){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er)});var qr=Pt((Mt,Nr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Mt=="object"&&typeof Nr=="object"?Nr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mt=="object"?Mt.ClipboardJS=r():t.ClipboardJS=r()})(Mt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return Ai}});var s=i(279),a=i.n(s),f=i(370),c=i.n(f),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(T){return!1}}var d=function(T){var E=p()(T);return m("cut"),E},h=d;function v(j){var T=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[T?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=j,E}var Y=function(T,E){var H=v(T);E.container.appendChild(H);var I=p()(H);return m("copy"),H.remove(),I},B=function(T){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof T=="string"?H=Y(T,E):T instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(T==null?void 0:T.type)?H=Y(T.value,E):(H=p()(T),m("copy")),H},N=B;function O(j){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?O=function(E){return typeof E}:O=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},O(j)}var Qe=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=T.action,H=E===void 0?"copy":E,I=T.container,q=T.target,Me=T.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&O(q)==="object"&&q.nodeType===1){if(H==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return N(Me,{container:I});if(q)return H==="cut"?h(q):N(q,{container:I})},De=Qe;function $e(j){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$e=function(E){return typeof E}:$e=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},$e(j)}function Ei(j,T){if(!(j instanceof T))throw new TypeError("Cannot call a class as a function")}function tn(j,T){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof I.action=="function"?I.action:this.defaultAction,this.target=typeof I.target=="function"?I.target:this.defaultTarget,this.text=typeof I.text=="function"?I.text:this.defaultText,this.container=$e(I.container)==="object"?I.container:document.body}},{key:"listenClick",value:function(I){var q=this;this.listener=c()(I,"click",function(Me){return q.onClick(Me)})}},{key:"onClick",value:function(I){var q=I.delegateTarget||I.currentTarget,Me=this.action(q)||"copy",kt=De({action:Me,container:this.container,target:this.target(q),text:this.text(q)});this.emit(kt?"success":"error",{action:Me,text:kt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(I){return vr("action",I)}},{key:"defaultTarget",value:function(I){var q=vr("target",I);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(I){return vr("text",I)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(I){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return N(I,q)}},{key:"cut",value:function(I){return h(I)}},{key:"isSupported",value:function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof I=="string"?[I]:I,Me=!!document.queryCommandSupported;return q.forEach(function(kt){Me=Me&&!!document.queryCommandSupported(kt)}),Me}}]),E}(a()),Ai=Li},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,f){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(f))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,m,d,h){var v=c.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function f(u,p,m,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof m=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return a(v,p,m,d,h)}))}function c(u,p,m,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=f},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function f(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(m))return c(m,d,h);if(s.nodeList(m))return u(m,d,h);if(s.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return a(document.body,m,d,h)}n.exports=f},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var f=window.getSelection(),c=document.createRange();c.selectNodeContents(i),f.removeAllRanges(),f.addRange(c),s=f.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var f=this.e||(this.e={});return(f[i]||(f[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var f=this;function c(){f.off(i,c),s.apply(a,arguments)}return c._=s,this.on(i,c,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),f=0,c=a.length;for(f;f{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var rs=/["'&<>]/;Yo.exports=ns;function ns(e){var t=""+e,r=rs.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],s;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||a(m,d)})})}function a(m,d){try{f(n[m](d))}catch(h){p(i[0][3],h)}}function f(m){m.value instanceof et?Promise.resolve(m.value.v).then(c,u):p(i[0][2],m)}function c(m){a("next",m)}function u(m){a("throw",m)}function p(m,d){m(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function pn(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ee=="function"?Ee(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(s){return new Promise(function(a,f){s=e[i](s),o(a,f,s.done,s.value)})}}function o(i,s,a,f){Promise.resolve(f).then(function(c){i({value:c,done:a})},s)}}function C(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var It=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Ee(s),f=a.next();!f.done;f=a.next()){var c=f.value;c.remove(this)}}catch(v){t={error:v}}finally{try{f&&!f.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(C(u))try{u()}catch(v){i=v instanceof It?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=Ee(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{ln(h)}catch(v){i=i!=null?i:[],v instanceof It?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new It(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)ln(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Sr=Ie.EMPTY;function jt(e){return e instanceof Ie||e&&"closed"in e&&C(e.remove)&&C(e.add)&&C(e.unsubscribe)}function ln(e){C(e)?e():e.unsubscribe()}var Le={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Sr:(this.currentObservers=null,a.push(r),new Ie(function(){n.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new xn(r,n)},t}(F);var xn=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Sr},t}(x);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,f=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+f)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),f=0;f0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Wt);var Sn=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Dt);var Oe=new Sn(wn);var M=new F(function(e){return e.complete()});function Vt(e){return e&&C(e.schedule)}function Cr(e){return e[e.length-1]}function Ye(e){return C(Cr(e))?e.pop():void 0}function Te(e){return Vt(Cr(e))?e.pop():void 0}function zt(e,t){return typeof Cr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Nt(e){return C(e==null?void 0:e.then)}function qt(e){return C(e[ft])}function Kt(e){return Symbol.asyncIterator&&C(e==null?void 0:e[Symbol.asyncIterator])}function Qt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function zi(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Yt=zi();function Gt(e){return C(e==null?void 0:e[Yt])}function Bt(e){return un(this,arguments,function(){var r,n,o,i;return $t(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,et(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,et(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,et(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Jt(e){return C(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(qt(e))return Ni(e);if(pt(e))return qi(e);if(Nt(e))return Ki(e);if(Kt(e))return On(e);if(Gt(e))return Qi(e);if(Jt(e))return Yi(e)}throw Qt(e)}function Ni(e){return new F(function(t){var r=e[ft]();if(C(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function qi(e){return new F(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?A(function(o,i){return e(o,i,n)}):de,ge(1),r?He(t):Dn(function(){return new Zt}))}}function Vn(){for(var e=[],t=0;t=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new x}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,f=a===void 0?!0:a;return function(c){var u,p,m,d=0,h=!1,v=!1,Y=function(){p==null||p.unsubscribe(),p=void 0},B=function(){Y(),u=m=void 0,h=v=!1},N=function(){var O=u;B(),O==null||O.unsubscribe()};return y(function(O,Qe){d++,!v&&!h&&Y();var De=m=m!=null?m:r();Qe.add(function(){d--,d===0&&!v&&!h&&(p=$r(N,f))}),De.subscribe(Qe),!u&&d>0&&(u=new rt({next:function($e){return De.next($e)},error:function($e){v=!0,Y(),p=$r(B,o,$e),De.error($e)},complete:function(){h=!0,Y(),p=$r(B,s),De.complete()}}),U(O).subscribe(u))})(c)}}function $r(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function z(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function tr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),V(e===_e()),J())}function Xe(e){return{x:e.offsetLeft,y:e.offsetTop}}function Kn(e){return L(b(window,"load"),b(window,"resize")).pipe(Ce(0,Oe),l(()=>Xe(e)),V(Xe(e)))}function rr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,Oe),l(()=>rr(e)),V(rr(e)))}var Yn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Wr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),va?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Wr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=ba.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Gn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Jn=typeof WeakMap!="undefined"?new WeakMap:new Yn,Xn=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ga.getInstance(),n=new La(t,r,this);Jn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Xn.prototype[e]=function(){var t;return(t=Jn.get(this))[e].apply(t,arguments)}});var Aa=function(){return typeof nr.ResizeObserver!="undefined"?nr.ResizeObserver:Xn}(),Zn=Aa;var eo=new x,Ca=$(()=>k(new Zn(e=>{for(let t of e)eo.next(t)}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),X(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ye(e){return Ca.pipe(S(t=>t.observe(e)),g(t=>eo.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(()=>he(e)))),V(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ar(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var to=new x,Ra=$(()=>k(new IntersectionObserver(e=>{for(let t of e)to.next(t)},{threshold:0}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),X(1));function sr(e){return Ra.pipe(S(t=>t.observe(e)),g(t=>to.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function ro(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),J())}var cr={drawer:z("[data-md-toggle=drawer]"),search:z("[data-md-toggle=search]")};function no(e){return cr[e].checked}function Ke(e,t){cr[e].checked!==t&&cr[e].click()}function Ue(e){let t=cr[e];return b(t,"change").pipe(l(()=>t.checked),V(t.checked))}function ka(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ha(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(V(!1))}function oo(){let e=b(window,"keydown").pipe(A(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:no("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),A(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!ka(n,r)}return!0}),pe());return Ha().pipe(g(t=>t?M:e))}function le(){return new URL(location.href)}function ot(e){location.href=e.href}function io(){return new x}function ao(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)ao(e,r)}function _(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)ao(n,o);return n}function fr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function so(){return location.hash.substring(1)}function Dr(e){let t=_("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Pa(e){return L(b(window,"hashchange"),e).pipe(l(so),V(so()),A(t=>t.length>0),X(1))}function co(e){return Pa(e).pipe(l(t=>ce(`[id="${t}"]`)),A(t=>typeof t!="undefined"))}function Vr(e){let t=matchMedia(e);return er(r=>t.addListener(()=>r(t.matches))).pipe(V(t.matches))}function fo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(V(e.matches))}function zr(e,t){return e.pipe(g(r=>r?t():M))}function ur(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(fe(()=>M),g(r=>r.status!==200?Ot(()=>new Error(r.statusText)):k(r)))}function We(e,t){return ur(e,t).pipe(g(r=>r.json()),X(1))}function uo(e,t){let r=new DOMParser;return ur(e,t).pipe(g(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),X(1))}function pr(e){let t=_("script",{src:e});return $(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(g(()=>Ot(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),R(()=>document.head.removeChild(t)),ge(1))))}function po(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function lo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(po),V(po()))}function mo(){return{width:innerWidth,height:innerHeight}}function ho(){return b(window,"resize",{passive:!0}).pipe(l(mo),V(mo()))}function bo(){return G([lo(),ho()]).pipe(l(([e,t])=>({offset:e,size:t})),X(1))}function lr(e,{viewport$:t,header$:r}){let n=t.pipe(ee("size")),o=G([n,r]).pipe(l(()=>Xe(e)));return G([r,t,o]).pipe(l(([{height:i},{offset:s,size:a},{x:f,y:c}])=>({offset:{x:s.x-f,y:s.y-c+i},size:a})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(s=>{let a=document.createElement("script");a.src=i,a.onload=s,document.body.appendChild(a)})),Promise.resolve())}var r=class extends EventTarget{constructor(n){super(),this.url=n,this.m=i=>{i.source===this.w&&(this.dispatchEvent(new MessageEvent("message",{data:i.data})),this.onmessage&&this.onmessage(i))},this.e=(i,s,a,f,c)=>{if(s===`${this.url}`){let u=new ErrorEvent("error",{message:i,filename:s,lineno:a,colno:f,error:c});this.dispatchEvent(u),this.onerror&&this.onerror(u)}};let o=document.createElement("iframe");o.hidden=!0,document.body.appendChild(this.iframe=o),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + +

Contributing

+

Open collaboration is fundamental for this project, a single person can't encounter and document all edge cases of the files. +Additionally, Google periodically updates the format and structure of the files without prior warning, +so updates to the format definitions will also be needed periodically but might be easy to miss.

+

All source code, documentation files, and schemas can be found in the project's GitHub repository. +If you notice incorrect, out-of-date, or missing information, you can help by creating a new issue or creating a pull request.

+

Note that Google's Location History data presents unique challenges that make spotting, formalizing, and accurately keeping track of the changes to the format significantly difficult. +In particular, there is no known versioning system for the file format (or other indirect versioning clues), +and changes to the format of the extracted files are usually not rolled out at the same time for all Google users.

+

Improving the JSON Schemas

+

All JSON schemas can be found in the schemas/ folder of the repository. +Pull requests are welcome. +Ideally contributors should be familiar with the structure of JSON Schema files.

+

All documented objects and properties should at least have the following fields:

+
    +
  • +

    title: +In most cases it is just a "humanized" version of the key.

    +
  • +
  • +

    type: +One of "object", "array", "string", "number", "boolean", "null".

    +
  • +
  • +

    description: +Can make use of common basic Markdown syntax. +It can be an empty string if no information is known (in which case a helpWanted field should be present).

    +
  • +
+

In addition to other basic JSON Schema fields, the following non-standard fields are also supported:

+
    +
  • +

    helpWanted: +Short description to inform that the information provided for this object/property is incomplete and help from the community is welcome. +Example: "The meaning of this field is uncertain. Are other values possible?"

    +
  • +
  • +

    added: +Approximate date that this object/property was added to the format, if known. +Example: "around January 2022".

    +
  • +
  • +

    removed: +Approximate date that this object/property was removed from the format, if known. +Example: "around January 2022".

    +
  • +
  • +

    replacedBy: +For objects/properties that have been removed, the URI-reference of the new object/property that replaced it, if it applies. +Example: "#/$defs/locationRecord/properties/timestamp"

    +
  • +
+

To convert the JSON Schema files to Markdown files (which are then used for the documentation site) +a custom Python script is used (see tools/jsonschema_to_md/).

+
+

Info

+

Not all standard JSON Schema language features are supported when building the site +(and it is not in the scope of this project to build a complete JSON Schema to Markdown generator). +If you miss some JSON Schema feature in the Markdown generator create a new issue or a pull request.

+
+

Improving the Guides

+

To improve the documentation guides provided in this site modify the Markdown files found in the docs/guides/ folder and submit a pull request. +Most common Markdown syntax is supported, plus additional syntax extensions provided by the Material for MkDocs theme.

+

Testing Locally

+

In order to set-up a local environment to preview and test changes to the site first clone the GitHub repository, then:

+

To install all requirements run:

+
pip install -r requirements.txt
+
+

To transform the JSON schemas in the schemas/ folder to Markdown files run:

+
make build
+
+
+

Info

+

The generated Markdown files are stored in the /docs/reference folder. +Note that these dynamically generated Markdown files should not be included in the repository.

+
+

To start a local web server and view the site run:

+
mkdocs serve
+
+ +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/css/extra.css b/css/extra.css new file mode 100644 index 0000000..39b85d1 --- /dev/null +++ b/css/extra.css @@ -0,0 +1,314 @@ +.small { + font-size: .65rem; +} + +.mt-0 { + margin-top: -14px; +} + +.bold { + font-weight: 700!important; +} + +.info-cell { + position: relative; + display: flex; + flex-direction: row; + align-items: center; + gap: 0; + padding: 0!important; +} + +.info-block { + width: 100%; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 0.75em; + padding: 0.9375em 1.25em; +} + +.info-icon { + color: #0008; + flex: 0 0 auto; + border: none; + box-shadow: none; + padding: 0.9375em 0 0.9375em 1.25em; +} + +.info-color { + width: 0.25rem; + flex: 0 0 auto; + background-color: var(--md-accent-fg-color); +} + +.mdx-added { + /* background-color: rgba(0,184,212,.1); */ + color: #00b8d4; + font-size: .65rem; + font-weight: 400; +} + +.mdx-removed { + /* background-color: rgba(0,184,212,.1); */ + color: #ff5252; + font-size: .65rem; + font-weight: 400; +} + +.mdx-help { + /* background-color: rgba(0,184,212,.1); */ + color: #64dd17; + font-size: .65rem; + font-weight: 400; +} + +.md-header--shadow, *[data-md-state=shadow] { + box-shadow: none!important; + /* box-shadow: 0 0 0.1rem rgb(0 0 0 / 10%), 0 0.1rem 0.1rem rgb(0 0 0 / 20%)!important; */ + border-bottom: 0.05rem solid rgba(0,0,0,.07); +} + +.md-grid { + max-width: 1200px; +} + +.md-search__form { + height: 1.4rem; +} + +.md-search__icon { + height: 1rem; + width: 1rem; +} + +.md-footer__inner { + /* hide prev. next. section in footer */ + display: none; +} + +.md-content { + margin-bottom: 64px; +} + +.md-typeset { + font-size: .7rem; +} + +.md-typeset h1 { + color: var(--md-typeset-color); + font-size: 1.2rem; + font-weight: 400; +} + +.md-typeset h2 { + font-size: 1rem; + font-weight: 400; +} + +.md-typeset h3 { + font-size: 0.9rem; + font-weight: 400; +} + +.md-typeset dd { + margin-top: 0.5em; +} + +.md-typeset :is(.admonition-title,summary) { + font-size: .64rem!important; + padding-bottom: 0.2rem!important; + padding-top: 0.2rem!important; + padding-left: 1.6rem!important; +} + +.md-typeset :is(.admonition-title,summary):before { + top: 0.425em!important; + height: .8rem!important; + left: 0.5rem!important; +} + +.md-typeset :is(.admonition-title,summary):after { + top: 0.45em!important; + height: .8rem!important; + right: 0.2rem!important; +} + + +.md-header__title { + font-size: .8rem; +} + +.md-header__source { + width: auto; +} + +.md-source__icon svg { + margin-top: 0.7rem; +} + +.md-source__repository { + width: 0; +} + +.md-footer__title { + font-size: .7rem; +} + +.md-footer__direction { + font-size: .7rem; +} + +.md-nav__title { + font-size: .7rem; +} + +.md-nav__item { + font-size: .65rem; +} + +.md-copyright { + font-size: .65rem; +} + +.md-search__input { + font-size: .65rem; +} + +.md-typeset blockquote { + color: inherit; +} + +.md-icon svg { + height: 1rem; + width: 1rem; +} + +.md-search__icon[for=__search], .md-search__options { + top: 0.2rem; + opacity: 0.8; +} + +table>thead>tr { + background-color: #e8eaed; +} + +table>thead>tr>th { + padding: .5em 1.25em!important; +} + +table td, table th { + min-width: 214px; + position: relative; +} + +.definitions+* table>tbody>tr td:first-child { + font-weight: 700; + background-color: #f1f3f4; +} + +.definitions+* table>tbody>tr td:first-child code { + background-color: unset; +} + +.definitions+* table td:not(:first-child), table th:not(:first-child) { + width: 100%; +} + +.definitions+* .md-typeset__table { + width: 100%; +} + +table .bold code { + background-color: unset!important; + font-weight: 700!important; + font-size: 0.62rem!important; + padding: 0!important; + word-break: break-word!important; +} + +table p { + padding: 0; +} + +table tbody tr:hover { + background-color: inherit!important; +} + +article img { + border: 1px solid #f0f0f0; + box-shadow: var(--md-shadow-z1); +} + + +/* sass +@include break-to-device(mobile) { + article img:not(.info-icon) { + margin: 0 px2rem(-16px); + max-width: calc(100% + 32px)!important; / ** not needed if we could style parent p ** / + box-shadow: none; +} */ +@media screen and (max-width: 719px) { + article img:not(.info-icon) { + margin: 0 -16px; + max-width: calc(100% + 32px)!important; /** not needed if we could style parent p **/ + box-shadow: none; + } +} + + +[dir=ltr] .md-typeset blockquote { + border-left: 3px solid var(--md-default-fg-color--lighter); + /* background-color: #fafafa; */ +} + +ic-folder, ic-file { + background-color: var(--md-code-bg-color); + border-radius: 0.1rem; + font-size: .85em; + padding: 0 0.1em; + word-break: break-word; + font-feature-settings: "kern"; + font-family: var(--md-code-font-family); +} + +ic-folder { + font-weight: 700; +} + +ic-folder::before, ic-file::before { + content: ""; + display: inline-block; + width: 14px; + height: 14px; + background-repeat: no-repeat; + background-size: 100% 100%; + transform: translate(2px, 2px); + margin-right: 6px; + opacity: 0.7; +} + +ic-folder::before { + background-image: url("../static/icons/folder.svg"); +} + +ic-file::before { + background-image: url("../static/icons/file.svg"); +} + +code ic-folder, code ic-file { + background-color: unset; + border-radius: unset; + padding: 0; + font-size: unset; +} + + +code ic-folder::before, code ic-file::before { + transform: translate(-2px, 2px); + margin-right: 4px; +} + +:target{ + background-color: #ff05!important; +} diff --git a/faq/index.html b/faq/index.html new file mode 100644 index 0000000..ec9d111 --- /dev/null +++ b/faq/index.html @@ -0,0 +1,698 @@ + + + + + + + + + + + + + + + + + + + + + + + + FAQ - Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + +

Frequently Asked Questions

+

Does Google retain Location History data forever?

+

You can configure a retention period in your Google account settings +by using the auto-delete setting. +With that said, even if you have disabled auto-deletion from the account settings it's been observed that after some undetermined amount of months Google might start dropping some attributes of your raw location history data. +Timestamps, latitudes and longitudes seem to always be conserved, but old values for other attributes such as altitude, speed, or heading, might be discarded without prior warning.

+

You should therefore not rely on Google Location History data to be always available. +If you want to conserve all historic data consider periodically making extractions and backing them up or look for other alternative services.

+ + +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/guides/downloading/index.html b/guides/downloading/index.html new file mode 100644 index 0000000..460629e --- /dev/null +++ b/guides/downloading/index.html @@ -0,0 +1,672 @@ + + + + + + + + + + + + + + + + + + + + + + + + Downloading the Data - Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + +

Downloading the Data

+

To download your Location History data go to the Google Takeout page while logged in with your Google account.

+

There, create a new export containing the Location History data +(note: make sure all other data sources are not selected).

+

Screenshot of the list of data sources in the Google Takeout page, with 'Location History' selected.

+

In most cases a one-off download is enough, so, in the next screen choose Export Once, +and leave the other options at their default value +(the resulting file will almost certainly not exceed 2 GB).

+

Screenshot of the extraction options panel in the Google Takeout page.

+

After a few minutes your data should be ready to download. +You will also receive an email informing you about this and providing a link.

+

Screenshot of the Google Takeout page with an extraction being ready to be downloaded.

+ +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/guides/general-structure/index.html b/guides/general-structure/index.html new file mode 100644 index 0000000..67e5c2d --- /dev/null +++ b/guides/general-structure/index.html @@ -0,0 +1,701 @@ + + + + + + + + + + + + + + + + + + + + + + + + General Structure - Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + +

General Structure

+

A typical Location History extraction from Google Takeout will look something like this:

+
Takeout/
+├─ archive_browser.html
+└─ Location History/
+   ├─ Records.json
+   ├─ Settings.json
+   ├─ Timeline Edits.json
+   └─ Semantic Location History/
+      │  ...
+      ├─ 2020/
+      │  ├─ 2020_JANUARY.json
+      │  ├─ 2020_FEBRUARY.json
+      │  │  ...
+      │  └─ 2020_DECEMBER.json
+      └─ 2021/
+         ├─ 2021_JANUARY.json
+         ├─ 2021_FEBRUARY.json
+         │  ...
+         └─ 2021_DECEMBER.json
+
+ +
+

Warning

+

Folder names might be different for Google accounts in different languages.

+
+

From here, the most relevant files and folders are:

+
+
Records.json
+
This file contains all available raw Location History data. +See Raw Location History Data for more information.
+
Settings.json
+
This file contains additional auxiliary metadata, like information about the devices used and account settings.
+
+

Timeline Edits.json

+
+
Semantic Location History
+
This folder contains higher-level information about the user's inferred activity and movements. +There is one subfolder for each year of data, and inside each subfolder one file for each month. +See Semantic Location History Data for more information.
+
+ +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/guides/raw-location/index.html b/guides/raw-location/index.html new file mode 100644 index 0000000..601920d --- /dev/null +++ b/guides/raw-location/index.html @@ -0,0 +1,692 @@ + + + + + + + + + + + + + + + + + + + + + + + + Raw Location History Data - Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + +

Raw Location History Data

+

Raw Location History data consists of a list of timestamped location records in chronological order for all the historical location data available and presumably at the most granular level possible.

+

This raw Location History data is found in the Records.json file (see General Structure). +Inside this file we can find a single flat locations array containing all of the location records:

+
Records.json
{
+  "locations" : [...]
+}
+
+

Each of the location records in this array has a very similar structure. +A location record might look like this:

+
Example location record
{
+    "timestamp": "2022-01-12T17:18:24.190Z",
+    "latitudeE7": 414216106,
+    "longitudeE7": 21684775,
+    "accuracy": 47,
+    "velocity": 0,
+    "heading": 188,
+    "altitude": 89,
+    "verticalAccuracy": 27,
+    "source": "WIFI",
+    "deviceTag": 1234567890,
+    "platformType": "ANDROID"
+}
+
+

From this, the most essential fields are:

+
    +
  • timestamp: Timestamp of the record as a string in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). + The suffixed Z indicates that the time is in the UTC time zone.
  • +
  • latitudeE7 and longitudeE7: Coordinates (latitude and longitude) of the location reported as integers. + The values need to be divided by 107 to be in the expected range.
  • +
+

For more information on the other possible fields see the full format definition.

+ +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/guides/semantic-location/index.html b/guides/semantic-location/index.html new file mode 100644 index 0000000..f25da46 --- /dev/null +++ b/guides/semantic-location/index.html @@ -0,0 +1,728 @@ + + + + + + + + + + + + + + + + + + + + + + + + Semantic Location History Data - Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + +

Semantic Location History Data

+

Semantic Location History data consists of more high-level and processed information compared to the raw Location History data. +This semantic information is the same information that can be seen in the Timeline pages on the Google Maps website and app. +Instead of individual raw location records, here the information is aggregated and summarized as a sequence of inferred (or manually set) +place visits and activity segments between place visits, all with a start time and an end time.

+

Example screenshot of the Timeline page on the Google Maps website.

+

This semantic data can be found inside the Semantic Location History folder. +The data is partitioned by year in different subfolders (named e.g. 2021, 2022...). +And for each year, the data is partitioned again by month in different JSON files (named e.g. 2022_JANUARY.json, 2022_FEBRUARY.json etc.).

+

Inside each semantic JSON file we can find a single flat timelineObjects array: +

Example semantic JSON file
{
+  "timelineObjects" : [...]
+}
+

+

Each of the timeline objects in this array is either an activitySegment or a placeVisit.

+

For more technical information see the full format definition.

+

Activity Segments

+ + +

Activity segments correspond to user activities involving changes in location, usually a journey from one place to another, +such as a walk, a car drive, a bus ride, or a flight.

+

Activity segments contain, among other fields, a start location, an end location, a duration, a distance, and an inferred (or manually set) +activity type (walking, running, driving, ...). +A list of all known activity types can be found in the Activity Type section.

+

Place Visits

+ + +

Place visits correspond to a user visit or stay at a place in a fixed location for a duration of time, +such as a stay at home, at work, a visit to a shopping mall, or to a restaurant.

+

Place visits contain, among other fields, a location and a duration.

+ +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..559c52c --- /dev/null +++ b/index.html @@ -0,0 +1,740 @@ + + + + + + + + + + + + + + + + + + + + + + Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + +

Location History Format

+

Collaborative format definition and documentation for Google Location History files.

+

Example of Location History data on a map.

+

Google (through its Takeout service) allows users to easily and conveniently download their Location History data. +Unfortunately Google has not provided proper official documentation for these files, so it can sometimes be difficult to navigate the structure of the files and understand the meaning of its fields. +This project attempts to fill that gap and do the job that Google should have done.

+

Goals

+

The goals of this project are two-fold:

+
    +
  • +

    Provide a standardized format definition describing the structure and contents of the files. +These format definitions are given in the form of JSON schemas, which can be used, for example, for automatic validation of JSON files and to aid in the development of parsers. +These files can be found in the schemas folder in the repository.

    +
  • +
  • +

    Provide accessible and user-friendly documentation for these formats. +The documentation is presented in a public site (locationhistoryformat.com) which provides basic guides and reference pages detailing the structure and fields of the files. +The reference pages are automatically built from the JSON schemas, presenting the information in a much more readable way.

    +
  • +
+

Disclaimer

+

This project is not affiliated, endorsed by, or in any way officially connected with Google. +Official support for Google products can be found at https://support.google.com/.

+

An effort is being made to keep the information provided by this project accurate and up-to-date, +but due to its nature, the information provided might be inaccurate and/or out-of-date. +Google has repeatedly made modifications to the format throughout the years.

+

Contributing

+

Contributions are welcome! +If you notice errors, out-of-date information, or missing information, you can help improve it. +See Contributing.

+

License

+

This project is licensed under the terms of the MIT License.

+ +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/reference/index.html b/reference/index.html new file mode 100644 index 0000000..45813e1 --- /dev/null +++ b/reference/index.html @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + Reference - Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+ +
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/reference/records/index.html b/reference/records/index.html new file mode 100644 index 0000000..ef560a4 --- /dev/null +++ b/reference/records/index.html @@ -0,0 +1,1237 @@ + + + + + + + + + + + + + + + + + + + + + + + + Records.json - Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + + + +

Records.json Format Definition

+
+

This page has been automatically generated from the schema Records.schema.json.

+
+

Records

+
+

The Records.json file in a Google Takeout Location History extraction. Contains raw Location History information from the user's account.

+
+
+ + + + + + + + + + + + + + +
PropertyDescription
locations​[]
Locations
array of: object  (Location Record)
List of all available location records, in chronological order.
+

Location Record

+
+

A specific location record. Contains the information obtained from a user's device at a specific moment in time and at a given location.

+
+
+Example +
{
+    "timestamp": "2022-01-12T17:18:24.190Z",
+    "latitudeE7": 414216106,
+    "longitudeE7": 21684775,
+    "accuracy": 20,
+    "velocity": 10,
+    "heading": 270,
+    "altitude": 150,
+    "verticalAccuracy": 10,
+    "source": "WIFI",
+    "deviceTag": 1234567890,
+    "platformType": "ANDROID"
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
accuracy
Accuracy
integerExample: 20
Approximate accuracy radius of the location measurement, in meters. A lower value means better precision.
activeWifiScan
Active Wi-Fi Scan
object  (Wi-Fi Scan)
Information about the access points found in a Wi-Fi scan done by the device and associated with this location record.
activity​[]
Activity
array of: object  (Activity Record)
Detected activity information at this location, as a list of activity records at slightly different timestamps but all associated with this location record.
altitude
Altitude
integerExample: 150
Altitude above the WGS84 reference ellipsoid, in meters.
batteryCharging
Battery Charging
booleanExample: true
Whether the device was charging its battery or not at the time of the record.
deviceDesignation
Device Designation
stringExample: "PRIMARY"
Common values found are: PRIMARY, UNKNOWN.
Help Wanted: The meaning of this field is uncertain. Are other values possible? Contributions to improve this are welcome.
deviceTag
Device Tag
integerExample: 1234567890
Integer identifier (specific to Location History) associated with the device that uploaded the location. Refer to deviceSettings in Settings.json for information about the device with this deviceTag.
deviceTimestamp
Device Timestamp
string  (date-time)
Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome.
formFactor
Form Factor
stringExample: "PHONE"
Form factor (device type) from which the location record originated.Common values are: PHONE, TABLET.
Help Wanted: What are other possible values? Contributions to improve this are welcome.
heading
Heading
integerExample: 270
Heading in degrees east of true north, from 0 to 359.
inferredLocation​[]
Inferred Location
array of: object  (Location Record)
Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome.
latitudeE7
Latitude
integerExample: 414216106
WGS84 Latitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).
locationMetadata​[]
Location Metadata
array of: object  (Location Metadata)
Additional location metadata. List of different Wi-Fi scans associated with this location record.
longitudeE7
Longitude
integerExample: 21684775
WGS84 Longitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).
osLevel
OS Level
integerExample: 28
The version of the device's operating system that provided this record. In Android devices, this corresponds to the API Level (e.g. 28 is Android 9 Pie).
placeId
Place ID
stringExample: "ChIJk_s92NyipBIRUMnDG8Kq2Js"
Google Maps Place ID of the location.
platformType
Platform Type
stringExample: "ANDROID"
Platform of the device that provided this record. Valid values are: ANDROID, IOS and UNKNOWN.
serverTimestamp
Server Timestamp
string  (date-time)
Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome.
source
Source
stringExample: "WIFI"
Source (technology) that provided the location information for this record.Common values are: WIFI, CELL, GPS, UNKNOWN (note: sometimes found in lowercase).
timestamp
Timestamp
string  (date-time)Example: "2022-01-12T17:18:24.190Z"
Added around January 2022.
Timestamp (as an ISO 8601 string) of the record.
timestampMs
Timestamp (Milliseconds)
stringExample: "1636403752674"
Removed around January 2022.Replaced by timestamp.
Timestamp of the record as a Unix timestamp in milliseconds.
velocity
Velocity
integerExample: 10
Measured velocity (ground speed) in meters per second.
verticalAccuracy
Vertical Accuracy
integerExample: 10
Calculated accuracy of the location's altitude measurement, in meters. A lower value means better precision.
+

Wi-Fi Scan

+
+

Information about the access points found in a Wi-Fi scan done by the device.

+
+
+Example +
{
+    "accessPoints": [
+        {
+            "mac": "220676014124647",
+            "strength": -34,
+            "frequencyMhz": 2437
+        },
+        {
+            "mac": "220676014124646",
+            "strength": -47,
+            "frequencyMhz": 5180
+        },
+        {
+            "mac": "93672086150526",
+            "strength": -48,
+            "frequencyMhz": 2412
+        },
+        {
+            "mac": "251425092175323",
+            "strength": -81,
+            "frequencyMhz": 2412
+        }
+    ]
+}
+
+
+
+ + + + + + + + + + + + + + +
PropertyDescription
accessPoints​[]
Access Points
array of: object  (Access Point)
List of Wi-Fi access points found with the scan.
+

Activity Record

+
+

Activity information for a location at a given timestamp.

+
+
+Example +
{
+    "activity": [
+        {
+            "type": "ON_FOOT",
+            "confidence": 89
+        },
+        {
+            "type": "WALKING",
+            "confidence": 84
+        },
+        {
+            "type": "ON_BICYCLE",
+            "confidence": 5
+        },
+        {
+            "type": "IN_VEHICLE",
+            "confidence": 2
+        },
+        {
+            "type": "STILL",
+            "confidence": 1
+        },
+        {
+            "type": "UNKNOWN",
+            "confidence": 1
+        }
+    ],
+    "timestamp": "2022-02-12T15:10:56.751Z"
+}
+
+
+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
activity​[]
Activity
array of: object  (Activity)
List of candidate detected activities with their associated confidence.
timestamp
Timestamp
string  (date-time)Example: "2022-01-12T17:18:24.190Z"
Timestamp (as an ISO 8601 string) of the activity.
+

Location Metadata

+
+

Information about a Wi-Fi scan done by the device at a given timestamp.

+
+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
timestamp
Timestamp
string  (date-time)Example: "2022-01-12T17:18:24.190Z"
Timestamp (as an ISO 8601 string) of the location metadata.
wifiScan
Wi-Fi Scan
object  (Wi-Fi Scan)
Information about the access points found in a Wi-Fi scan done by the device.
+

Access Point

+
+

Information about a specific wireless access point or router.

+
+
+Example +
{
+    "mac": "220676014124647",
+    "strength": -34,
+    "frequencyMhz": 2437
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
frequencyMhz
Frequency (MHz)
integerExample: 2437
Frequency of the signal (in MHz) that the access point is using.
isConnected
Is Connected
booleanExample: true
Whether the device that scanned the access point is connected to it.
mac
MAC Address
stringExample: "220676014124647"
MAC address of the access point as an integer. MAC addresses typically consist of 48 bits (6 bytes), so it is likely the value found here needs to be interpreted as a 6 byte integer (which when converted to its hexadecimal representation results in a more typical representation for MAC addresses).
strength
Strength
integerExample: -34
Strength of the signal in dBm (decibels per milliwatt) of the access point.
+

Activity

+
+

A detected activity with an associated confidence. Descriptions partially based on: https://developers.google.com/android/reference/com/google/android/gms/location/DetectedActivity

+
+
+Example +
{
+    "type": "ON_FOOT",
+    "confidence": 89
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
confidence
Confidence
integerExample: 100
Value from 0 to 100 indicating the likelihood that the user is performing this activity.The larger the value, the more consistent the data used to perform the classification is with the detected activity. Multiple activities may have high confidence values. For example, the ON_FOOT may have a confidence of 100 while the RUNNING activity may have a confidence of 95. The sum of the confidences of all detected activities for a classification does not have to be <= 100 since some activities are not mutually exclusive (for example, you can be walking while in a bus) and some activities are hierarchical (ON_FOOT is a generalization of WALKING and RUNNING).
extra
Extra Activity Information
Generic object containing extra information about an activity, in the form of a property with a type, a name, and a value. So far only the property with name vehicle_personal_confidence has been encountered.
type
Activity Type
string  (Activity Type)Example: "STILL"
Type of activity detected.
+

Extra Activity Information

+
+

Generic object containing extra information about an activity, in the form of a property with a type, a name, and a value. So far only the property with name vehicle_personal_confidence has been encountered.

+
+
+Example +
{
+    "type": "VALUE",
+    "name": "vehicle_personal_confidence",
+    "intVal": 100
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
intVal
Integer Value
integerExample: 100
Integer value of the property.
name
Name
stringExample: "vehicle_personal_confidence"
Name of the property.
type
Type
stringExample: "VALUE"
Type of the property.
+

Activity Type

+
+

Type of activity detected, such as WALKING or ON_BICYCLE. Some activity types are hierarchical, for example, WALKING is a subtype of ON_FOOT, and in particular, the following activity type hierarchy is known:

+
- EXITING_VEHICLE
+- IN_VEHICLE
+- ├─ IN_RAIL_VEHICLE
+- └─ IN_ROAD_VEHICLE
+-    ├─ IN_FOUR_WHEELER_VEHICLE
+-    │  ├─ IN_BUS
+-    │  └─ IN_CAR
+-    └─ IN_TWO_WHEELER_VEHICLE
+- ON_BICYCLE
+- ON_FOOT
+- ├─ RUNNING
+- └─ WALKING
+- STILL
+- TILTING
+- UNKNOWN
+
+

Descriptions partially based on: https://developers.google.com/android/reference/com/google/android/gms/location/DetectedActivity

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Activity TypeDescription
EXITING_VEHICLE
Exiting Vehicle
The device is exiting a vehicle.
IN_BUS
In Bus
The device is in a bus.
IN_CAR
In Car
The device is in a car.
IN_FOUR_WHEELER_VEHICLE
In Four-Wheeler Vehicle
The device is in a four-wheeler vehicle.
IN_RAIL_VEHICLE
In Rail Vehicle
The device is in a rail vehicle.
IN_ROAD_VEHICLE
In Road Vehicle
The device is in a road vehicle.
IN_TWO_WHEELER_VEHICLE
In Two-Wheeler Vehicle
The device is in a two-wheeler vehicle.
IN_VEHICLE
In Vehicle
The device is in a vehicle, such as a car.
ON_BICYCLE
On Bicycle
The device is on a bicycle.
ON_FOOT
On Foot
The device is on a user who is walking or running.
RUNNING
Running
The device is on a user who is running.
STILL
Still
The device is still (not moving).
TILTING
Tilting
The device angle relative to gravity changed significantly. This often occurs when a device is picked up from a desk or a user who is sitting stands up.
UNKNOWN
Unknown
Unable to detect the current activity.
WALKING
Walking
The device is on a user who is walking.
+ +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/reference/semantic/index.html b/reference/semantic/index.html new file mode 100644 index 0000000..4e0d43a --- /dev/null +++ b/reference/semantic/index.html @@ -0,0 +1,2286 @@ + + + + + + + + + + + + + + + + + + + + + + + + Semantic Location History - Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + + + +

Semantic Location History Format Definition

+
+

This page has been automatically generated from the schema Semantic.schema.json.

+
+

Semantic Location History

+
+

A Semantic Location History JSON file in a Google Takeout Location History extraction. Contains Semantic Location History information from the user's account. Typically this will be a file containing data for a single month, with a name such as 2021_JANUARY.json.

+
+
+ + + + + + + + + + + + + + +
PropertyDescription
timelineObjects​[]
Timeline Objects
array of: object  (Timeline Object)
List of all available semantic information, in chronological order. Each item in the list is either an Activity Segment or a Place Visit, encapsulated in a generic Timeline Object.
+

Timeline Object

+
+

Encapsulates either an Activity Segment or a Place Visit, depending on the single key found.

+
+
+ + + + + + + + + + + + + + + + + + +
Single PropertyDescription
activitySegment
Activity Segment
object  (Activity Segment)
An activity involving changes in location, usually a journey from one place to another, such as a walk, a car drive, a bus ride, or a flight.
placeVisit
Place Visit
object  (Place Visit)
A visit or stay at a place in a fixed location for a duration of time, such as a stay at home, at work, a visit to a shopping mall, or to a restaurant.
+

Activity Segment

+
+

An activity involving changes in location, usually a journey from one place to another, such as a walk, a car drive, a bus ride, or a flight.

+
+
+Example +
{
+    "activitySegment": {
+        "startLocation": {
+            "latitudeE7": 414083590,
+            "longitudeE7": 21704229,
+            "sourceInfo": {
+                "deviceTag": 1114211210
+            }
+        },
+        "endLocation": {
+            "latitudeE7": 413961889,
+            "longitudeE7": 21536695,
+            "sourceInfo": {
+                "deviceTag": 1114211210
+            }
+        },
+        "duration": {
+            "startTimestamp": "2022-03-03T12:22:24Z",
+            "endTimestamp": "2022-03-03T12:43:34Z"
+        },
+        "distance": 2640,
+        "activityType": "IN_BUS",
+        "confidence": "HIGH",
+        "activities": [
+            {
+                "activityType": "IN_BUS",
+                "probability": 85.6847882270813
+            },
+            {
+                "activityType": "WALKING",
+                "probability": 8.418431878089905
+            },
+            {
+                "activityType": "IN_PASSENGER_VEHICLE",
+                "probability": 2.8303226456046104
+            },
+            {
+                "activityType": "STILL",
+                "probability": 1.7383299767971039
+            },
+            {
+                "activityType": "IN_SUBWAY",
+                "probability": 0.4673520103096962
+            },
+            {
+                "activityType": "IN_TRAIN",
+                "probability": 0.3031305968761444
+            },
+            {
+                "activityType": "IN_TRAM",
+                "probability": 0.269505986943841
+            },
+            {
+                "activityType": "CYCLING",
+                "probability": 0.1483310479670763
+            }
+        ],
+        "transitPath": {
+            "transitStops": [
+                {
+                    "latitudeE7": 414083140,
+                    "longitudeE7": 21704000,
+                    "placeId": "ChIJWey1zMWipBIRiNQSzpI4EDQ",
+                    "address": "08025 Barcelona\nEspa\u00f1a",
+                    "name": "Sant Antoni Maria Claret-Lepant"
+                },
+                {
+                    "latitudeE7": 414066427,
+                    "longitudeE7": 21681608,
+                    "placeId": "ChIJ3Wr_xsaipBIRctQDPNF0IHM",
+                    "address": "08025 Barcelona\nEspa\u00f1a",
+                    "name": "Sant Antoni Maria Claret - Sardenya"
+                },
+                {
+                    "latitudeE7": 414049343,
+                    "longitudeE7": 21659001,
+                    "placeId": "ChIJh2lnv8CipBIRpH0ym2Bxo68",
+                    "address": "08025 Barcelona\nEspa\u00f1a",
+                    "name": "Sant Antoni Maria Claret - N\u00e0pols"
+                }
+            ],
+            "name": "H8",
+            "hexRgbColor": "009EE0",
+            "linePlaceId": "ChIJQVEUoLuipBIRJO37wI4yyBs",
+            "stopTimesInfo": [
+                {
+                    "scheduledDepartureTimestamp": "2022-03-03T12:42:00Z",
+                    "realtimeDepartureTimestamp": "2022-03-03T12:43:37Z"
+                },
+                {
+                    "scheduleArrivalTimestamp": "2022-03-03T12:44:01Z",
+                    "scheduledDepartureTimestamp": "2022-03-03T12:44:01Z",
+                    "realtimeArrivalTimestamp": "2022-03-03T12:45:38Z",
+                    "realtimeDepartureTimestamp": "2022-03-03T12:45:38Z"
+                },
+                {
+                    "scheduleArrivalTimestamp": "2022-03-03T12:46:03Z",
+                    "scheduledDepartureTimestamp": "2022-03-03T12:46:03Z",
+                    "realtimeArrivalTimestamp": "2022-03-03T12:47:40Z",
+                    "realtimeDepartureTimestamp": "2022-03-03T12:47:40Z"
+                },
+                {
+                    "scheduleArrivalTimestamp": "2022-03-03T12:48:00Z",
+                    "scheduledDepartureTimestamp": "2022-03-03T12:48:00Z",
+                    "realtimeArrivalTimestamp": "2022-03-03T12:49:37Z",
+                    "realtimeDepartureTimestamp": "2022-03-03T12:49:37Z"
+                }
+            ],
+            "source": "INFERRED",
+            "confidence": 0.9155850640140931,
+            "distanceMeters": 2341.0
+        },
+        "simplifiedRawPath": {
+            "points": [
+                {
+                    "latE7": 414032766,
+                    "lngE7": 21641819,
+                    "accuracyMeters": 10,
+                    "timestamp": "2022-03-03T12:27:48Z"
+                },
+                {
+                    "latE7": 414016705,
+                    "lngE7": 21661614,
+                    "accuracyMeters": 13,
+                    "timestamp": "2022-03-03T12:30:04Z"
+                },
+                {
+                    "latE7": 413986545,
+                    "lngE7": 21623960,
+                    "accuracyMeters": 12,
+                    "timestamp": "2022-03-03T12:33:51Z"
+                },
+                {
+                    "latE7": 413976870,
+                    "lngE7": 21610201,
+                    "accuracyMeters": 11,
+                    "timestamp": "2022-03-03T12:37:09Z"
+                },
+                {
+                    "latE7": 413968976,
+                    "lngE7": 21609892,
+                    "accuracyMeters": 13,
+                    "timestamp": "2022-03-03T12:38:50Z"
+                },
+                {
+                    "latE7": 413955345,
+                    "lngE7": 21551848,
+                    "accuracyMeters": 11,
+                    "timestamp": "2022-03-03T12:42:06Z"
+                }
+            ],
+            "source": "INFERRED",
+            "distanceMeters": 2413.400132766728
+        }
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
activities​[]
Activities
array of: object  (Activity)
List of all the considered candidate activity types and their probabilities. The sum of all the probabilities is always <= 100.
activityType
Activity Type
string  (Activity Type)Example: "WALKING"
Best match activity type. Corresponds to the activity type with the highest probability in activities.
confidence
Confidence
stringExample: "HIGH"
Confidence that the chosen activity type (see activityType) is correct. One of: LOW, MEDIUM, HIGH or UNKNOWN_CONFIDENCE. Activities that have been manually confirmed always have a confidence of HIGH.
distance
Distance
integerExample: 292
Distance traveled during the activity, in meters.
duration
Duration
object  (Duration)
Duration of the activity.
editActionMetadata
Edit-Action Metadata
editConfirmationStatus
Edit-Confirmation Status
stringExample: "CONFIRMED"
Whether the user has manually edited the activity segment. Can be NOT_CONFIRMED or CONFIRMED.
endLocation
End Location
object  (Location)
End location of the activity.
lastEditedTimestamp
Last-Edited Timestamp
string  (date-time)Example: "2022-03-06T14:13:11.092Z"
parkingEvent
Parking Event
object  (Parking Event)
simplifiedRawPath
Simplified Raw Path
startLocation
Start Location
object  (Location)
Start location of the activity.
transitPath
Transit Path
object  (Transit Path)
Path taken in a public transit system, such as a bus or a metro.
waypointPath
Waypoint Path
object  (Waypoint Path)
+

Place Visit

+
+

A visit or stay at a place in a fixed location for a duration of time, such as a stay at home, at work, a visit to a shopping mall, or to a restaurant.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
centerLatE7
Center Latitude
integerExample: 414216106
Latitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).
centerLngE7
Center Longitude
integerExample: 21684775
Longitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).
checkin
Checkin
object  (Checkin)
Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome.
childVisits​[]
Child Visits
array of: object  (Place Visit)
duration
Duration
object  (Duration)
Duration of the place visit.
editActionMetadata
Edit-Action Metadata
editConfirmationStatus
Edit-Confirmation Status
stringExample: "CONFIRMED"
Whether the user has manually edited the place visit. Can be NOT_CONFIRMED or CONFIRMED.
lastEditedTimestamp
Last-Edited Timestamp
string  (date-time)Example: "2022-03-06T14:13:11.092Z"
location
Location
object  (Location)
Location of the place.
locationAssertionType
Location Assertion Type
stringExample: "AREA"
locationConfidence
Visit Confidence
integerExample: 71
Help Wanted: How is this different from visitConfidence Contributions to improve this are welcome.
otherCandidateLocations​[]
Other Candidate Locations
array of: object  (Location)
placeConfidence
Place Confidence
stringExample: "HIGH"
Categorized confidence for this place visit. One of: LOW_CONFIDENCE, MEDIUM_CONFIDENCE, HIGH_CONFIDENCE or USER_CONFIRMED.
Help Wanted: Is this directly related to locationConfidence and/or visitConfidence Contributions to improve this are welcome.
placeVisitImportance
Place Visit Importance
stringExample: "MAIN"
One of MAIN or TRANSITIONAL.
placeVisitLevel
Place Visit Level
integerExample: 1
Level (depth) of this place visit. This value increases by 1 with each recursive access to a childVisits entry.
placeVisitType
Place Visit Type
stringExample: "SINGLE_PLACE"
Can be SINGLE_PLACE.
Help Wanted: Are there other valid values? Contributions to improve this are welcome.
sectionId
Section ID
string
simplifiedRawPath
Simplified Raw Path
visitConfidence
Visit Confidence
integerExample: 95
Help Wanted: How is this different from locationConfidence Contributions to improve this are welcome.
+

Activity

+
+Example +
{
+    "activityType": "WALKING",
+    "probability": 95.93904614448547
+}
+
+
+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
activityType
Activity Type
string  (Activity Type)Example: "STILL"
Type of activity.
probability
Probability
numberExample: 95.93904614448547
Probability (or confidence) that the activity type is correct, in the range 0 to 100.
+

Activity Type

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Activity TypeDescription
BOATING
Boating
CATCHING_POKEMON
Catching Pokémon
CYCLING
Cycling
FLYING
Flying
HIKING
Hiking
HORSEBACK_RIDING
Horseback riding
IN_BUS
On a bus
IN_CABLECAR
In a cable car
IN_FERRY
On a ferry
IN_FUNICULAR
On a funicular
IN_GONDOLA_LIFT
In a gondola lift
IN_PASSENGER_VEHICLE
Driving
IN_SUBWAY
On the subway
IN_TAXI
In a taxi
IN_TRAIN
On a train
IN_TRAM
On a tram
IN_VEHICLE
In a vehicle
IN_WHEELCHAIR
By wheelchair
KAYAKING
Kayaking
KITESURFING
Kitesurfing
MOTORCYCLING
Motorcycling
PARAGLIDING
Paragliding
ROWING
Rowing
RUNNING
Running
SAILING
Sailing
SKATEBOARDING
Skateboarding
SKATING
Skating
SKIING
Skiing
SLEDDING
Sledding
SNOWBOARDING
Snowboarding
SNOWMOBILE
Snowmobiling
SNOWSHOEING
Snowshoeing
STILL
Still
SURFING
Surfing
SWIMMING
Swimming
UNKNOWN_ACTIVITY_TYPE
Moving
WALKING
Walking
WALKING_NORDIC
Nordic walking
+

Duration

+
+

Duration of time defined by a start timestamp and an end timestamp.

+
+
+Example +
{
+    "startTimestamp": "2022-02-02T10:41:08.315Z",
+    "endTimestamp": "2022-02-02T10:45:09.962Z"
+}
+
+
+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
endTimestamp
End Timestamp
string  (date-time)Example: "2022-02-02T10:45:09.962Z"
startTimestamp
Start Timestamp
string  (date-time)Example: "2022-02-02T10:41:08.315Z"
+

Edit-Action Metadata

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
activitySegment
Activity Segment
object  (Activity Segment)
editHistory
Edit History
object  (Edit History)
originalCandidates
Original Candidates
placeVisitSegment
Place Visit Segment
+

Location

+
+Example +
{
+    "latitudeE7": 414036299,
+    "longitudeE7": 21743558,
+    "placeId": "ChIJk_s92NyipBIRUMnDG8Kq2Js",
+    "address": "C/ de Mallorca, 401\n08013 Barcelona\nEspanya",
+    "name": "La Sagrada Familia",
+    "semanticType": "TYPE_SEARCHED_ADDRESS",
+    "sourceInfo": {
+        "deviceTag": 1234567890
+    },
+    "locationConfidence": 87.07311,
+    "calibratedProbability": 76.20023
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
accuracyMetres
Accuracy in meters
integerExample: 19
Approximate accuracy radius of the location measurement, in meters. A lower value means better precision.
address
Address
stringExample: "C/ de Mallorca, 401\n08013 Barcelona\nEspanya"
Address of the location.
calibratedProbability
Calibrated Probability
numberExample: 100.0
isCurrentLocation
Is Current Location
booleanExample: true
latitudeE7
Latitude
integerExample: 414216106
Latitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).
locationConfidence
Location Confidence
numberExample: 100.0
longitudeE7
Longitude
integerExample: 21684775
Longitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).
name
Name
stringExample: "La Sagrada Familia"
Name of the location.
placeId
Place ID
stringExample: "ChIJk_s92NyipBIRUMnDG8Kq2Js"
Google Maps Place ID of the location.
semanticType
Semantic Type
string  (Semantic Type)Example: "TYPE_HOME"
Place type based on semantic information specific to the user.
sourceInfo
Source Information
object  (Source Information)
Information on the source that provided the location.
+

Parking Event

+
+Example +
{
+    "location": {
+        "latitudeE7": 412518975,
+        "longitudeE7": 21683133,
+        "accuracyMetres": 19
+    },
+    "method": "EXITING_VEHICLE_SIGNAL",
+    "locationSource": "FROM_RAW_LOCATION",
+    "timestamp": "2022-02-27T14:47:16.731Z"
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
location
Location
object  (Location)
locationSource
Location Source
stringExample: "FROM_RAW_LOCATION"
method
Method
stringExample: "EXITING_VEHICLE_SIGNAL"
timestamp
Timestamp
string  (date-time)Example: "2022-02-27T14:47:16.731Z"
+

Simplified Raw Path

+
+Example +
{
+    "points": [
+        {
+            "latE7": 416032766,
+            "lngE7": 21841819,
+            "accuracyMeters": 10,
+            "timestamp": "2022-03-03T08:27:48Z"
+        },
+        {
+            "latE7": 416016705,
+            "lngE7": 21861614,
+            "accuracyMeters": 13,
+            "timestamp": "2022-03-03T08:30:04Z"
+        },
+        {
+            "latE7": 415986545,
+            "lngE7": 21823960,
+            "accuracyMeters": 12,
+            "timestamp": "2022-03-03T08:33:51Z"
+        }
+    ],
+    "source": "INFERRED",
+    "distanceMeters": 2413.400132766728
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
distanceMeters
Distance in meters
numberExample: 2413.400132766728
Distance traveled with the path, in meters.
points​[]
Points
array of: object  (Point)
List of all the recorded points that form the path.
source
Source
stringExample: "INFERRED"
Source of the location data of the path. One of BACKFILLED, INFERRED, or RESNAPPED_FOR_EDIT.
+

Transit Path

+
+

A path taken in a public transit system, such as a bus or a metro. Note that it does not describe an entire transit line, but only a specific journey a user does in a transit line.

+
+
+Example +
{
+    "transitStops": [
+        {
+            "latitudeE7": 414083140,
+            "longitudeE7": 21704000,
+            "placeId": "ChIJWey1zMWipBIRiNQSzpI4EDQ",
+            "address": "08025 Barcelona\nEspa\u00f1a",
+            "name": "Sant Antoni Maria Claret-Lepant"
+        },
+        {
+            "latitudeE7": 414066427,
+            "longitudeE7": 21681608,
+            "placeId": "ChIJ3Wr_xsaipBIRctQDPNF0IHM",
+            "address": "08025 Barcelona\nEspa\u00f1a",
+            "name": "Sant Antoni Maria Claret - Sardenya"
+        },
+        {
+            "latitudeE7": 414049343,
+            "longitudeE7": 21659001,
+            "placeId": "ChIJh2lnv8CipBIRpH0ym2Bxo68",
+            "address": "08025 Barcelona\nEspa\u00f1a",
+            "name": "Sant Antoni Maria Claret - N\u00e0pols"
+        }
+    ],
+    "name": "H8",
+    "hexRgbColor": "009EE0",
+    "linePlaceId": "ChIJQVEUoLuipBIRJO37wI4yyBs",
+    "stopTimesInfo": [
+        {
+            "scheduledDepartureTimestamp": "2022-03-03T12:42:00Z",
+            "realtimeDepartureTimestamp": "2022-03-03T12:43:37Z"
+        },
+        {
+            "scheduleArrivalTimestamp": "2022-03-03T12:44:01Z",
+            "scheduledDepartureTimestamp": "2022-03-03T12:44:01Z",
+            "realtimeArrivalTimestamp": "2022-03-03T12:45:38Z",
+            "realtimeDepartureTimestamp": "2022-03-03T12:45:38Z"
+        },
+        {
+            "scheduleArrivalTimestamp": "2022-03-03T12:46:03Z",
+            "scheduledDepartureTimestamp": "2022-03-03T12:46:03Z",
+            "realtimeArrivalTimestamp": "2022-03-03T12:47:40Z",
+            "realtimeDepartureTimestamp": "2022-03-03T12:47:40Z"
+        },
+        {
+            "scheduleArrivalTimestamp": "2022-03-03T12:48:00Z",
+            "scheduledDepartureTimestamp": "2022-03-03T12:48:00Z",
+            "realtimeArrivalTimestamp": "2022-03-03T12:49:37Z",
+            "realtimeDepartureTimestamp": "2022-03-03T12:49:37Z"
+        }
+    ],
+    "source": "INFERRED",
+    "confidence": 0.9155850640140931,
+    "distanceMeters": 2341.0
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
confidence
Confidence
numberExample: 0.9155850640140931
distanceMeters
Distance in meters
numberExample: 396.34176716755843
Distance traveled with the transit path, in meters.
hexRgbColor
Hexadecimal RGB Color
stringExample: "009EE0"
Color of the transit line in hexadecimal in the form RRGGBB.
linePlaceId
Line Place ID
stringExample: "ChIJQVEUoLuipBIRJO37wI4yyBs"
Google Maps Place ID of the transit line.
name
Name
stringExample: "H8"
Name of the transit line.
source
Source
stringExample: "INFERRED"
Source of the location data of the transit path. Either BACKFILLED or INFERRED.
stopTimesInfo​[]
Stop Times Info
array of: object  (Stop Time Info)
Time information (departure and arrival times, both real and scheduled) for each transit stop used.
transitStops​[]
Transit Stops
array of: object  (Location)
List of locations of the transit stops used.
+

Waypoint Path

+
+Example +
{
+    "waypoints": [
+        {
+            "latE7": 416119834,
+            "lngE7": 21768624
+        },
+        {
+            "latE7": 416117012,
+            "lngE7": 21899302
+        },
+        {
+            "latE7": 416119262,
+            "lngE7": 21802315
+        }
+    ],
+    "source": "INFERRED",
+    "distanceMeters": 396.34176716755843,
+    "travelMode": "WALK",
+    "confidence": 0.7986568220419046
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
confidence
Confidence
numberExample: 0.7986568220419046
distanceMeters
Distance in meters
numberExample: 396.34176716755843
Total distance of the path, in meters.
roadSegment​[]
Road Segment
array of: object  (Road Segment)
source
Source
stringExample: "INFERRED"
Source of the location data of the path. Either BACKFILLED or INFERRED.
travelMode
Travel Mode
stringExample: "WALK"
waypoints​[]
Waypoints
array of: object  (Waypoint)
+

Checkin

+
+

Help Wanted: +The meaning of this field is uncertain. Contributions to improve this are welcome.

+
+
+ + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
atTime
At Time
string  (date-time)Example: "2022-03-06T14:13:11.092Z"
device
Device
object  (Device)
latestKnownLocation
Latest Known Location
+

Activity Segment

+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
activityConfidence
Confidence
numberExample: 98.705695
activityType
Activity Type
string  (Activity Type)Example: "WALKING"
+

Edit History

+
+ + + + + + + + + + + + + + +
PropertyDescription
editEvent​[]
Edit Event
array of: object  (Edit Event)
+

Original Candidates

+
+ + + + + + + + + + + + + + +
PropertyDescription
placeVisitSegment
Place Visit Segment
+

Place Visit Segment

+
+ + + + + + + + + + + + + + +
PropertyDescription
location
Location
object  (Location)
+

Semantic Type

+
+

Place type based on semantic information specific to the user.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Semantic TypeDescription
TYPE_ALIASED_LOCATION
Type Aliased Location
The place has been given a private label by the user. See: Give a place a private label.
TYPE_HOME
Type Home
The place has been designated as 'Home' by the user. See: Set or change your home & work addresses.
TYPE_SEARCHED_ADDRESS
Type Searched Address
The user has searched for this place in the past.
TYPE_WORK
Type Work
The place has been designated as 'Work' by the user. See: Set or change your home & work addresses.
+

Source Information

+
+

Information on the source that provided the location.

+
+
+ + + + + + + + + + + + + + +
PropertyDescription
deviceTag
Device Tag
integerExample: 1234567890
Integer identifier (specific to Location History) associated with the device that obtained the location. Refer to deviceSettings in Settings.json for information about the device with this deviceTag.
+

Point

+
+Example +
{
+    "latE7": 416032766,
+    "lngE7": 21841819,
+    "accuracyMeters": 10,
+    "timestamp": "2022-03-03T08:27:48Z"
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
accuracyMeters
Accuracy in meters
integerExample: 10
Approximate accuracy radius of the location measurement, in meters. A lower value means better precision.
latE7
Latitude
integerExample: 414216106
Latitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).
lngE7
Longitude
integerExample: 21684775
Longitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).
timestamp
Timestamp
string  (date-time)Example: "2022-03-03T08:27:48Z"
Timestamp of the point.
+

Stop Time Info

+
+

Departure and/or arrival time information (both real and scheduled) for a stop at a transit line.

+
+
+Example +
{
+    "scheduleArrivalTimestamp": "2022-03-03T12:44:01Z",
+    "scheduledDepartureTimestamp": "2022-03-03T12:44:01Z",
+    "realtimeArrivalTimestamp": "2022-03-03T12:45:38Z",
+    "realtimeDepartureTimestamp": "2022-03-03T12:45:38Z"
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
realtimeArrivalTimestamp
Realtime Arrival Timestamp
string  (date-time)Example: "2022-03-03T12:45:38Z"
realtimeDepartureTimestamp
Realtime Departure Timestamp
string  (date-time)Example: "2022-03-03T12:45:38Z"
scheduleArrivalTimestamp
Schedule Arrival Timestamp
string  (date-time)Example: "2022-03-03T12:44:01Z"
scheduledDepartureTimestamp
Scheduled Departure Timestamp
string  (date-time)Example: "2022-03-03T12:44:01Z"
+

Road Segment

+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
duration
Duration
stringExample: "8s"
placeId
Place ID
stringExample: "ChIJk_s92NyipBIRUMnDG8Kq2Js"
Google Maps Place ID of the location.
+

Waypoint

+
+Example +
{
+    "latE7": 414216106,
+    "lngE7": 21684775
+}
+
+
+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
latE7
Latitude
integerExample: 414216106
Latitude coordinate of the waypoint. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).
lngE7
Longitude
integerExample: 21684775
Longitude coordinate of the waypoint. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).
+

Device

+
+ + + + + + + + + + + + + + +
PropertyDescription
android
Android
object  (Android)
+

Latest Known Location

+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
detectionTime
Detection Time
string  (date-time)Example: "2022-03-06T14:13:11.092Z"
location
Location
object  (Location)
+

Edit Event

+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
editOperation​[]
Edit Operation
array of: string
uiConfiguration
UI Configuration
object  (UI Configuration)
+

Place Visit Segment

+
+ + + + + + + + + + + + + + +
PropertyDescription
placeVisitCandidate​[]
Place Visit Candidate
array of: object  (Original Candidates)
+

Android

+
+ + + + + + + + + + + + + + +
PropertyDescription
fingerprint
Fingerprint
string
+

UI Configuration

+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
uiActivitySegmentConfiguration
UI Activity Segment Configuration
stringExample: "DEFAULT_ACTIVITY_SEGMENT_CONFIGURATION"
uiPlaceVisitConfiguration
UI Place Visit Configuration
stringExample: "DEFAULT_PLACE_VISIT_CONFIGURATION"
+

Original Candidates

+
+ + + + + + + + + + + + + + +
PropertyDescription
location
Location
object  (Location)
+ +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/reference/settings/index.html b/reference/settings/index.html new file mode 100644 index 0000000..1a67665 --- /dev/null +++ b/reference/settings/index.html @@ -0,0 +1,958 @@ + + + + + + + + + + + + + + + + + + + + + + + + Settings.json - Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + + + +

Settings.json Format Definition

+
+

This page has been automatically generated from the schema Settings.schema.json.

+
+

Settings

+
+

The Settings.json file in a Google Takeout Location History extraction. Contains information about the Google account settings related to Location History, information about the devices associated, and other auxiliary metadata.

+
+
+Example +
{
+    "createdTime": "2013-05-15T21:53:59.385Z",
+    "modifiedTime": "2020-07-01T21:27:31.880Z",
+    "historyEnabled": true,
+    "deviceSettings": [
+        {
+            "deviceTag": 1234567890,
+            "reportingEnabled": true,
+            "legalCountryCode": "es",
+            "devicePrettyName": "ONEPLUS A6013",
+            "platformType": "ANDROID",
+            "deviceCreationTime": "2019-01-07T18:13:23.713Z",
+            "latestLocationReportingSettingChange": {
+                "reportingEnabledModificationTime": "2019-01-07T18:13:24.673Z"
+            },
+            "androidOsLevel": 28,
+            "deviceSpec": {
+                "manufacturer": "OnePlus",
+                "brand": "OnePlus",
+                "product": "OnePlus6T",
+                "device": "OnePlus6T",
+                "model": "ONEPLUS A6013",
+                "isLowRam": false
+            }
+        }
+    ],
+    "retentionWindowDays": 2147483647,
+    "hasReportedLocations": true,
+    "hasSetRetention": false
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
createdTime
Created Time
string  (date-time)Example: "2013-05-15T21:53:59.385Z"
Timestamp (as an ISO 8601 string) when Location History was first available on this Google account.
deviceSettings​[]
Device Settings
array of: object  (Device Settings)
List of devices associated with the Location History information on this Google account.
hasReportedLocations
Has Reported Locations
booleanExample: true
Whether this Google account has any reported Location History information.
hasSetRetention
Has Set Retention
booleanExample: false
Whether this Google account has configured the auto-delete setting (retention) for the Location History data. Corresponds to the Auto-delete setting in the Activity Controls page.See also retentionWindowDays.
historyEnabled
History Enabled
booleanExample: true
Whether Location History is enabled on this Google account (controlled in the Activity Controls page).
modifiedTime
Modified Time
string  (date-time)Example: "2020-07-01T21:27:31.880Z"
Timestamp (as an ISO 8601 string) when any Location History setting was last modified on this Google account.
retentionWindowDays
Retention Window Days
integerExample: 540
Number of days the Location History information is retained in this Google account. Corresponds to the Auto-delete setting in the Activity Controls page.This value should be ignored if hasSetRetention is false.
+

Device Settings

+
+

Information about a device associated with the Google Location History account.

+
+
+Example +
{
+    "deviceTag": 1234567890,
+    "reportingEnabled": true,
+    "legalCountryCode": "es",
+    "devicePrettyName": "ONEPLUS A6013",
+    "platformType": "ANDROID",
+    "deviceCreationTime": "2019-01-07T18:13:23.713Z",
+    "latestLocationReportingSettingChange": {
+        "reportingEnabledModificationTime": "2019-01-07T18:13:24.673Z"
+    },
+    "androidOsLevel": 28,
+    "deviceSpec": {
+        "manufacturer": "OnePlus",
+        "brand": "OnePlus",
+        "product": "OnePlus6T",
+        "device": "OnePlus6T",
+        "model": "ONEPLUS A6013",
+        "isLowRam": false
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
androidOsLevel
Android OS Level
integerExample: 28
The version of the device's operating system (only applies to Android devices). Corresponds to the API Level (e.g. 28 is Android 9 Pie).
deviceCreationTime
Device Creation Time
string  (date-time)Example: "2019-01-07T18:13:23.713Z"
Timestamp (as an ISO 8601 string) of the first time this device was available for Location History reporting on this Google account.
devicePrettyName
Device Pretty Name
stringExample: "ONEPLUS A6013"
Pretty name of the device, recommended for user-facing applications.
deviceSpec
Device Specification
Technical information and specifications about the device.
deviceTag
Device Tag
integerExample: 1234567890
Integer identifier (specific to Location History) of the device.
latestLocationReportingSettingChange
Latest Location Reporting Setting Change
Information on the latest change(s) to Location History settings on this Google account.
Help Wanted: Are properties other than reportingEnabledModificationTime possible? Contributions to improve this are welcome.
legalCountryCode
Legal Country Code
stringExample: "es"
Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome.
platformType
Platform Type
stringExample: "ANDROID"
Platform of the device. Valid values are: ANDROID, IOS and UNKNOWN.
reportingEnabled
Reporting Enabled
booleanExample: true
Whether this device is configured to report Location History information (controlled in the Activity Controls page).
+

Device Specification

+
+

Technical information and specifications about a device.

+
+
+Example +
{
+    "manufacturer": "OnePlus",
+    "brand": "OnePlus",
+    "product": "OnePlus6T",
+    "device": "OnePlus6T",
+    "model": "ONEPLUS A6013",
+    "isLowRam": false
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
brand
Brand
stringExample: "OnePlus"
Brand of the device.
device
Device
stringExample: "OnePlus6T"
Name of the device.
isLowRam
Is Low Ram
booleanExample: false
Whether the device is considered low-ram.
Help Wanted: Is it maybe related to Google Maps Go? Contributions to improve this are welcome.
manufacturer
Manufacturer
stringExample: "OnePlus"
Manufacturer of the device.
model
Model
stringExample: "ONEPLUS A6013"
Model of the device.
product
Product
stringExample: "OnePlus6T"
Product name of the device.
+

Latest Location Reporting Setting Change

+
+

Information on the latest change(s) to Location History settings on this Google account.

+
+
+

Help Wanted: +Are properties other than reportingEnabledModificationTime possible? Contributions to improve this are welcome.

+
+
+Example +
{
+    "reportingEnabledModificationTime": "2019-01-07T18:13:24.673Z"
+}
+
+
+
+ + + + + + + + + + + + + + +
PropertyDescription
reportingEnabledModificationTime
Reporting Enabled Modification Time
stringExample: "2019-01-07T18:13:24.673Z"
Time that Location History reporting was enabled or disabled for the last time on this Google account.
+ +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/reference/timeline-edits/index.html b/reference/timeline-edits/index.html new file mode 100644 index 0000000..179bcec --- /dev/null +++ b/reference/timeline-edits/index.html @@ -0,0 +1,1277 @@ + + + + + + + + + + + + + + + + + + + + + + + + Timeline Edits.json - Location History Format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + + + +
+
+
+ + + + +
+
+ + + + + + +

Timeline Edits.json Format Definition

+
+

This page has been automatically generated from the schema TimelineEdits.schema.json.

+
+

Timeline Edits Schema

+
+

This schema outlines the structure of timeline edits data, encompassing device information, place visit aggregates, and raw signal data from the device.

+
+
+ + + + + + + + + + + + + + +
PropertyDescription
timelineEdits​[]
Timeline Edits
array of: object  (Timeline Edit Information)
List of all timeline edits.
+

Timeline Edit Information

+
+

Various information about the timeline edit, including device ID, place aggregates, and raw signal data.

+
+
+Example +
{
+    "deviceId": "0",
+    "placeAggregates": {
+        "placeAggregateInfo": [
+            {
+                "score": 1228.0,
+                "numBucketsWithLocation": 0,
+                "bucketSpanDays": 0,
+                "point": {
+                    "latE7": 429362473,
+                    "lngE7": -788308560
+                },
+                "placeId": "ChIJV8SII64E1YkRvAqrnP5G_x8",
+                "placePoint": {
+                    "latE7": 429362442,
+                    "lngE7": -788308585
+                }
+            },
+            {
+                "score": 166.0,
+                "numBucketsWithLocation": 0,
+                "bucketSpanDays": 0,
+                "point": {
+                    "latE7": 426994475,
+                    "lngE7": -778539281
+                },
+                "placeId": "ChIJ4_FHs78TK4gRw8h22XkBDEA",
+                "placePoint": {
+                    "latE7": 426994650,
+                    "lngE7": -778539291
+                }
+            },
+            {
+                "score": 131.0,
+                "numBucketsWithLocation": 0,
+                "bucketSpanDays": 0,
+                "point": {
+                    "latE7": 415908301,
+                    "lngE7": -739409850
+                },
+                "placeId": "ChIJJRdROh863YkRmXCWQ14VMcI",
+                "placePoint": {
+                    "latE7": 415908776,
+                    "lngE7": -739409849
+                }
+            }
+        ],
+        "windowSizeHrs": 2011,
+        "topRankedPlacesPlaceIds": [
+            "ChIJV8SII64E1YkRvAqrnP5G_x8",
+            "ChIJ4_FHs78TK4gRw8h22XkBDEA",
+            "ChIJJRdROh863YkRmXCWQ14VMcI"
+        ],
+        "processWindow": {
+            "startTime": "2023-12-14T08:00:55Z",
+            "endTime": "2024-03-07T08:00:55Z"
+        },
+        "metadata": {
+            "platform": "UNKNOWN"
+        }
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
deviceId
Device ID
stringExample: "0"
The unique identifier for the device that generated the data.
placeAggregates
Place Aggregates
object  (Place Aggregates)
Aggregated information about places visited by the device.
rawSignal
Raw Signal
object  (Raw Signal)
Raw signal data from the device.
+

Place Aggregates

+
+

Aggregated information about places visited by the device.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
metadata
Metadata
object  (Metadata)
Metadata about the data object.
placeAggregateInfo​[]
Place Aggregate Information
array of: object  (Place Aggregate Info Item)
An array of place information, including score, location, and place ID.
processWindow
Process Window
object  (Process Window)
The start and end time of the processing window.
topRankedPlacesPlaceIds​[]
Top Ranked Places
array of: string
An array of place IDs for the top-ranked places.
windowSizeHrs
Time Window Size
integerExample: 2016
The size of the window in hours for the place aggregates.
+

Raw Signal

+
+

Raw signal data from the device.

+
+
+Example +
{
+    "signal": {
+        "position": {
+            "point": {
+                "latE7": 426974802,
+                "lngE7": -778539156
+            },
+            "accuracyMm": 100000,
+            "altitudeMeters": 224.0,
+            "source": "WIFI",
+            "timestamp": "2024-02-17T04:14:41.412Z"
+        }
+    },
+    "additionalTimestamp": "2024-02-17T04:14:39.545Z",
+    "metadata": {
+        "platform": "ANDROID"
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
additionalTimestamp
Additional Timestamp
string  (date-time)Example: "2024-02-17T05:54:01.359Z"
An additional timestamp associated with the raw signal.
metadata
Metadata
object  (Metadata)
Metadata about the data object.
signal
Signal
object  (Signal)
The signal data, including position, activity record, and wifi scan.
+

Metadata

+
+

Metadata about the data object.

+
+
+ + + + + + + + + + + + + + +
PropertyDescription
platform
Device Platform
stringExample: "ANDROID"
The platform that generated the data.
+

Place Aggregate Info Item

+
+

The place aggregate info containing score, location, place ID, and other details.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
bucketSpanDays
Bucket Span
integerExample: 0
The span of the buckets in days.
numBucketsWithLocation
Number of Buckets
integerExample: 0
The number of location buckets associated with the place.
placeId
Place ID
stringExample: "ChIJV8SII64E1YkRvAqrnP5G_x8"
The unique identifier for the place.
placePoint
Point
object  (Point)
The geographical point.
point
Point
object  (Point)
The geographical point.
score
Score
numberExample: 1228.0
The score assigned to the place.
+

Process Window

+
+

The start and end time of the processing window.

+
+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
endTime
End Time
string  (date-time)Example: "2024-03-07T08:00:55Z"
The end time of the processing window.
startTime
Start Time
string  (date-time)Example: "2023-12-14T08:00:55Z"
The start time of the processing window.
+

Signal

+
+

The signal data, including position, activity record, and wifi scan.

+
+
+ + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
activityRecord
Activity Record
object  (Activity Record)
The activity record data, including detected activities and timestamp.
position
Position
object  (Position)
The position data, including point, accuracy, altitude, source, and timestamp.
wifiScan
Wifi Scan Data
object  (Wifi Scan Data)
The wifi scan data, including delivery time, devices, and source.
+

Point

+
+

The geographical point.

+
+
+Example +
{
+    "latE7": 416032766,
+    "lngE7": 21841819,
+    "accuracyMeters": 10,
+    "timestamp": "2022-03-03T08:27:48Z"
+}
+
+
+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
latE7
Latitude
integerExample: 439362473
Latitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).
lngE7
Longitude
integerExample: -788308560
Longitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).
+

Activity Record

+
+

The activity record data, including detected activities and timestamp.

+
+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
detectedActivities​[]
Detected Activities
array of: object  (Detected Activity Item)
An array of detected activities, including activity type and probability.
timestamp
Timestamp
string  (date-time)Example: "2024-02-17T05:26:47.066Z"
The timestamp of the activity record.
+

Position

+
+

The position data, including point, accuracy, altitude, source, and timestamp.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
accuracyMm
Signal Position Accuracy
integerExample: 100000
The accuracy of the position in millimeters.
altitudeMeters
Altitude
numberExample: 224.0
The altitude of the position in meters.
point
Point
object  (Point)
The geographical point.
source
Signal Position Source
stringExample: "WIFI"
The source of the position data.
speedMetersPerSecond
Speed
numberExample: 0.0
Speed in meters per second.
timestamp
Timestamp
string  (date-time)Example: "2024-02-17T05:54:00.932Z"
The timestamp of the position data.
+

Wifi Scan Data

+
+

The wifi scan data, including delivery time, devices, and source.

+
+
+ + + + + + + + + + + + + + + + + + + + + + +
PropertyDescription
deliveryTime
Delivery Time
string  (date-time)Example: "2024-02-17T04:26:44.661Z"
The delivery time of the wifi scan.
devices​[]
Wifi Devices
array of: object  (Wifi Device)
An array of wifi devices, including mac address and raw RSSI.
source
Wifi Scan Source
stringExample: "ACTIVE_SCAN"
The source of the wifi scan data.
+

Detected Activity Item

+
+

The detected activity item info containing activity type and probability.

+
+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
activityType
Activity Type
stringExample: "STILL"
The type of the detected activity. This could re-use the #/$defs/activityType from Records schema later.
probability
Probability
numberExample: 0.96
The probability of the detected activity.
+

Wifi Device

+
+

The wifi device info containing mac address and raw RSSI.

+
+
+ + + + + + + + + + + + + + + + + + +
PropertyDescription
mac
MAC Address
stringExample: "145830537259886"
The mac address of the wifi device.
rawRssi
Raw RSSI
integerExample: -51
The raw RSSI of the wifi device.
+ +
+
+ + + Last update: + 2024-03-24 + + +
+ + + + + + + + +
+
+ + +
+ +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/schemas/Records.schema.json b/schemas/Records.schema.json new file mode 100644 index 0000000..4b03c53 --- /dev/null +++ b/schemas/Records.schema.json @@ -0,0 +1,691 @@ +{ + "$id": "https://locationhistoryformat.com/schemas/Records.schema.json", + "$schema": "http://json-schema.org/draft/2020-12/schema", + "title": "Records", + "description": "The `Records.json` file in a Google Takeout Location History extraction. Contains raw Location History information from the user's account.", + "type": "object", + "properties": { + "locations": { + "type": "array", + "title": "Locations", + "description": "List of all available location records, in chronological order.", + "items": { + "$ref": "#/$defs/locationRecord" + }, + "examples": [] + } + }, + "required": [ + "locations" + ], + "$defs": { + "locationRecord": { + "title": "Location Record", + "type": "object", + "description": "A specific location record. Contains the information obtained from a user's device at a specific moment in time and at a given location.", + "examples": [ + { + "timestamp": "2022-01-12T17:18:24.190Z", + "latitudeE7": 414216106, + "longitudeE7": 21684775, + "accuracy": 20, + "velocity": 10, + "heading": 270, + "altitude": 150, + "verticalAccuracy": 10, + "source": "WIFI", + "deviceTag": 1234567890, + "platformType": "ANDROID" + } + ], + "properties": { + "accuracy": { + "type": "integer", + "title": "Accuracy", + "description": "Approximate accuracy radius of the location measurement, in meters. A lower value means better precision.", + "examples": [ + 20 + ] + }, + "activeWifiScan": { + "type": "object", + "title": "Active Wi-Fi Scan", + "description": "Information about the access points found in a Wi-Fi scan done by the device and associated with this location record.", + "$ref": "#/$defs/wifiScan" + }, + "activity": { + "type": "array", + "title": "Activity", + "description": "Detected activity information at this location, as a list of activity records at slightly different timestamps but all associated with this location record.", + "examples": [ + [ + { + "activity": [ + { + "type": "ON_FOOT", + "confidence": 89 + }, + { + "type": "WALKING", + "confidence": 84 + }, + { + "type": "ON_BICYCLE", + "confidence": 5 + }, + { + "type": "IN_VEHICLE", + "confidence": 2 + }, + { + "type": "STILL", + "confidence": 1 + }, + { + "type": "UNKNOWN", + "confidence": 1 + } + ], + "timestamp": "2022-02-12T15:10:56.751Z" + }, + { + "activity": [ + { + "type": "STILL", + "confidence": 79 + }, + { + "type": "IN_VEHICLE", + "confidence": 12 + }, + { + "type": "IN_RAIL_VEHICLE", + "confidence": 12 + }, + { + "type": "ON_FOOT", + "confidence": 1 + }, + { + "type": "WALKING", + "confidence": 1 + }, + { + "type": "UNKNOWN", + "confidence": 1 + } + ], + "timestamp": "2022-02-12T15:12:55.377Z" + } + ] + ], + "items": { + "type": "object", + "title": "Activity Record", + "description": "Activity information for a location at a given timestamp.", + "examples": [ + { + "activity": [ + { + "type": "ON_FOOT", + "confidence": 89 + }, + { + "type": "WALKING", + "confidence": 84 + }, + { + "type": "ON_BICYCLE", + "confidence": 5 + }, + { + "type": "IN_VEHICLE", + "confidence": 2 + }, + { + "type": "STILL", + "confidence": 1 + }, + { + "type": "UNKNOWN", + "confidence": 1 + } + ], + "timestamp": "2022-02-12T15:10:56.751Z" + } + ], + "properties": { + "activity": { + "type": "array", + "title": "Activity", + "description": "List of candidate detected activities with their associated confidence.", + "items": { + "$ref": "#/$defs/activity" + } + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp", + "description": "Timestamp (as an ISO 8601 string) of the activity.", + "examples": [ + "2022-01-12T17:18:24.190Z" + ] + } + } + } + }, + "altitude": { + "type": "integer", + "title": "Altitude", + "description": "Altitude above the WGS84 reference ellipsoid, in meters.", + "examples": [ + 150 + ] + }, + "batteryCharging": { + "type": "boolean", + "title": "Battery Charging", + "description": "Whether the device was charging its battery or not at the time of the record.", + "examples": [ + true + ] + }, + "deviceDesignation": { + "type": "string", + "title": "Device Designation", + "description": "Common values found are: `PRIMARY`, `UNKNOWN`.", + "examples": [ + "PRIMARY" + ], + "enum": [ + "PRIMARY", + "UNKNOWN" + ], + "helpWanted": "The meaning of this field is uncertain. Are other values possible?" + }, + "deviceTag": { + "type": "integer", + "title": "Device Tag", + "description": "Integer identifier (specific to Location History) associated with the device that uploaded the location. Refer to `deviceSettings` in Settings.json for information about the device with this `deviceTag`.", + "examples": [ + 1234567890 + ] + }, + "deviceTimestamp": { + "type": "string", + "format": "date-time", + "title": "Device Timestamp", + "description": "", + "examples": [], + "helpWanted": "The meaning of this field is uncertain." + }, + "formFactor": { + "type": "string", + "title": "Form Factor", + "description": "Form factor (device type) from which the location record originated.\nCommon values are: `PHONE`, `TABLET`.", + "examples": [ + "PHONE" + ], + "enum": [ + "PHONE", + "TABLET" + ], + "helpWanted": "What are other possible values?" + }, + "heading": { + "type": "integer", + "title": "Heading", + "description": "Heading in degrees east of true north, from 0 to 359.", + "examples": [ + 270 + ], + "minimum": 0, + "maximum": 359 + }, + "inferredLocation": { + "type": "array", + "title": "Inferred Location", + "description": "", + "items": { + "$ref": "#/$defs/locationRecord" + }, + "examples": [], + "helpWanted": "The meaning of this field is uncertain." + }, + "latitudeE7": { + "type": "integer", + "title": "Latitude", + "description": "WGS84 Latitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).", + "examples": [ + 414216106 + ], + "minimum": -900000000, + "maximum": 900000000 + }, + "locationMetadata": { + "type": "array", + "title": "Location Metadata", + "description": "Additional location metadata. List of different Wi-Fi scans associated with this location record.", + "items": { + "$ref": "#/$defs/locationMetadata" + }, + "examples": [] + }, + "longitudeE7": { + "type": "integer", + "title": "Longitude", + "description": "WGS84 Longitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).", + "examples": [ + 21684775 + ], + "minimum": -1800000000, + "maximum": 1800000000 + }, + "osLevel": { + "type": "integer", + "title": "OS Level", + "description": "The version of the device's operating system that provided this record. In Android devices, this corresponds to the API Level (e.g. 28 is Android 9 *Pie*).", + "examples": [ + 28 + ] + }, + "placeId": { + "type": "string", + "title": "Place ID", + "description": "Google Maps [Place ID](https://developers.google.com/maps/documentation/places/web-service/place-id) of the location.", + "examples": [ + "ChIJk_s92NyipBIRUMnDG8Kq2Js" + ] + }, + "platformType": { + "type": "string", + "title": "Platform Type", + "description": "Platform of the device that provided this record. Valid values are: `ANDROID`, `IOS` and `UNKNOWN`.", + "examples": [ + "ANDROID" + ], + "enum": [ + "ANDROID", + "IOS", + "UNKNOWN" + ] + }, + "serverTimestamp": { + "type": "string", + "format": "date-time", + "title": "Server Timestamp", + "description": "", + "examples": [], + "helpWanted": "The meaning of this field is uncertain." + }, + "source": { + "type": "string", + "title": "Source", + "description": "Source (technology) that provided the location information for this record.\nCommon values are: `WIFI`, `CELL`, `GPS`, `UNKNOWN` (note: sometimes found in lowercase).", + "examples": [ + "WIFI" + ], + "enum": [ + "WIFI", + "wifi", + "CELL", + "cell", + "GPS", + "gps", + "UNKNOWN", + "unknown" + ] + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp", + "description": "Timestamp (as an ISO 8601 string) of the record.", + "examples": [ + "2022-01-12T17:18:24.190Z" + ], + "added": "around January 2022" + }, + "timestampMs": { + "type": "string", + "title": "Timestamp (Milliseconds)", + "description": "Timestamp of the record as a [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) in milliseconds.", + "examples": [ + "1636403752674" + ], + "deprecated": true, + "removed": "around January 2022", + "replacedBy": "#/$defs/locationRecord/properties/timestamp" + }, + "velocity": { + "type": "integer", + "title": "Velocity", + "description": "Measured velocity (ground speed) in meters per second.", + "examples": [ + 10 + ], + "minimum": 0 + }, + "verticalAccuracy": { + "type": "integer", + "title": "Vertical Accuracy", + "description": "Calculated accuracy of the location's altitude measurement, in meters. A lower value means better precision.", + "examples": [ + 10 + ], + "minimum": 0 + } + } + }, + "activity": { + "type": "object", + "title": "Activity", + "description": "A detected activity with an associated confidence. Descriptions partially based on: ", + "examples": [ + { + "type": "ON_FOOT", + "confidence": 89 + } + ], + "properties": { + "type": { + "type": "string", + "title": "Activity Type", + "description": "Type of activity detected.", + "$ref": "#/$defs/activityType", + "examples": [ + "STILL" + ] + }, + "confidence": { + "type": "integer", + "title": "Confidence", + "description": "Value from 0 to 100 indicating the likelihood that the user is performing this activity.\nThe larger the value, the more consistent the data used to perform the classification is with the detected activity. \nMultiple activities may have high confidence values. For example, the `ON_FOOT` may have a confidence of 100 while the `RUNNING` activity may have a confidence of 95. The sum of the confidences of all detected activities for a classification does not have to be <= 100 since some activities are not mutually exclusive (for example, you can be walking while in a bus) and some activities are hierarchical (`ON_FOOT` is a generalization of `WALKING` and `RUNNING`).", + "examples": [ + 100 + ], + "minimum": 0, + "maximum": 100 + }, + "extra": { + "type": "object", + "title": "Extra Activity Information", + "description": "Generic object containing extra information about an activity, in the form of a property with a type, a name, and a value. So far only the property with name `vehicle_personal_confidence` has been encountered.", + "examples": [ + { + "type": "VALUE", + "name": "vehicle_personal_confidence", + "intVal": 100 + } + ], + "properties": { + "type": { + "type": "string", + "title": "Type", + "description": "Type of the property.", + "examples": [ + "VALUE" + ] + }, + "name": { + "type": "string", + "title": "Name", + "description": "Name of the property.", + "examples": [ + "vehicle_personal_confidence" + ] + }, + "intVal": { + "type": "integer", + "title": "Integer Value", + "description": "Integer value of the property.", + "examples": [ + 100 + ] + } + } + } + } + }, + "activityType": { + "type": "string", + "title": "Activity Type", + "description": "Type of activity detected, such as `WALKING` or `ON_BICYCLE`. Some activity types are hierarchical, for example, `WALKING` is a subtype of `ON_FOOT`, and in particular, the following activity type hierarchy is known:\n\n```\n- EXITING_VEHICLE\n- IN_VEHICLE\n- ├─ IN_RAIL_VEHICLE\n- └─ IN_ROAD_VEHICLE\n- ├─ IN_FOUR_WHEELER_VEHICLE\n- │ ├─ IN_BUS\n- │ └─ IN_CAR\n- └─ IN_TWO_WHEELER_VEHICLE\n- ON_BICYCLE\n- ON_FOOT\n- ├─ RUNNING\n- └─ WALKING\n- STILL\n- TILTING\n- UNKNOWN\n```\n\nDescriptions partially based on: ", + "examples": [ + "STILL" + ], + "oneOf": [ + { + "type": "string", + "const": "EXITING_VEHICLE", + "title": "Exiting Vehicle", + "description": "The device is exiting a vehicle." + }, + { + "type": "string", + "const": "IN_BUS", + "title": "In Bus", + "description": "The device is in a bus." + }, + { + "type": "string", + "const": "IN_CAR", + "title": "In Car", + "description": "The device is in a car." + }, + { + "type": "string", + "const": "IN_FOUR_WHEELER_VEHICLE", + "title": "In Four-Wheeler Vehicle", + "description": "The device is in a four-wheeler vehicle." + }, + { + "type": "string", + "const": "IN_RAIL_VEHICLE", + "title": "In Rail Vehicle", + "description": "The device is in a rail vehicle." + }, + { + "type": "string", + "const": "IN_ROAD_VEHICLE", + "title": "In Road Vehicle", + "description": "The device is in a road vehicle." + }, + { + "type": "string", + "const": "IN_TWO_WHEELER_VEHICLE", + "title": "In Two-Wheeler Vehicle", + "description": "The device is in a two-wheeler vehicle." + }, + { + "type": "string", + "const": "IN_VEHICLE", + "title": "In Vehicle", + "description": "The device is in a vehicle, such as a car." + }, + { + "type": "string", + "const": "ON_BICYCLE", + "title": "On Bicycle", + "description": "The device is on a bicycle." + }, + { + "type": "string", + "const": "ON_FOOT", + "title": "On Foot", + "description": "The device is on a user who is walking or running." + }, + { + "type": "string", + "const": "RUNNING", + "title": "Running", + "description": "The device is on a user who is running." + }, + { + "type": "string", + "const": "STILL", + "title": "Still", + "description": "The device is still (not moving)." + }, + { + "type": "string", + "const": "TILTING", + "title": "Tilting", + "description": "The device angle relative to gravity changed significantly. This often occurs when a device is picked up from a desk or a user who is sitting stands up." + }, + { + "type": "string", + "const": "WALKING", + "title": "Walking", + "description": "The device is on a user who is walking." + }, + { + "type": "string", + "const": "UNKNOWN", + "title": "Unknown", + "description": "Unable to detect the current activity." + } + ] + }, + "accessPoints": { + "type": "array", + "title": "Access Points", + "description": "List of Wi-Fi scans consisting of access points.", + "items": { + "$ref": "#/$defs/accessPoint" + }, + "examples": [ + [ + { + "mac": "220676014124647", + "strength": -34, + "frequencyMhz": 2437 + }, + { + "mac": "220676014124646", + "strength": -47, + "frequencyMhz": 5180 + }, + { + "mac": "93672086150526", + "strength": -48, + "frequencyMhz": 2412 + }, + { + "mac": "251425092175323", + "strength": -81, + "frequencyMhz": 2412 + } + ] + ] + }, + "accessPoint": { + "type": "object", + "title": "Access Point", + "description": "Information about a specific wireless access point or router.", + "examples": [ + { + "mac": "220676014124647", + "strength": -34, + "frequencyMhz": 2437 + } + ], + "properties": { + "mac": { + "type": "string", + "title": "MAC Address", + "description": "MAC address of the access point as an integer. MAC addresses typically consist of 48 bits (6 bytes), so it is likely the value found here needs to be interpreted as a 6 byte integer (which when converted to its hexadecimal representation results in a more typical representation for MAC addresses).", + "examples": [ + "220676014124647" + ] + }, + "strength": { + "type": "integer", + "title": "Strength", + "description": "Strength of the signal in dBm (decibels per milliwatt) of the access point.", + "examples": [ + -34 + ] + }, + "frequencyMhz": { + "type": "integer", + "title": "Frequency (MHz)", + "description": "Frequency of the signal (in MHz) that the access point is using.", + "examples": [ + 2437 + ] + }, + "isConnected": { + "type": "boolean", + "title": "Is Connected", + "description": "Whether the device that scanned the access point is connected to it.", + "examples": [ + true + ] + } + } + }, + "wifiScan": { + "type": "object", + "title": "Wi-Fi Scan", + "description": "Information about the access points found in a Wi-Fi scan done by the device.", + "examples": [ + { + "accessPoints": [ + { + "mac": "220676014124647", + "strength": -34, + "frequencyMhz": 2437 + }, + { + "mac": "220676014124646", + "strength": -47, + "frequencyMhz": 5180 + }, + { + "mac": "93672086150526", + "strength": -48, + "frequencyMhz": 2412 + }, + { + "mac": "251425092175323", + "strength": -81, + "frequencyMhz": 2412 + } + ] + } + ], + "properties": { + "accessPoints": { + "type": "array", + "title": "Access Points", + "description": "List of Wi-Fi access points found with the scan.", + "$ref": "#/$defs/accessPoints" + } + } + }, + "locationMetadata": { + "type": "object", + "title": "Location Metadata", + "description": "Information about a Wi-Fi scan done by the device at a given timestamp.", + "properties": { + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp", + "description": "Timestamp (as an ISO 8601 string) of the location metadata.", + "examples": [ + "2022-01-12T17:18:24.190Z" + ] + }, + "wifiScan": { + "type": "object", + "title": "Wi-Fi Scan", + "description": "Information about the access points found in a Wi-Fi scan done by the device.", + "$ref": "#/$defs/wifiScan" + } + } + } + } +} diff --git a/schemas/Semantic.schema.json b/schemas/Semantic.schema.json new file mode 100644 index 0000000..19c34fe --- /dev/null +++ b/schemas/Semantic.schema.json @@ -0,0 +1,1817 @@ +{ + "$id": "https://locationhistoryformat.com/schemas/Semantic.schema.json", + "$schema": "http://json-schema.org/draft/2020-12/schema", + "type": "object", + "title": "Semantic Location History", + "description": "A Semantic Location History JSON file in a Google Takeout Location History extraction. Contains Semantic Location History information from the user's account. Typically this will be a file containing data for a single month, with a name such as `2021_JANUARY.json`.", + "required": [ + "timelineObjects" + ], + "properties": { + "timelineObjects": { + "type": "array", + "title": "Timeline Objects", + "description": "List of all available semantic information, in chronological order. Each item in the list is either an ![#/$defs/activitySegment] or a ![#/$defs/placeVisit], encapsulated in a generic ![#/properties/timelineObjects/items].", + "items": { + "type": "object", + "title": "Timeline Object", + "description": "Encapsulates either an ![#/$defs/activitySegment] or a ![#/$defs/placeVisit], depending on the single key found.", + "oneOf": [ + { + "type": "object", + "properties": { + "activitySegment": { + "$ref": "#/$defs/activitySegment" + } + }, + "required": [ + "activitySegment" + ] + }, + { + "type": "object", + "properties": { + "placeVisit": { + "$ref": "#/$defs/placeVisit" + } + }, + "required": [ + "placeVisit" + ] + } + ] + } + } + }, + "$defs": { + "activitySegment": { + "type": "object", + "title": "Activity Segment", + "description": "An activity involving changes in location, usually a journey from one place to another, such as a walk, a car drive, a bus ride, or a flight.", + "examples": [ + { + "activitySegment": { + "startLocation": { + "latitudeE7": 414083590, + "longitudeE7": 21704229, + "sourceInfo": { + "deviceTag": 1114211210 + } + }, + "endLocation": { + "latitudeE7": 413961889, + "longitudeE7": 21536695, + "sourceInfo": { + "deviceTag": 1114211210 + } + }, + "duration": { + "startTimestamp": "2022-03-03T12:22:24Z", + "endTimestamp": "2022-03-03T12:43:34Z" + }, + "distance": 2640, + "activityType": "IN_BUS", + "confidence": "HIGH", + "activities": [ + { + "activityType": "IN_BUS", + "probability": 85.6847882270813 + }, + { + "activityType": "WALKING", + "probability": 8.418431878089905 + }, + { + "activityType": "IN_PASSENGER_VEHICLE", + "probability": 2.8303226456046104 + }, + { + "activityType": "STILL", + "probability": 1.7383299767971039 + }, + { + "activityType": "IN_SUBWAY", + "probability": 0.4673520103096962 + }, + { + "activityType": "IN_TRAIN", + "probability": 0.3031305968761444 + }, + { + "activityType": "IN_TRAM", + "probability": 0.269505986943841 + }, + { + "activityType": "CYCLING", + "probability": 0.1483310479670763 + } + ], + "transitPath": { + "transitStops": [ + { + "latitudeE7": 414083140, + "longitudeE7": 21704000, + "placeId": "ChIJWey1zMWipBIRiNQSzpI4EDQ", + "address": "08025 Barcelona\nEspaña", + "name": "Sant Antoni Maria Claret-Lepant" + }, + { + "latitudeE7": 414066427, + "longitudeE7": 21681608, + "placeId": "ChIJ3Wr_xsaipBIRctQDPNF0IHM", + "address": "08025 Barcelona\nEspaña", + "name": "Sant Antoni Maria Claret - Sardenya" + }, + { + "latitudeE7": 414049343, + "longitudeE7": 21659001, + "placeId": "ChIJh2lnv8CipBIRpH0ym2Bxo68", + "address": "08025 Barcelona\nEspaña", + "name": "Sant Antoni Maria Claret - Nàpols" + } + ], + "name": "H8", + "hexRgbColor": "009EE0", + "linePlaceId": "ChIJQVEUoLuipBIRJO37wI4yyBs", + "stopTimesInfo": [ + { + "scheduledDepartureTimestamp": "2022-03-03T12:42:00Z", + "realtimeDepartureTimestamp": "2022-03-03T12:43:37Z" + }, + { + "scheduleArrivalTimestamp": "2022-03-03T12:44:01Z", + "scheduledDepartureTimestamp": "2022-03-03T12:44:01Z", + "realtimeArrivalTimestamp": "2022-03-03T12:45:38Z", + "realtimeDepartureTimestamp": "2022-03-03T12:45:38Z" + }, + { + "scheduleArrivalTimestamp": "2022-03-03T12:46:03Z", + "scheduledDepartureTimestamp": "2022-03-03T12:46:03Z", + "realtimeArrivalTimestamp": "2022-03-03T12:47:40Z", + "realtimeDepartureTimestamp": "2022-03-03T12:47:40Z" + }, + { + "scheduleArrivalTimestamp": "2022-03-03T12:48:00Z", + "scheduledDepartureTimestamp": "2022-03-03T12:48:00Z", + "realtimeArrivalTimestamp": "2022-03-03T12:49:37Z", + "realtimeDepartureTimestamp": "2022-03-03T12:49:37Z" + } + ], + "source": "INFERRED", + "confidence": 0.9155850640140931, + "distanceMeters": 2341.0 + }, + "simplifiedRawPath": { + "points": [ + { + "latE7": 414032766, + "lngE7": 21641819, + "accuracyMeters": 10, + "timestamp": "2022-03-03T12:27:48Z" + }, + { + "latE7": 414016705, + "lngE7": 21661614, + "accuracyMeters": 13, + "timestamp": "2022-03-03T12:30:04Z" + }, + { + "latE7": 413986545, + "lngE7": 21623960, + "accuracyMeters": 12, + "timestamp": "2022-03-03T12:33:51Z" + }, + { + "latE7": 413976870, + "lngE7": 21610201, + "accuracyMeters": 11, + "timestamp": "2022-03-03T12:37:09Z" + }, + { + "latE7": 413968976, + "lngE7": 21609892, + "accuracyMeters": 13, + "timestamp": "2022-03-03T12:38:50Z" + }, + { + "latE7": 413955345, + "lngE7": 21551848, + "accuracyMeters": 11, + "timestamp": "2022-03-03T12:42:06Z" + } + ], + "source": "INFERRED", + "distanceMeters": 2413.400132766728 + } + } + } + ], + "properties": { + "startLocation": { + "type": "object", + "title": "Start Location", + "description": "Start location of the activity.", + "$ref": "#/$defs/location" + }, + "endLocation": { + "type": "object", + "title": "End Location", + "description": "End location of the activity.", + "$ref": "#/$defs/location" + }, + "duration": { + "type": "object", + "title": "Duration", + "description": "Duration of the activity.", + "$ref": "#/$defs/duration" + }, + "distance": { + "type": "integer", + "title": "Distance", + "description": "Distance traveled during the activity, in meters.", + "examples": [ + 292 + ], + "minimum": 0 + }, + "activityType": { + "type": "string", + "title": "Activity Type", + "description": "Best match activity type. Corresponds to the activity type with the highest probability in [#/$defs/activitySegment/properties/activities].", + "$ref": "#/$defs/activityType", + "examples": [ + "WALKING" + ] + }, + "activities": { + "type": "array", + "title": "Activities", + "description": "List of all the considered candidate activity types and their probabilities. The sum of all the probabilities is always <= 100.", + "items": { + "$ref": "#/$defs/activity" + }, + "examples": [ + [ + { + "activityType": "WALKING", + "probability": 95.93904614448547 + }, + { + "activityType": "IN_PASSENGER_VEHICLE", + "probability": 1.5546560287475586 + } + ] + ] + }, + "confidence": { + "type": "string", + "title": "Confidence", + "description": "Confidence that the chosen activity type (see [#/$defs/activitySegment/properties/activityType]) is correct. One of: `LOW`, `MEDIUM`, `HIGH` or `UNKNOWN_CONFIDENCE`. Activities that have been manually confirmed always have a confidence of `HIGH`.", + "examples": [ + "HIGH" + ], + "enum": [ + "LOW", + "MEDIUM", + "HIGH", + "UNKNOWN_CONFIDENCE" + ] + }, + "waypointPath": { + "type": "object", + "title": "Waypoint Path", + "description": "", + "examples": [ + { + "waypoints": [ + { + "latE7": 416119834, + "lngE7": 21768624 + }, + { + "latE7": 416117012, + "lngE7": 21899302 + }, + { + "latE7": 416119262, + "lngE7": 21802315 + } + ], + "source": "INFERRED", + "distanceMeters": 396.34176716755843, + "travelMode": "WALK", + "confidence": 0.7986568220419046 + } + ], + "properties": { + "waypoints": { + "type": "array", + "title": "Waypoints", + "description": "", + "items": { + "$ref": "#/$defs/waypoint" + }, + "examples": [ + [ + { + "latE7": 416119834, + "lngE7": 21768624 + }, + { + "latE7": 416117012, + "lngE7": 21899302 + } + ] + ] + }, + "source": { + "type": "string", + "title": "Source", + "description": "Source of the location data of the path. Either `BACKFILLED` or `INFERRED`.", + "examples": [ + "INFERRED" + ], + "enum": [ + "BACKFILLED", + "INFERRED" + ] + }, + "distanceMeters": { + "type": "number", + "title": "Distance in meters", + "description": "Total distance of the path, in meters.", + "examples": [ + 396.34176716755843 + ] + }, + "travelMode": { + "type": "string", + "title": "Travel Mode", + "description": "", + "examples": [ + "WALK" + ], + "enum": [ + "WALK", + "DRIVE", + "BICYCLE" + ] + }, + "confidence": { + "type": "number", + "title": "Confidence", + "description": "", + "examples": [ + 0.7986568220419046 + ] + }, + "roadSegment": { + "type": "array", + "title": "Road Segment", + "description": "", + "items": { + "type": "object", + "title": "Road Segment", + "description": "", + "properties": { + "duration": { + "type": "string", + "title": "Duration", + "description": "", + "examples": [ + "8s" + ] + }, + "placeId": { + "type": "string", + "title": "Place ID", + "description": "Google Maps [Place ID](https://developers.google.com/maps/documentation/places/web-service/place-id) of the location.", + "examples": [ + "ChIJk_s92NyipBIRUMnDG8Kq2Js" + ] + } + } + }, + "examples": [ + [ + { + "placeId": "ChIJ78lmnGGYpBIRYiA-sq-lZpA", + "duration": "1s" + }, + { + "placeId": "ChIJax30s2GYpBIRUasE5NiNFJY", + "duration": "23s" + }, + { + "placeId": "ChIJe3WC5GCYpBIR0z7IXPJj23k", + "duration": "5s" + }, + { + "placeId": "ChIJrzu_5mCYpBIRb8LMACSNRhU", + "duration": "4s" + }, + { + "placeId": "ChIJBynC2mCYpBIRz56Otx0P2So", + "duration": "3s" + } + ] + ] + } + } + }, + "simplifiedRawPath": { + "type": "object", + "title": "Simplified Raw Path", + "description": "", + "$ref": "#/$defs/simplifiedRawPath" + }, + "transitPath": { + "type": "object", + "title": "Transit Path", + "description": "Path taken in a public transit system, such as a bus or a metro.", + "$ref": "#/$defs/transitPath" + }, + "parkingEvent": { + "type": "object", + "title": "Parking Event", + "description": "", + "$ref": "#/$defs/parkingEvent" + }, + "editConfirmationStatus": { + "type": "string", + "title": "Edit-Confirmation Status", + "description": "Whether the user has manually edited the activity segment. Can be `NOT_CONFIRMED` or `CONFIRMED`.", + "$ref": "#/$defs/editConfirmationStatus" + }, + "editActionMetadata": { + "type": "object", + "title": "Edit-Action Metadata", + "description": "", + "$ref": "#/$defs/editActionMetadata" + }, + "lastEditedTimestamp": { + "type": "string", + "format": "date-time", + "title": "Last-Edited Timestamp", + "description": "", + "examples": [ + "2022-03-06T14:13:11.092Z" + ] + } + } + }, + "placeVisit": { + "type": "object", + "title": "Place Visit", + "description": "A visit or stay at a place in a fixed location for a duration of time, such as a stay at home, at work, a visit to a shopping mall, or to a restaurant.", + "properties": { + "location": { + "type": "object", + "title": "Location", + "description": "Location of the place.", + "$ref": "#/$defs/location" + }, + "centerLatE7": { + "type": "integer", + "title": "Center Latitude", + "description": "Latitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).", + "examples": [ + 414216106 + ], + "minimum": -900000000, + "maximum": 900000000 + }, + "centerLngE7": { + "type": "integer", + "title": "Center Longitude", + "description": "Longitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).", + "examples": [ + 21684775 + ], + "minimum": -1800000000, + "maximum": 1800000000 + }, + "duration": { + "type": "object", + "title": "Duration", + "description": "Duration of the place visit.", + "$ref": "#/$defs/duration" + }, + "placeConfidence": { + "type": "string", + "title": "Place Confidence", + "description": "Categorized confidence for this place visit. One of: `LOW_CONFIDENCE`, `MEDIUM_CONFIDENCE`, `HIGH_CONFIDENCE` or `USER_CONFIRMED`.", + "examples": [ + "HIGH" + ], + "enum": [ + "LOW_CONFIDENCE", + "MEDIUM_CONFIDENCE", + "HIGH_CONFIDENCE", + "USER_CONFIRMED" + ], + "helpWanted": "Is this directly related to [#/$defs/placeVisit/properties/locationConfidence] and/or [#/$defs/placeVisit/properties/visitConfidence]" + }, + "visitConfidence": { + "type": "integer", + "title": "Visit Confidence", + "description": "", + "examples": [ + 95 + ], + "minimum": 0, + "maximum": 100, + "helpWanted": "How is this different from [#/$defs/placeVisit/properties/locationConfidence]" + }, + "locationConfidence": { + "type": "integer", + "title": "Visit Confidence", + "description": "", + "examples": [ + 71 + ], + "minimum": 0, + "maximum": 100, + "helpWanted": "How is this different from [#/$defs/placeVisit/properties/visitConfidence]" + }, + "otherCandidateLocations": { + "type": "array", + "title": "Other Candidate Locations", + "description": "", + "items": { + "$ref": "#/$defs/location" + } + }, + "childVisits": { + "type": "array", + "title": "Child Visits", + "description": "", + "items": { + "$ref": "#/$defs/placeVisit" + } + }, + "sectionId": { + "type": "string", + "title": "Section ID", + "description": "" + }, + "simplifiedRawPath": { + "type": "object", + "title": "Simplified Raw Path", + "description": "", + "$ref": "#/$defs/simplifiedRawPath" + }, + "placeVisitLevel": { + "type": "integer", + "title": "Place Visit Level", + "description": "Level (depth) of this place visit. This value increases by 1 with each recursive access to a [#/$defs/placeVisit/properties/childVisits] entry.", + "examples": [ + 1 + ], + "minimum": 0 + }, + "editConfirmationStatus": { + "type": "string", + "title": "Edit-Confirmation Status", + "description": "Whether the user has manually edited the place visit. Can be `NOT_CONFIRMED` or `CONFIRMED`.", + "$ref": "#/$defs/editConfirmationStatus" + }, + "editActionMetadata": { + "type": "object", + "title": "Edit-Action Metadata", + "description": "", + "$ref": "#/$defs/editActionMetadata" + }, + "lastEditedTimestamp": { + "type": "string", + "format": "date-time", + "title": "Last-Edited Timestamp", + "description": "", + "examples": [ + "2022-03-06T14:13:11.092Z" + ] + }, + "placeVisitType": { + "type": "string", + "title": "Place Visit Type", + "description": "Can be `SINGLE_PLACE`.", + "examples": [ + "SINGLE_PLACE" + ], + "enum": [ + "SINGLE_PLACE" + ], + "helpWanted": "Are there other valid values?" + }, + "placeVisitImportance": { + "type": "string", + "title": "Place Visit Importance", + "description": "One of `MAIN` or `TRANSITIONAL`.", + "examples": [ + "MAIN" + ], + "enum": [ + "MAIN", + "TRANSITIONAL" + ] + }, + "locationAssertionType": { + "type": "string", + "title": "Location Assertion Type", + "description": "", + "examples": [ + "AREA" + ], + "enum": [ + "AREA", + "WITHIN_OR_AT" + ] + }, + "checkin": { + "type": "object", + "title": "Checkin", + "description": "", + "properties": { + "atTime": { + "type": "string", + "format": "date-time", + "title": "At Time", + "description": "", + "examples": [ + "2022-03-06T14:13:11.092Z" + ] + }, + "latestKnownLocation": { + "type": "object", + "title": "Latest Known Location", + "description": "", + "properties": { + "location": { + "type": "object", + "title": "Location", + "description": "", + "$ref": "#/$defs/location" + }, + "detectionTime": { + "type": "string", + "format": "date-time", + "title": "Detection Time", + "description": "", + "examples": [ + "2022-03-06T14:13:11.092Z" + ] + } + } + }, + "device": { + "type": "object", + "title": "Device", + "description": "", + "properties": { + "android": { + "type": "object", + "title": "Android", + "description": "", + "properties": { + "fingerprint": { + "type": "string", + "title": "Fingerprint", + "description": "", + "examples": [] + } + } + } + } + } + }, + "helpWanted": "The meaning of this field is uncertain." + } + } + }, + "location": { + "type": "object", + "title": "Location", + "description": "", + "examples": [ + { + "latitudeE7": 414036299, + "longitudeE7": 21743558, + "placeId": "ChIJk_s92NyipBIRUMnDG8Kq2Js", + "address": "C/ de Mallorca, 401\n08013 Barcelona\nEspanya", + "name": "La Sagrada Familia", + "semanticType": "TYPE_SEARCHED_ADDRESS", + "sourceInfo": { + "deviceTag": 1234567890 + }, + "locationConfidence": 87.07311, + "calibratedProbability": 76.20023 + } + ], + "properties": { + "latitudeE7": { + "type": "integer", + "title": "Latitude", + "description": "Latitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).", + "examples": [ + 414216106 + ], + "minimum": -900000000, + "maximum": 900000000 + }, + "longitudeE7": { + "type": "integer", + "title": "Longitude", + "description": "Longitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).", + "examples": [ + 21684775 + ], + "minimum": -1800000000, + "maximum": 1800000000 + }, + "placeId": { + "type": "string", + "title": "Place ID", + "description": "Google Maps [Place ID](https://developers.google.com/maps/documentation/places/web-service/place-id) of the location.", + "examples": [ + "ChIJk_s92NyipBIRUMnDG8Kq2Js" + ] + }, + "address": { + "type": "string", + "title": "Address", + "description": "Address of the location.", + "examples": [ + "C/ de Mallorca, 401\n08013 Barcelona\nEspanya" + ] + }, + "name": { + "type": "string", + "title": "Name", + "description": "Name of the location.", + "examples": [ + "La Sagrada Familia" + ] + }, + "semanticType": { + "type": "string", + "title": "Semantic Type", + "description": "Place type based on semantic information specific to the user.", + "$ref": "#/$defs/semanticType", + "examples": [ + "TYPE_HOME" + ] + }, + "accuracyMetres": { + "type": "integer", + "title": "Accuracy in meters", + "description": "Approximate accuracy radius of the location measurement, in meters. A lower value means better precision.", + "examples": [ + 19 + ], + "minimum": 0 + }, + "locationConfidence": { + "type": "number", + "title": "Location Confidence", + "description": "", + "examples": [ + 100.0 + ], + "minimum": 0, + "maximum": 100 + }, + "isCurrentLocation": { + "type": "boolean", + "title": "Is Current Location", + "description": "", + "examples": [ + true + ] + }, + "calibratedProbability": { + "type": "number", + "title": "Calibrated Probability", + "description": "", + "examples": [ + 100.0 + ], + "minimum": 0, + "maximum": 100 + }, + "sourceInfo": { + "type": "object", + "title": "Source Information", + "description": "Information on the source that provided the location.", + "properties": { + "deviceTag": { + "type": "integer", + "title": "Device Tag", + "description": "Integer identifier (specific to Location History) associated with the device that obtained the location. Refer to `deviceSettings` in Settings.json for information about the device with this `deviceTag`.", + "examples": [ + 1234567890 + ] + } + } + } + } + }, + "duration": { + "type": "object", + "title": "Duration", + "description": "Duration of time defined by a start timestamp and an end timestamp.", + "examples": [ + { + "startTimestamp": "2022-02-02T10:41:08.315Z", + "endTimestamp": "2022-02-02T10:45:09.962Z" + } + ], + "required": [ + "startTimestamp", + "endTimestamp" + ], + "properties": { + "startTimestamp": { + "type": "string", + "format": "date-time", + "title": "Start Timestamp", + "description": "", + "examples": [ + "2022-02-02T10:41:08.315Z" + ] + }, + "endTimestamp": { + "type": "string", + "format": "date-time", + "title": "End Timestamp", + "description": "", + "examples": [ + "2022-02-02T10:45:09.962Z" + ] + } + } + }, + "activity": { + "type": "object", + "title": "Activity", + "description": "", + "examples": [ + { + "activityType": "WALKING", + "probability": 95.93904614448547 + } + ], + "properties": { + "activityType": { + "type": "string", + "title": "Activity Type", + "description": "Type of activity.", + "$ref": "#/$defs/activityType" + }, + "probability": { + "type": "number", + "title": "Probability", + "description": "Probability (or confidence) that the activity type is correct, in the range 0 to 100.", + "examples": [ + 95.93904614448547 + ], + "minimum": 0, + "maximum": 100 + } + } + }, + "activityType": { + "type": "string", + "title": "Activity Type", + "description": "", + "examples": [ + "STILL" + ], + "oneOf": [ + { + "type": "string", + "const": "UNKNOWN_ACTIVITY_TYPE", + "title": "Moving", + "description": "", + "extra_color": "#03a9f4", + "extra_icon": "activity_types/moving_24dp.svg" + }, + { + "type": "string", + "const": "STILL", + "title": "Still", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/man_24dp.svg" + }, + { + "type": "string", + "const": "WALKING", + "title": "Walking", + "description": "", + "extra_color": "#03a9f4", + "extra_icon": "activity_types/directions_walk_24dp.svg" + }, + { + "type": "string", + "const": "CYCLING", + "title": "Cycling", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/directions_bike_24dp.svg" + }, + { + "type": "string", + "const": "IN_VEHICLE", + "title": "In a vehicle", + "description": "", + "extra_color": "#03a9f4", + "extra_icon": "activity_types/moving_24dp.svg" + }, + { + "type": "string", + "const": "FLYING", + "title": "Flying", + "description": "", + "extra_color": "#3f51b5", + "extra_icon": "activity_types/local_airport_24dp.svg" + }, + { + "type": "string", + "const": "RUNNING", + "title": "Running", + "description": "", + "extra_color": "#c2185b", + "extra_icon": "activity_types/directions_run_24dp.svg" + }, + { + "type": "string", + "const": "IN_BUS", + "title": "On a bus", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/directions_bus_24dp.svg" + }, + { + "type": "string", + "const": "IN_TRAIN", + "title": "On a train", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/directions_railway_24dp.svg" + }, + { + "type": "string", + "const": "IN_SUBWAY", + "title": "On the subway", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/subway_24dp.svg" + }, + { + "type": "string", + "const": "IN_TRAM", + "title": "On a tram", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/tram_24dp.svg" + }, + { + "type": "string", + "const": "IN_FERRY", + "title": "On a ferry", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/directions_boat_24dp.svg" + }, + { + "type": "string", + "const": "IN_CABLECAR", + "title": "In a cable car", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/moving_24dp.svg" + }, + { + "type": "string", + "const": "IN_FUNICULAR", + "title": "On a funicular", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/moving_24dp.svg" + }, + { + "type": "string", + "const": "HIKING", + "title": "Hiking", + "description": "", + "extra_color": "#c2185b", + "extra_icon": "activity_types/hiking_24dp.svg" + }, + { + "type": "string", + "const": "KAYAKING", + "title": "Kayaking", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/kayaking_24dp.svg" + }, + { + "type": "string", + "const": "KITESURFING", + "title": "Kitesurfing", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/kitesurfing_24dp.svg" + }, + { + "type": "string", + "const": "ROWING", + "title": "Rowing", + "description": "", + "extra_color": "#c2185b", + "extra_icon": "activity_types/rowing_24dp.svg" + }, + { + "type": "string", + "const": "SAILING", + "title": "Sailing", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/sailing_24dp.svg" + }, + { + "type": "string", + "const": "SKATING", + "title": "Skating", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/ice_skating_24dp.svg" + }, + { + "type": "string", + "const": "SKIING", + "title": "Skiing", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/downhill_skiing_24dp.svg" + }, + { + "type": "string", + "const": "SKATEBOARDING", + "title": "Skateboarding", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/skateboarding_24dp.svg" + }, + { + "type": "string", + "const": "SLEDDING", + "title": "Sledding", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/sledding_24dp.svg" + }, + { + "type": "string", + "const": "SNOWBOARDING", + "title": "Snowboarding", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/snowboarding_24dp.svg" + }, + { + "type": "string", + "const": "SNOWMOBILE", + "title": "Snowmobiling", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/snowmobile_24dp.svg" + }, + { + "type": "string", + "const": "SNOWSHOEING", + "title": "Snowshoeing", + "description": "", + "extra_color": "#c2185b", + "extra_icon": "activity_types/snowshoeing_24dp.svg" + }, + { + "type": "string", + "const": "SURFING", + "title": "Surfing", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/surfing_24dp.svg" + }, + { + "type": "string", + "const": "SWIMMING", + "title": "Swimming", + "description": "", + "extra_color": "#c2185b", + "extra_icon": "activity_types/pool_24dp.svg" + }, + { + "type": "string", + "const": "WALKING_NORDIC", + "title": "Nordic walking", + "description": "", + "extra_color": "#c2185b", + "extra_icon": "activity_types/nordic_walking_24dp.svg" + }, + { + "type": "string", + "const": "IN_PASSENGER_VEHICLE", + "title": "Driving", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/directions_car_24dp.svg" + }, + { + "type": "string", + "const": "MOTORCYCLING", + "title": "Motorcycling", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/motorcycle_24dp.svg" + }, + { + "type": "string", + "const": "BOATING", + "title": "Boating", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/directions_boat_24dp.svg" + }, + { + "type": "string", + "const": "IN_WHEELCHAIR", + "title": "By wheelchair", + "description": "", + "extra_color": "#03a9f4", + "extra_icon": "activity_types/accessible_forward_24dp.svg" + }, + { + "type": "string", + "const": "HORSEBACK_RIDING", + "title": "Horseback riding", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/moving_24dp.svg" + }, + { + "type": "string", + "const": "IN_GONDOLA_LIFT", + "title": "In a gondola lift", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/moving_24dp.svg" + }, + { + "type": "string", + "const": "CATCHING_POKEMON", + "title": "Catching Pok\u00e9mon", + "description": "", + "extra_color": "#db4437", + "extra_icon": "activity_types/catching_pokemon_24dp.svg" + }, + { + "type": "string", + "const": "IN_TAXI", + "title": "In a taxi", + "description": "", + "extra_color": "#01579b", + "extra_icon": "activity_types/local_taxi_24dp.svg" + }, + { + "type": "string", + "const": "PARAGLIDING", + "title": "Paragliding", + "description": "", + "extra_color": "#4db6ac", + "extra_icon": "activity_types/paragliding_24dp.svg" + } + ] + }, + "semanticType": { + "type": "string", + "title": "Semantic Type", + "description": "Place type based on semantic information specific to the user.", + "examples": [ + "TYPE_HOME" + ], + "oneOf": [ + { + "type": "string", + "const": "TYPE_HOME", + "title": "Type Home", + "description": "The place has been designated as 'Home' by the user. See: [Set or change your home & work addresses](https://support.google.com/maps/answer/3093979?hl=en).", + "extra_color": "#03a9f4", + "extra_icon": "semantic_types/home_circled_24dp.svg" + }, + { + "type": "string", + "const": "TYPE_WORK", + "title": "Type Work", + "description": "The place has been designated as 'Work' by the user. See: [Set or change your home & work addresses](https://support.google.com/maps/answer/3093979?hl=en).", + "extra_color": "#03a9f4", + "extra_icon": "semantic_types/work_circled_24dp.svg" + }, + { + "type": "string", + "const": "TYPE_SEARCHED_ADDRESS", + "title": "Type Searched Address", + "description": "The user has searched for this place in the past.", + "extra_color": "#03a9f4", + "extra_icon": "semantic_types/schedule_circled_24dp.svg" + }, + { + "type": "string", + "const": "TYPE_ALIASED_LOCATION", + "title": "Type Aliased Location", + "description": "The place has been given a private label by the user. See: [Give a place a private label](https://support.google.com/maps/answer/6257830?hl=en).", + "extra_color": "#03a9f4", + "extra_icon": "semantic_types/label_circled_24dp.svg" + } + ] + }, + "simplifiedRawPath": { + "type": "object", + "title": "Simplified Raw Path", + "description": "", + "examples": [ + { + "points": [ + { + "latE7": 416032766, + "lngE7": 21841819, + "accuracyMeters": 10, + "timestamp": "2022-03-03T08:27:48Z" + }, + { + "latE7": 416016705, + "lngE7": 21861614, + "accuracyMeters": 13, + "timestamp": "2022-03-03T08:30:04Z" + }, + { + "latE7": 415986545, + "lngE7": 21823960, + "accuracyMeters": 12, + "timestamp": "2022-03-03T08:33:51Z" + } + ], + "source": "INFERRED", + "distanceMeters": 2413.400132766728 + } + ], + "properties": { + "points": { + "type": "array", + "title": "Points", + "description": "List of all the recorded points that form the path.", + "items": { + "$ref": "#/$defs/point" + }, + "examples": [ + [ + { + "latE7": 416032766, + "lngE7": 21841819, + "accuracyMeters": 10, + "timestamp": "2022-03-03T08:27:48Z" + }, + { + "latE7": 416016705, + "lngE7": 21861614, + "accuracyMeters": 13, + "timestamp": "2022-03-03T08:30:04Z" + }, + { + "latE7": 415986545, + "lngE7": 21823960, + "accuracyMeters": 12, + "timestamp": "2022-03-03T08:33:51Z" + } + ] + ] + }, + "source": { + "type": "string", + "title": "Source", + "description": "Source of the location data of the path. One of `BACKFILLED`, `INFERRED`, or `RESNAPPED_FOR_EDIT`.", + "examples": [ + "INFERRED" + ], + "enum": [ + "BACKFILLED", + "INFERRED", + "RESNAPPED_FOR_EDIT" + ] + }, + "distanceMeters": { + "type": "number", + "title": "Distance in meters", + "description": "Distance traveled with the path, in meters.", + "examples": [ + 2413.400132766728 + ], + "minimum": 0 + } + } + }, + "transitPath": { + "type": "object", + "title": "Transit Path", + "description": "A path taken in a public transit system, such as a bus or a metro. Note that it does not describe an entire transit line, but only a specific journey a user does in a transit line.", + "examples": [ + { + "transitStops": [ + { + "latitudeE7": 414083140, + "longitudeE7": 21704000, + "placeId": "ChIJWey1zMWipBIRiNQSzpI4EDQ", + "address": "08025 Barcelona\nEspaña", + "name": "Sant Antoni Maria Claret-Lepant" + }, + { + "latitudeE7": 414066427, + "longitudeE7": 21681608, + "placeId": "ChIJ3Wr_xsaipBIRctQDPNF0IHM", + "address": "08025 Barcelona\nEspaña", + "name": "Sant Antoni Maria Claret - Sardenya" + }, + { + "latitudeE7": 414049343, + "longitudeE7": 21659001, + "placeId": "ChIJh2lnv8CipBIRpH0ym2Bxo68", + "address": "08025 Barcelona\nEspaña", + "name": "Sant Antoni Maria Claret - Nàpols" + } + ], + "name": "H8", + "hexRgbColor": "009EE0", + "linePlaceId": "ChIJQVEUoLuipBIRJO37wI4yyBs", + "stopTimesInfo": [ + { + "scheduledDepartureTimestamp": "2022-03-03T12:42:00Z", + "realtimeDepartureTimestamp": "2022-03-03T12:43:37Z" + }, + { + "scheduleArrivalTimestamp": "2022-03-03T12:44:01Z", + "scheduledDepartureTimestamp": "2022-03-03T12:44:01Z", + "realtimeArrivalTimestamp": "2022-03-03T12:45:38Z", + "realtimeDepartureTimestamp": "2022-03-03T12:45:38Z" + }, + { + "scheduleArrivalTimestamp": "2022-03-03T12:46:03Z", + "scheduledDepartureTimestamp": "2022-03-03T12:46:03Z", + "realtimeArrivalTimestamp": "2022-03-03T12:47:40Z", + "realtimeDepartureTimestamp": "2022-03-03T12:47:40Z" + }, + { + "scheduleArrivalTimestamp": "2022-03-03T12:48:00Z", + "scheduledDepartureTimestamp": "2022-03-03T12:48:00Z", + "realtimeArrivalTimestamp": "2022-03-03T12:49:37Z", + "realtimeDepartureTimestamp": "2022-03-03T12:49:37Z" + } + ], + "source": "INFERRED", + "confidence": 0.9155850640140931, + "distanceMeters": 2341.0 + } + ], + "properties": { + "transitStops": { + "type": "array", + "title": "Transit Stops", + "description": "List of locations of the transit stops used.", + "items": { + "$ref": "#/$defs/location" + } + }, + "name": { + "type": "string", + "title": "Name", + "description": "Name of the transit line.", + "examples": [ + "H8" + ] + }, + "hexRgbColor": { + "type": "string", + "title": "Hexadecimal RGB Color", + "description": "Color of the transit line in hexadecimal in the form *RRGGBB*.", + "examples": [ + "009EE0" + ] + }, + "linePlaceId": { + "type": "string", + "title": "Line Place ID", + "description": "Google Maps [Place ID](https://developers.google.com/maps/documentation/places/web-service/place-id) of the transit line.", + "examples": [ + "ChIJQVEUoLuipBIRJO37wI4yyBs" + ] + }, + "stopTimesInfo": { + "type": "array", + "title": "Stop Times Info", + "description": "Time information (departure and arrival times, both real and scheduled) for each transit stop used.", + "items": { + "type": "object", + "title": "Stop Time Info", + "description": "Departure and/or arrival time information (both real and scheduled) for a stop at a transit line.", + "examples": [ + { + "scheduleArrivalTimestamp": "2022-03-03T12:44:01Z", + "scheduledDepartureTimestamp": "2022-03-03T12:44:01Z", + "realtimeArrivalTimestamp": "2022-03-03T12:45:38Z", + "realtimeDepartureTimestamp": "2022-03-03T12:45:38Z" + } + ], + "properties": { + "scheduleArrivalTimestamp": { + "type": "string", + "format": "date-time", + "title": "Schedule Arrival Timestamp", + "description": "", + "examples": [ + "2022-03-03T12:44:01Z" + ] + }, + "scheduledDepartureTimestamp": { + "type": "string", + "format": "date-time", + "title": "Scheduled Departure Timestamp", + "description": "", + "examples": [ + "2022-03-03T12:44:01Z" + ] + }, + "realtimeArrivalTimestamp": { + "type": "string", + "format": "date-time", + "title": "Realtime Arrival Timestamp", + "description": "", + "examples": [ + "2022-03-03T12:45:38Z" + ] + }, + "realtimeDepartureTimestamp": { + "type": "string", + "format": "date-time", + "title": "Realtime Departure Timestamp", + "description": "", + "examples": [ + "2022-03-03T12:45:38Z" + ] + } + } + } + }, + "source": { + "type": "string", + "title": "Source", + "description": "Source of the location data of the transit path. Either `BACKFILLED` or `INFERRED`.", + "examples": [ + "INFERRED" + ], + "enum": [ + "BACKFILLED", + "INFERRED" + ] + }, + "confidence": { + "type": "number", + "title": "Confidence", + "description": "", + "examples": [ + 0.9155850640140931 + ], + "minimum": 0, + "maximum": 1 + }, + "distanceMeters": { + "type": "number", + "title": "Distance in meters", + "description": "Distance traveled with the transit path, in meters.", + "examples": [ + 396.34176716755843 + ], + "minimum": 0 + } + } + }, + "waypoint": { + "type": "object", + "title": "Waypoint", + "description": "", + "examples": [ + { + "latE7": 414216106, + "lngE7": 21684775 + } + ], + "properties": { + "latE7": { + "type": "integer", + "title": "Latitude", + "description": "Latitude coordinate of the waypoint. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).", + "examples": [ + 414216106 + ], + "minimum": -900000000, + "maximum": 900000000 + }, + "lngE7": { + "type": "integer", + "title": "Longitude", + "description": "Longitude coordinate of the waypoint. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).", + "examples": [ + 21684775 + ], + "minimum": -1800000000, + "maximum": 1800000000 + } + } + }, + "point": { + "type": "object", + "title": "Point", + "description": "", + "examples": [ + { + "latE7": 416032766, + "lngE7": 21841819, + "accuracyMeters": 10, + "timestamp": "2022-03-03T08:27:48Z" + } + ], + "properties": { + "latE7": { + "type": "integer", + "title": "Latitude", + "description": "Latitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).", + "examples": [ + 414216106 + ], + "minimum": -900000000, + "maximum": 900000000 + }, + "lngE7": { + "type": "integer", + "title": "Longitude", + "description": "Longitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).", + "examples": [ + 21684775 + ], + "minimum": -1800000000, + "maximum": 1800000000 + }, + "accuracyMeters": { + "type": "integer", + "title": "Accuracy in meters", + "description": "Approximate accuracy radius of the location measurement, in meters. A lower value means better precision.", + "examples": [ + 10 + ] + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp", + "description": "Timestamp of the point.", + "examples": [ + "2022-03-03T08:27:48Z" + ] + } + } + }, + "editConfirmationStatus": { + "type": "string", + "title": "Edit Confirmation Status", + "description": "Indicates wether the user has manually edited the entry. Can be `NOT_CONFIRMED` or `CONFIRMED`.", + "examples": [ + "CONFIRMED" + ], + "enum": [ + "NOT_CONFIRMED", + "CONFIRMED" + ] + }, + "editActionMetadata": { + "type": "object", + "title": "Edit-Action Metadata", + "description": "", + "properties": { + "activitySegment": { + "type": "object", + "title": "Activity Segment", + "description": "", + "properties": { + "activityType": { + "type": "string", + "title": "Activity Type", + "description": "", + "$ref": "#/$defs/activityType", + "examples": [ + "WALKING" + ] + }, + "activityConfidence": { + "type": "number", + "title": "Confidence", + "description": "", + "examples": [ + 98.705695 + ], + "minimum": 0, + "maximum": 100 + } + } + }, + "placeVisitSegment": { + "type": "object", + "title": "Place Visit Segment", + "description": "", + "properties": { + "location": { + "type": "object", + "title": "Location", + "description": "", + "$ref": "#/$defs/location" + } + } + }, + "editHistory": { + "type": "object", + "title": "Edit History", + "description": "", + "properties": { + "editEvent": { + "type": "array", + "title": "Edit Event", + "description": "", + "items": { + "type": "object", + "title": "Edit Event", + "description": "", + "properties": { + "editOperation": { + "type": "array", + "title": "Edit Operation", + "description": "", + "items": { + "type": "string", + "title": "Edit Operation", + "description": "", + "examples": [ + "CREATE" + ], + "enum": [ + "CREATE", + "CONFIRM", + "MODIFY_TIME", + "MODIFY_LOCATION", + "MODIFY_ACTIVITY_TYPE", + "MODIFY_UNCHANGED" + ] + } + }, + "uiConfiguration": { + "type": "object", + "title": "UI Configuration", + "description": "", + "properties": { + "uiActivitySegmentConfiguration": { + "type": "string", + "title": "UI Activity Segment Configuration", + "description": "", + "examples": [ + "DEFAULT_ACTIVITY_SEGMENT_CONFIGURATION" + ], + "enum": [ + "DEFAULT_ACTIVITY_SEGMENT_CONFIGURATION", + "UNPERSONALIZED_EDIT_ACTIVITY_SEGMENT", + "UNKNOWN_UI_ACTIVITY_SEGMENT_CONFIGURATION" + ] + }, + "uiPlaceVisitConfiguration": { + "type": "string", + "title": "UI Place Visit Configuration", + "description": "", + "examples": [ + "DEFAULT_PLACE_VISIT_CONFIGURATION" + ], + "enum": [ + "DEFAULT_PLACE_VISIT_CONFIGURATION", + "YES_NO_OTHER_PLACE_VISIT", + "FORCED_NEIGHBORHOOD", + "UNPERSONALIZED_EDIT_PLACE_VISIT" + ] + } + } + } + } + } + } + } + }, + "originalCandidates": { + "type": "object", + "title": "Original Candidates", + "description": "", + "properties": { + "placeVisitSegment": { + "type": "object", + "title": "Place Visit Segment", + "description": "", + "properties": { + "placeVisitCandidate": { + "type": "array", + "title": "Place Visit Candidate", + "description": "", + "items": { + "type": "object", + "title": "Original Candidates", + "description": "", + "properties": { + "location": { + "type": "object", + "title": "Location", + "description": "", + "$ref": "#/$defs/location" + } + } + } + } + } + } + } + } + } + }, + "parkingEvent": { + "type": "object", + "title": "Parking Event", + "description": "", + "examples": [ + { + "location": { + "latitudeE7": 412518975, + "longitudeE7": 21683133, + "accuracyMetres": 19 + }, + "method": "EXITING_VEHICLE_SIGNAL", + "locationSource": "FROM_RAW_LOCATION", + "timestamp": "2022-02-27T14:47:16.731Z" + } + ], + "properties": { + "location": { + "type": "object", + "title": "Location", + "description": "", + "$ref": "#/$defs/location" + }, + "method": { + "type": "string", + "title": "Method", + "description": "", + "examples": [ + "EXITING_VEHICLE_SIGNAL" + ], + "enum": [ + "PERSONAL_VEHICLE_CONFIDENCE", + "END_OF_ACTIVITY_SEGMENT", + "EXITING_VEHICLE_SIGNAL", + "UNDEFINED" + ] + }, + "locationSource": { + "type": "string", + "title": "Location Source", + "description": "", + "examples": [ + "FROM_RAW_LOCATION" + ], + "enum": [ + "FROM_RAW_LOCATION", + "NOT_FROM_RAW_LOCATION", + "UNKNOWN" + ] + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp", + "description": "", + "examples": [ + "2022-02-27T14:47:16.731Z" + ] + } + } + } + } +} \ No newline at end of file diff --git a/schemas/Settings.schema.json b/schemas/Settings.schema.json new file mode 100644 index 0000000..862cb1d --- /dev/null +++ b/schemas/Settings.schema.json @@ -0,0 +1,286 @@ +{ + "$id": "https://locationhistoryformat.com/schemas/Settings.schema.json", + "$schema": "http://json-schema.org/draft/2020-12/schema", + "type": "object", + "title": "Settings", + "description": "The `Settings.json` file in a Google Takeout Location History extraction. Contains information about the Google account settings related to Location History, information about the devices associated, and other auxiliary metadata.", + "examples": [ + { + "createdTime": "2013-05-15T21:53:59.385Z", + "modifiedTime": "2020-07-01T21:27:31.880Z", + "historyEnabled": true, + "deviceSettings": [ + { + "deviceTag": 1234567890, + "reportingEnabled": true, + "legalCountryCode": "es", + "devicePrettyName": "ONEPLUS A6013", + "platformType": "ANDROID", + "deviceCreationTime": "2019-01-07T18:13:23.713Z", + "latestLocationReportingSettingChange": { + "reportingEnabledModificationTime": "2019-01-07T18:13:24.673Z" + }, + "androidOsLevel": 28, + "deviceSpec": { + "manufacturer": "OnePlus", + "brand": "OnePlus", + "product": "OnePlus6T", + "device": "OnePlus6T", + "model": "ONEPLUS A6013", + "isLowRam": false + } + } + ], + "retentionWindowDays": 2147483647, + "hasReportedLocations": true, + "hasSetRetention": false + } + ], + "properties": { + "createdTime": { + "type": "string", + "format": "date-time", + "title": "Created Time", + "description": "Timestamp (as an ISO 8601 string) when Location History was first available on this Google account.", + "examples": [ + "2013-05-15T21:53:59.385Z" + ] + }, + "modifiedTime": { + "type": "string", + "format": "date-time", + "title": "Modified Time", + "description": "Timestamp (as an ISO 8601 string) when any Location History setting was last modified on this Google account.", + "examples": [ + "2020-07-01T21:27:31.880Z" + ] + }, + "historyEnabled": { + "type": "boolean", + "title": "History Enabled", + "description": "Whether Location History is enabled on this Google account (controlled in the [Activity Controls](https://myactivity.google.com/activitycontrols?settings=location) page).", + "examples": [ + true + ] + }, + "deviceSettings": { + "type": "array", + "title": "Device Settings", + "description": "List of devices associated with the Location History information on this Google account.", + "items": { + "$ref": "#/$defs/deviceSettings" + } + }, + "retentionWindowDays": { + "type": "integer", + "title": "Retention Window Days", + "description": "Number of days the Location History information is retained in this Google account. Corresponds to the *Auto-delete* setting in the [Activity Controls](https://myactivity.google.com/activitycontrols?settings=location) page.\nThis value should be ignored if [#/properties/hasSetRetention] is false.", + "examples": [ + 540 + ] + }, + "hasReportedLocations": { + "type": "boolean", + "title": "Has Reported Locations", + "description": "Whether this Google account has any reported Location History information.", + "examples": [ + true + ] + }, + "hasSetRetention": { + "type": "boolean", + "title": "Has Set Retention", + "description": "Whether this Google account has configured the auto-delete setting (retention) for the Location History data. Corresponds to the *Auto-delete* setting in the [Activity Controls](https://myactivity.google.com/activitycontrols?settings=location) page.\nSee also [#/properties/retentionWindowDays].", + "examples": [ + false + ] + } + }, + "$defs": { + "deviceSettings": { + "type": "object", + "title": "Device Settings", + "description": "Information about a device associated with the Google Location History account.", + "examples": [ + { + "deviceTag": 1234567890, + "reportingEnabled": true, + "legalCountryCode": "es", + "devicePrettyName": "ONEPLUS A6013", + "platformType": "ANDROID", + "deviceCreationTime": "2019-01-07T18:13:23.713Z", + "latestLocationReportingSettingChange": { + "reportingEnabledModificationTime": "2019-01-07T18:13:24.673Z" + }, + "androidOsLevel": 28, + "deviceSpec": { + "manufacturer": "OnePlus", + "brand": "OnePlus", + "product": "OnePlus6T", + "device": "OnePlus6T", + "model": "ONEPLUS A6013", + "isLowRam": false + } + } + ], + "properties": { + "deviceTag": { + "type": "integer", + "title": "Device Tag", + "description": "Integer identifier (specific to Location History) of the device.", + "examples": [ + 1234567890 + ] + }, + "reportingEnabled": { + "type": "boolean", + "title": "Reporting Enabled", + "description": "Whether this device is configured to report Location History information (controlled in the [Activity Controls](https://myactivity.google.com/activitycontrols?settings=location) page).", + "examples": [ + true + ] + }, + "legalCountryCode": { + "type": "string", + "title": "Legal Country Code", + "description": "Two-letter [ISO 3166 country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).", + "examples": [ + "es" + ], + "helpWanted": "The meaning of this field is uncertain." + }, + "devicePrettyName": { + "type": "string", + "title": "Device Pretty Name", + "description": "Pretty name of the device, recommended for user-facing applications.", + "examples": [ + "ONEPLUS A6013" + ] + }, + "platformType": { + "type": "string", + "title": "Platform Type", + "description": "Platform of the device. Valid values are: `ANDROID`, `IOS` and `UNKNOWN`.", + "examples": [ + "ANDROID" + ], + "enum": [ + "ANDROID", + "IOS", + "UNKNOWN" + ] + }, + "deviceCreationTime": { + "type": "string", + "format": "date-time", + "title": "Device Creation Time", + "description": "Timestamp (as an ISO 8601 string) of the first time this device was available for Location History reporting on this Google account.", + "examples": [ + "2019-01-07T18:13:23.713Z" + ] + }, + "latestLocationReportingSettingChange": { + "type": "object", + "title": "Latest Location Reporting Setting Change", + "description": "Information on the latest change(s) to Location History settings on this Google account.", + "helpWanted": "Are properties other than `reportingEnabledModificationTime` possible?", + "examples": [ + { + "reportingEnabledModificationTime": "2019-01-07T18:13:24.673Z" + } + ], + "properties": { + "reportingEnabledModificationTime": { + "type": "string", + "title": "Reporting Enabled Modification Time", + "description": "Time that Location History reporting was enabled or disabled for the last time on this Google account.", + "examples": [ + "2019-01-07T18:13:24.673Z" + ] + } + } + }, + "androidOsLevel": { + "type": "integer", + "title": "Android OS Level", + "description": "The version of the device's operating system (only applies to Android devices). Corresponds to the API Level (e.g. 28 is Android 9 *Pie*).", + "examples": [ + 28 + ] + }, + "deviceSpec": { + "type": "object", + "title": "Device Specification", + "description": "Technical information and specifications about the device.", + "$ref": "#/$defs/deviceSpec" + } + } + }, + "deviceSpec": { + "type": "object", + "title": "Device Specification", + "description": "Technical information and specifications about a device.", + "examples": [ + { + "manufacturer": "OnePlus", + "brand": "OnePlus", + "product": "OnePlus6T", + "device": "OnePlus6T", + "model": "ONEPLUS A6013", + "isLowRam": false + } + ], + "properties": { + "manufacturer": { + "type": "string", + "title": "Manufacturer", + "description": "Manufacturer of the device.", + "examples": [ + "OnePlus" + ] + }, + "brand": { + "type": "string", + "title": "Brand", + "description": "Brand of the device.", + "examples": [ + "OnePlus" + ] + }, + "product": { + "type": "string", + "title": "Product", + "description": "Product name of the device.", + "examples": [ + "OnePlus6T" + ] + }, + "device": { + "type": "string", + "title": "Device", + "description": "Name of the device.", + "examples": [ + "OnePlus6T" + ] + }, + "model": { + "type": "string", + "title": "Model", + "description": "Model of the device.", + "examples": [ + "ONEPLUS A6013" + ] + }, + "isLowRam": { + "type": "boolean", + "title": "Is Low Ram", + "description": "Whether the device is considered low-ram.", + "examples": [ + false + ], + "helpWanted": "Is it maybe related to [Google Maps Go](https://support.google.com/maps/answer/7566112)?" + } + } + } + } +} \ No newline at end of file diff --git a/schemas/TimelineEdits.schema.json b/schemas/TimelineEdits.schema.json new file mode 100644 index 0000000..f3f22e6 --- /dev/null +++ b/schemas/TimelineEdits.schema.json @@ -0,0 +1,527 @@ +{ + "$id": "https://locationhistoryformat.com/schemas/TimelineEdits.schema.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Timeline Edits Schema", + "description": "This schema outlines the structure of timeline edits data, encompassing device information, place visit aggregates, and raw signal data from the device.", + "type": "object", + "properties": { + "timelineEdits": { + "type": "array", + "title": "Timeline Edits", + "description": "List of all timeline edits.", + "items": { + "$ref": "#/$defs/timelineEditsItem" + }, + "examples": [] + } + }, + "required": [ + "timelineEdits" + ], + "$defs": { + "timelineEditsItem": { + "title": "Timeline Edit Information", + "description": "Various information about the timeline edit, including device ID, place aggregates, and raw signal data.", + "type": "object", + "examples": [ + { + "deviceId": "0", + "placeAggregates": { + "placeAggregateInfo": [ + { + "score": 1228.0, + "numBucketsWithLocation": 0, + "bucketSpanDays": 0, + "point": { + "latE7": 429362473, + "lngE7": -788308560 + }, + "placeId": "ChIJV8SII64E1YkRvAqrnP5G_x8", + "placePoint": { + "latE7": 429362442, + "lngE7": -788308585 + } + }, + { + "score": 166.0, + "numBucketsWithLocation": 0, + "bucketSpanDays": 0, + "point": { + "latE7": 426994475, + "lngE7": -778539281 + }, + "placeId": "ChIJ4_FHs78TK4gRw8h22XkBDEA", + "placePoint": { + "latE7": 426994650, + "lngE7": -778539291 + } + }, + { + "score": 131.0, + "numBucketsWithLocation": 0, + "bucketSpanDays": 0, + "point": { + "latE7": 415908301, + "lngE7": -739409850 + }, + "placeId": "ChIJJRdROh863YkRmXCWQ14VMcI", + "placePoint": { + "latE7": 415908776, + "lngE7": -739409849 + } + } + ], + "windowSizeHrs": 2011, + "topRankedPlacesPlaceIds": [ + "ChIJV8SII64E1YkRvAqrnP5G_x8", + "ChIJ4_FHs78TK4gRw8h22XkBDEA", + "ChIJJRdROh863YkRmXCWQ14VMcI" + ], + "processWindow": { + "startTime": "2023-12-14T08:00:55Z", + "endTime": "2024-03-07T08:00:55Z" + }, + "metadata": { + "platform": "UNKNOWN" + } + } + } + ], + "properties": { + "deviceId": { + "type": "string", + "title": "Device ID", + "description": "The unique identifier for the device that generated the data.", + "examples": [ + "0", + "-538926953" + ] + }, + "placeAggregates": { + "type": "object", + "title": "Place Aggregates", + "description": "Aggregated information about places visited by the device.", + "properties": { + "placeAggregateInfo": { + "type": "array", + "title": "Place Aggregate Information", + "description": "An array of place information, including score, location, and place ID.", + "items": { + "title": "Place Aggregate Info Item", + "description": "The place aggregate info containing score, location, place ID, and other details.", + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "Score", + "description": "The score assigned to the place.", + "examples": [ + 1228.0, + 166.0 + ] + }, + "numBucketsWithLocation": { + "type": "integer", + "title": "Number of Buckets", + "description": "The number of location buckets associated with the place.", + "examples": [ + 0 + ] + }, + "bucketSpanDays": { + "type": "integer", + "title": "Bucket Span", + "description": "The span of the buckets in days.", + "examples": [ + 0 + ] + }, + "point": { + "$ref": "#/$defs/point" + }, + "placeId": { + "type": "string", + "title": "Place ID", + "description": "The unique identifier for the place.", + "examples": [ + "ChIJV8SII64E1YkRvAqrnP5G_x8", + "ChIJ4_FHs78TK4gRw8h22XkBDEA" + ] + }, + "placePoint": { + "$ref": "#/$defs/point" + } + }, + "required": [ + "score", + "numBucketsWithLocation", + "bucketSpanDays", + "point", + "placeId", + "placePoint" + ] + } + }, + "windowSizeHrs": { + "type": "integer", + "title": "Time Window Size", + "description": "The size of the window in hours for the place aggregates.", + "examples": [ + 2016 + ] + }, + "topRankedPlacesPlaceIds": { + "type": "array", + "title": "Top Ranked Places", + "description": "An array of place IDs for the top-ranked places.", + "items": { + "type": "string", + "title": "Top Ranked Place ID", + "description": "The ID of top place ID", + "examples": [ + "ChIJV8SII64E1YkRvAqrnP5G_x8", + "ChIJ4_FHs78TK4gRw8h22XkBDEA", + "ChIJJRdROh863YkRmXCWQ14VMcI" + ] + } + }, + "processWindow": { + "type": "object", + "title": "Process Window", + "description": "The start and end time of the processing window.", + "properties": { + "startTime": { + "type": "string", + "format": "date-time", + "title": "Start Time", + "description": "The start time of the processing window.", + "examples": [ + "2023-12-14T08:00:55Z", + "2023-12-10T08:01:01Z" + ] + }, + "endTime": { + "type": "string", + "format": "date-time", + "title": "End Time", + "description": "The end time of the processing window.", + "examples": [ + "2024-03-07T08:00:55Z", + "2024-03-03T08:01:01Z" + ] + } + }, + "required": [ + "startTime", + "endTime" + ] + }, + "metadata": { + "$ref": "#/$defs/metadata" + } + }, + "required": [ + "placeAggregateInfo", + "windowSizeHrs", + "topRankedPlacesPlaceIds", + "processWindow", + "metadata" + ] + }, + "rawSignal": { + "type": "object", + "title": "Raw Signal", + "description": "Raw signal data from the device.", + "examples": [ + { + "signal": { + "position": { + "point": { + "latE7": 426974802, + "lngE7": -778539156 + }, + "accuracyMm": 100000, + "altitudeMeters": 224.0, + "source": "WIFI", + "timestamp": "2024-02-17T04:14:41.412Z" + } + }, + "additionalTimestamp": "2024-02-17T04:14:39.545Z", + "metadata": { + "platform": "ANDROID" + } + } + ], + "properties": { + "signal": { + "$ref": "#/$defs/signal" + }, + "additionalTimestamp": { + "type": "string", + "format": "date-time", + "title": "Additional Timestamp", + "description": "An additional timestamp associated with the raw signal.", + "examples": [ + "2024-02-17T05:54:01.359Z" + ] + }, + "metadata": { + "$ref": "#/$defs/metadata" + } + } + } + }, + "required": [ + "deviceId" + ] + }, + "signal": { + "type": "object", + "title": "Signal", + "description": "The signal data, including position, activity record, and wifi scan.", + "properties": { + "position": { + "type": "object", + "title": "Position", + "description": "The position data, including point, accuracy, altitude, source, and timestamp.", + "properties": { + "point": { + "$ref": "#/$defs/point" + }, + "accuracyMm": { + "type": "integer", + "title": "Signal Position Accuracy", + "description": "The accuracy of the position in millimeters.", + "examples": [ + 100000, + 13000 + ] + }, + "altitudeMeters": { + "type": "number", + "title": "Altitude", + "description": "The altitude of the position in meters.", + "examples": [ + 224.0 + ] + }, + "source": { + "type": "string", + "title": "Signal Position Source", + "description": "The source of the position data.", + "examples": [ + "WIFI" + ] + }, + "speedMetersPerSecond": { + "type": "number", + "title": "Speed", + "description": "Speed in meters per second.", + "examples": [ + 0.0 + ] + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp", + "description": "The timestamp of the position data.", + "examples": [ + "2024-02-17T05:54:00.932Z", + "2024-02-17T04:26:44.661Z" + ] + } + }, + "required": [ + "point", + "timestamp" + ] + }, + "activityRecord": { + "type": "object", + "title": "Activity Record", + "description": "The activity record data, including detected activities and timestamp.", + "properties": { + "detectedActivities": { + "type": "array", + "title": "Detected Activities", + "description": "An array of detected activities, including activity type and probability.", + "items": { + "type": "object", + "title": "Detected Activity Item", + "description": "The detected activity item info containing activity type and probability.", + "properties": { + "activityType": { + "type": "string", + "title": "Activity Type", + "description": "The type of the detected activity. This could re-use the `#/$defs/activityType` from Records schema later.", + "examples": [ + "STILL", + "ON_FOOT", + "WALKING", + "IN_VEHICLE", + "UNKNOWN", + "IN_ROAD_VEHICLE", + "IN_RAIL_VEHICLE" + ] + }, + "probability": { + "type": "number", + "title": "Probability", + "description": "The probability of the detected activity.", + "examples": [ + 0.96, + 0.02, + 0.01 + ] + } + }, + "required": [ + "activityType", + "probability" + ] + } + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp", + "description": "The timestamp of the activity record.", + "examples": [ + "2024-02-17T05:26:47.066Z" + ] + } + }, + "required": [ + "detectedActivities", + "timestamp" + ] + }, + "wifiScan": { + "type": "object", + "title": "Wifi Scan Data", + "description": "The wifi scan data, including delivery time, devices, and source.", + "properties": { + "deliveryTime": { + "type": "string", + "format": "date-time", + "title": "Delivery Time", + "description": "The delivery time of the wifi scan.", + "examples": [ + "2024-02-17T04:26:44.661Z" + ] + }, + "devices": { + "type": "array", + "title": "Wifi Devices", + "description": "An array of wifi devices, including mac address and raw RSSI.", + "items": { + "type": "object", + "title": "Wifi Device", + "description": "The wifi device info containing mac address and raw RSSI.", + "properties": { + "mac": { + "type": "string", + "title": "MAC Address", + "description": "The mac address of the wifi device.", + "examples": [ + "145830537259886", + "212032510881561", + "212032510881562" + ] + }, + "rawRssi": { + "type": "integer", + "title": "Raw RSSI", + "description": "The raw RSSI of the wifi device.", + "examples": [ + -51, + -53, + -58 + ] + } + }, + "required": [ + "mac", + "rawRssi" + ] + } + }, + "source": { + "type": "string", + "title": "Wifi Scan Source", + "description": "The source of the wifi scan data.", + "examples": [ + "ACTIVE_SCAN" + ] + } + }, + "required": [ + "deliveryTime", + "devices" + ] + } + } + }, + "metadata": { + "type": "object", + "title": "Metadata", + "description": "Metadata about the data object.", + "properties": { + "platform": { + "type": "string", + "title": "Device Platform", + "description": "The platform that generated the data.", + "examples": [ + "ANDROID", + "UNKNOWN" + ] + } + }, + "required": [ + "platform" + ] + }, + "point": { + "type": "object", + "title": "Point", + "description": "The geographical point.", + "examples": [ + { + "latE7": 416032766, + "lngE7": 21841819, + "accuracyMeters": 10, + "timestamp": "2022-03-03T08:27:48Z" + } + ], + "properties": { + "latE7": { + "type": "integer", + "title": "Latitude", + "description": "Latitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90° to +90°).", + "examples": [ + 439362473, + 436994475 + ], + "minimum": -900000000, + "maximum": 900000000 + }, + "lngE7": { + "type": "integer", + "title": "Longitude", + "description": "Longitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180° to +180°).", + "examples": [ + -788308560, + -798539281 + ], + "minimum": -1800000000, + "maximum": 1800000000 + } + }, + "required": [ + "latE7", + "lngE7" + ] + } + } +} \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 0000000..9bfb126 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Location History Format","text":"

Collaborative format definition and documentation for Google Location History files.

Google (through its Takeout service) allows users to easily and conveniently download their Location History data. Unfortunately Google has not provided proper official documentation for these files, so it can sometimes be difficult to navigate the structure of the files and understand the meaning of its fields. This project attempts to fill that gap and do the job that Google should have done.

"},{"location":"#goals","title":"Goals","text":"

The goals of this project are two-fold:

  • Provide a standardized format definition describing the structure and contents of the files. These format definitions are given in the form of JSON schemas, which can be used, for example, for automatic validation of JSON files and to aid in the development of parsers. These files can be found in the schemas folder in the repository.

  • Provide accessible and user-friendly documentation for these formats. The documentation is presented in a public site (locationhistoryformat.com) which provides basic guides and reference pages detailing the structure and fields of the files. The reference pages are automatically built from the JSON schemas, presenting the information in a much more readable way.

"},{"location":"#disclaimer","title":"Disclaimer","text":"

This project is not affiliated, endorsed by, or in any way officially connected with Google. Official support for Google products can be found at https://support.google.com/.

An effort is being made to keep the information provided by this project accurate and up-to-date, but due to its nature, the information provided might be inaccurate and/or out-of-date. Google has repeatedly made modifications to the format throughout the years.

"},{"location":"#contributing","title":"Contributing","text":"

Contributions are welcome! If you notice errors, out-of-date information, or missing information, you can help improve it. See Contributing.

"},{"location":"#license","title":"License","text":"

This project is licensed under the terms of the MIT License.

"},{"location":"contributing/","title":"Contributing","text":"

Open collaboration is fundamental for this project, a single person can't encounter and document all edge cases of the files. Additionally, Google periodically updates the format and structure of the files without prior warning, so updates to the format definitions will also be needed periodically but might be easy to miss.

All source code, documentation files, and schemas can be found in the project's GitHub repository. If you notice incorrect, out-of-date, or missing information, you can help by creating a new issue or creating a pull request.

Note that Google's Location History data presents unique challenges that make spotting, formalizing, and accurately keeping track of the changes to the format significantly difficult. In particular, there is no known versioning system for the file format (or other indirect versioning clues), and changes to the format of the extracted files are usually not rolled out at the same time for all Google users.

"},{"location":"contributing/#improving-the-json-schemas","title":"Improving the JSON Schemas","text":"

All JSON schemas can be found in the schemas/ folder of the repository. Pull requests are welcome. Ideally contributors should be familiar with the structure of JSON Schema files.

All documented objects and properties should at least have the following fields:

  • title: In most cases it is just a \"humanized\" version of the key.

  • type: One of \"object\", \"array\", \"string\", \"number\", \"boolean\", \"null\".

  • description: Can make use of common basic Markdown syntax. It can be an empty string if no information is known (in which case a helpWanted field should be present).

In addition to other basic JSON Schema fields, the following non-standard fields are also supported:

  • helpWanted: Short description to inform that the information provided for this object/property is incomplete and help from the community is welcome. Example: \"The meaning of this field is uncertain. Are other values possible?\"

  • added: Approximate date that this object/property was added to the format, if known. Example: \"around January 2022\".

  • removed: Approximate date that this object/property was removed from the format, if known. Example: \"around January 2022\".

  • replacedBy: For objects/properties that have been removed, the URI-reference of the new object/property that replaced it, if it applies. Example: \"#/$defs/locationRecord/properties/timestamp\"

To convert the JSON Schema files to Markdown files (which are then used for the documentation site) a custom Python script is used (see tools/jsonschema_to_md/).

Info

Not all standard JSON Schema language features are supported when building the site (and it is not in the scope of this project to build a complete JSON Schema to Markdown generator). If you miss some JSON Schema feature in the Markdown generator create a new issue or a pull request.

"},{"location":"contributing/#improving-the-guides","title":"Improving the Guides","text":"

To improve the documentation guides provided in this site modify the Markdown files found in the docs/guides/ folder and submit a pull request. Most common Markdown syntax is supported, plus additional syntax extensions provided by the Material for MkDocs theme.

"},{"location":"contributing/#testing-locally","title":"Testing Locally","text":"

In order to set-up a local environment to preview and test changes to the site first clone the GitHub repository, then:

To install all requirements run:

pip install -r requirements.txt\n

To transform the JSON schemas in the schemas/ folder to Markdown files run:

make build\n

Info

The generated Markdown files are stored in the /docs/reference folder. Note that these dynamically generated Markdown files should not be included in the repository.

To start a local web server and view the site run:

mkdocs serve\n
"},{"location":"faq/","title":"Frequently Asked Questions","text":""},{"location":"faq/#does-google-retain-location-history-data-forever","title":"Does Google retain Location History data forever?","text":"

You can configure a retention period in your Google account settings by using the auto-delete setting. With that said, even if you have disabled auto-deletion from the account settings it's been observed that after some undetermined amount of months Google might start dropping some attributes of your raw location history data. Timestamps, latitudes and longitudes seem to always be conserved, but old values for other attributes such as altitude, speed, or heading, might be discarded without prior warning.

You should therefore not rely on Google Location History data to be always available. If you want to conserve all historic data consider periodically making extractions and backing them up or look for other alternative services.

"},{"location":"guides/downloading/","title":"Downloading the Data","text":"

To download your Location History data go to the Google Takeout page while logged in with your Google account.

There, create a new export containing the Location History data (note: make sure all other data sources are not selected).

In most cases a one-off download is enough, so, in the next screen choose Export Once, and leave the other options at their default value (the resulting file will almost certainly not exceed 2 GB).

After a few minutes your data should be ready to download. You will also receive an email informing you about this and providing a link.

"},{"location":"guides/general-structure/","title":"General Structure","text":"

A typical Location History extraction from Google Takeout will look something like this:

Takeout/\n\u251c\u2500 archive_browser.html\n\u2514\u2500 Location History/\n   \u251c\u2500 Records.json\n   \u251c\u2500 Settings.json\n   \u251c\u2500 Timeline Edits.json\n   \u2514\u2500 Semantic Location History/\n      \u2502  ...\n      \u251c\u2500 2020/\n      \u2502  \u251c\u2500 2020_JANUARY.json\n      \u2502  \u251c\u2500 2020_FEBRUARY.json\n      \u2502  \u2502  ...\n      \u2502  \u2514\u2500 2020_DECEMBER.json\n      \u2514\u2500 2021/\n         \u251c\u2500 2021_JANUARY.json\n         \u251c\u2500 2021_FEBRUARY.json\n         \u2502  ...\n         \u2514\u2500 2021_DECEMBER.json\n

Warning

Folder names might be different for Google accounts in different languages.

From here, the most relevant files and folders are:

Records.json This file contains all available raw Location History data. See Raw Location History Data for more information. Settings.json This file contains additional auxiliary metadata, like information about the devices used and account settings.

Timeline Edits.json

Semantic Location History This folder contains higher-level information about the user's inferred activity and movements. There is one subfolder for each year of data, and inside each subfolder one file for each month. See Semantic Location History Data for more information."},{"location":"guides/raw-location/","title":"Raw Location History Data","text":"

Raw Location History data consists of a list of timestamped location records in chronological order for all the historical location data available and presumably at the most granular level possible.

This raw Location History data is found in the Records.json file (see General Structure). Inside this file we can find a single flat locations array containing all of the location records:

Records.json
{\n\"locations\" : [...]\n}\n

Each of the location records in this array has a very similar structure. A location record might look like this:

Example location record
{\n\"timestamp\": \"2022-01-12T17:18:24.190Z\",\n\"latitudeE7\": 414216106,\n\"longitudeE7\": 21684775,\n\"accuracy\": 47,\n\"velocity\": 0,\n\"heading\": 188,\n\"altitude\": 89,\n\"verticalAccuracy\": 27,\n\"source\": \"WIFI\",\n\"deviceTag\": 1234567890,\n\"platformType\": \"ANDROID\"\n}\n

From this, the most essential fields are:

  • timestamp: Timestamp of the record as a string in ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ). The suffixed Z indicates that the time is in the UTC time zone.
  • latitudeE7 and longitudeE7: Coordinates (latitude and longitude) of the location reported as integers. The values need to be divided by 107 to be in the expected range.

For more information on the other possible fields see the full format definition.

"},{"location":"guides/semantic-location/","title":"Semantic Location History Data","text":"

Semantic Location History data consists of more high-level and processed information compared to the raw Location History data. This semantic information is the same information that can be seen in the Timeline pages on the Google Maps website and app. Instead of individual raw location records, here the information is aggregated and summarized as a sequence of inferred (or manually set) place visits and activity segments between place visits, all with a start time and an end time.

This semantic data can be found inside the Semantic Location History folder. The data is partitioned by year in different subfolders (named e.g. 2021, 2022...). And for each year, the data is partitioned again by month in different JSON files (named e.g. 2022_JANUARY.json, 2022_FEBRUARY.json etc.).

Inside each semantic JSON file we can find a single flat timelineObjects array: Example semantic JSON file

{\n\"timelineObjects\" : [...]\n}\n

Each of the timeline objects in this array is either an activitySegment or a placeVisit.

For more technical information see the full format definition.

"},{"location":"guides/semantic-location/#activity-segments","title":"Activity Segments","text":"

Activity segments correspond to user activities involving changes in location, usually a journey from one place to another, such as a walk, a car drive, a bus ride, or a flight.

Activity segments contain, among other fields, a start location, an end location, a duration, a distance, and an inferred (or manually set) activity type (walking, running, driving, ...). A list of all known activity types can be found in the Activity Type section.

"},{"location":"guides/semantic-location/#place-visits","title":"Place Visits","text":"

Place visits correspond to a user visit or stay at a place in a fixed location for a duration of time, such as a stay at home, at work, a visit to a shopping mall, or to a restaurant.

Place visits contain, among other fields, a location and a duration.

"},{"location":"reference/","title":"Reference","text":"

JSON Schema files can be found in the schemas folder in the repository.

User-friendly documentation for these files is provided in the following pages:

  • Records.json
  • Settings.json
  • Timeline Edits.json
  • Semantic Location History
"},{"location":"reference/records/","title":"Records.json","text":""},{"location":"reference/records/#recordsjson-format-definition","title":"Records.json Format Definition","text":"

This page has been automatically generated from the schema Records.schema.json.

"},{"location":"reference/records/#/","title":"Records","text":"

The Records.json file in a Google Takeout Location History extraction. Contains raw Location History information from the user's account.

Property Description locations\u200b[] Locationsarray of: object\u00a0\u00a0(Location Record)List of all available location records, in chronological order."},{"location":"reference/records/#/$defs/locationRecord/","title":"Location Record","text":"

A specific location record. Contains the information obtained from a user's device at a specific moment in time and at a given location.

Example
{\n\"timestamp\": \"2022-01-12T17:18:24.190Z\",\n\"latitudeE7\": 414216106,\n\"longitudeE7\": 21684775,\n\"accuracy\": 20,\n\"velocity\": 10,\n\"heading\": 270,\n\"altitude\": 150,\n\"verticalAccuracy\": 10,\n\"source\": \"WIFI\",\n\"deviceTag\": 1234567890,\n\"platformType\": \"ANDROID\"\n}\n
Property Description accuracy AccuracyintegerExample: 20Approximate accuracy radius of the location measurement, in meters. A lower value means better precision. activeWifiScan Active Wi-Fi Scanobject\u00a0\u00a0(Wi-Fi Scan)Information about the access points found in a Wi-Fi scan done by the device and associated with this location record. activity\u200b[] Activityarray of: object\u00a0\u00a0(Activity Record)Detected activity information at this location, as a list of activity records at slightly different timestamps but all associated with this location record. altitude AltitudeintegerExample: 150Altitude above the WGS84 reference ellipsoid, in meters. batteryCharging Battery ChargingbooleanExample: trueWhether the device was charging its battery or not at the time of the record. deviceDesignation Device DesignationstringExample: \"PRIMARY\"Common values found are: PRIMARY, UNKNOWN. Help Wanted: The meaning of this field is uncertain. Are other values possible? Contributions to improve this are welcome. deviceTag Device TagintegerExample: 1234567890Integer identifier (specific to Location History) associated with the device that uploaded the location. Refer to deviceSettings in Settings.json for information about the device with this deviceTag. deviceTimestamp Device Timestampstring\u00a0\u00a0(date-time) Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome. formFactor Form FactorstringExample: \"PHONE\"Form factor (device type) from which the location record originated.Common values are: PHONE, TABLET. Help Wanted: What are other possible values? Contributions to improve this are welcome. heading HeadingintegerExample: 270Heading in degrees east of true north, from 0 to 359. inferredLocation\u200b[] Inferred Locationarray of: object\u00a0\u00a0(Location Record) Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome. latitudeE7 LatitudeintegerExample: 414216106WGS84 Latitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90\u00b0 to +90\u00b0). locationMetadata\u200b[] Location Metadataarray of: object\u00a0\u00a0(Location Metadata)Additional location metadata. List of different Wi-Fi scans associated with this location record. longitudeE7 LongitudeintegerExample: 21684775WGS84 Longitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180\u00b0 to +180\u00b0). osLevel OS LevelintegerExample: 28The version of the device's operating system that provided this record. In Android devices, this corresponds to the API Level (e.g. 28 is Android 9 Pie). placeId Place IDstringExample: \"ChIJk_s92NyipBIRUMnDG8Kq2Js\"Google Maps Place ID of the location. platformType Platform TypestringExample: \"ANDROID\"Platform of the device that provided this record. Valid values are: ANDROID, IOS and UNKNOWN. serverTimestamp Server Timestampstring\u00a0\u00a0(date-time) Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome. source SourcestringExample: \"WIFI\"Source (technology) that provided the location information for this record.Common values are: WIFI, CELL, GPS, UNKNOWN (note: sometimes found in lowercase). timestamp Timestampstring\u00a0\u00a0(date-time)Example: \"2022-01-12T17:18:24.190Z\" Added around January 2022.Timestamp (as an ISO 8601 string) of the record. timestampMs Timestamp (Milliseconds)stringExample: \"1636403752674\" Removed around January 2022.Replaced by timestamp.Timestamp of the record as a Unix timestamp in milliseconds. velocity VelocityintegerExample: 10Measured velocity (ground speed) in meters per second. verticalAccuracy Vertical AccuracyintegerExample: 10Calculated accuracy of the location's altitude measurement, in meters. A lower value means better precision."},{"location":"reference/records/#/$defs/wifiScan/","title":"Wi-Fi Scan","text":"

Information about the access points found in a Wi-Fi scan done by the device.

Example
{\n\"accessPoints\": [\n{\n\"mac\": \"220676014124647\",\n\"strength\": -34,\n\"frequencyMhz\": 2437\n},\n{\n\"mac\": \"220676014124646\",\n\"strength\": -47,\n\"frequencyMhz\": 5180\n},\n{\n\"mac\": \"93672086150526\",\n\"strength\": -48,\n\"frequencyMhz\": 2412\n},\n{\n\"mac\": \"251425092175323\",\n\"strength\": -81,\n\"frequencyMhz\": 2412\n}\n]\n}\n
Property Description accessPoints\u200b[] Access Pointsarray of: object\u00a0\u00a0(Access Point)List of Wi-Fi access points found with the scan."},{"location":"reference/records/#/$defs/locationRecord/properties/activity/items/","title":"Activity Record","text":"

Activity information for a location at a given timestamp.

Example
{\n\"activity\": [\n{\n\"type\": \"ON_FOOT\",\n\"confidence\": 89\n},\n{\n\"type\": \"WALKING\",\n\"confidence\": 84\n},\n{\n\"type\": \"ON_BICYCLE\",\n\"confidence\": 5\n},\n{\n\"type\": \"IN_VEHICLE\",\n\"confidence\": 2\n},\n{\n\"type\": \"STILL\",\n\"confidence\": 1\n},\n{\n\"type\": \"UNKNOWN\",\n\"confidence\": 1\n}\n],\n\"timestamp\": \"2022-02-12T15:10:56.751Z\"\n}\n
Property Description activity\u200b[] Activityarray of: object\u00a0\u00a0(Activity)List of candidate detected activities with their associated confidence. timestamp Timestampstring\u00a0\u00a0(date-time)Example: \"2022-01-12T17:18:24.190Z\"Timestamp (as an ISO 8601 string) of the activity."},{"location":"reference/records/#/$defs/locationMetadata/","title":"Location Metadata","text":"

Information about a Wi-Fi scan done by the device at a given timestamp.

Property Description timestamp Timestampstring\u00a0\u00a0(date-time)Example: \"2022-01-12T17:18:24.190Z\"Timestamp (as an ISO 8601 string) of the location metadata. wifiScan Wi-Fi Scanobject\u00a0\u00a0(Wi-Fi Scan)Information about the access points found in a Wi-Fi scan done by the device."},{"location":"reference/records/#/$defs/accessPoint/","title":"Access Point","text":"

Information about a specific wireless access point or router.

Example
{\n\"mac\": \"220676014124647\",\n\"strength\": -34,\n\"frequencyMhz\": 2437\n}\n
Property Description frequencyMhz Frequency (MHz)integerExample: 2437Frequency of the signal (in MHz) that the access point is using. isConnected Is ConnectedbooleanExample: trueWhether the device that scanned the access point is connected to it. mac MAC AddressstringExample: \"220676014124647\"MAC address of the access point as an integer. MAC addresses typically consist of 48 bits (6 bytes), so it is likely the value found here needs to be interpreted as a 6 byte integer (which when converted to its hexadecimal representation results in a more typical representation for MAC addresses). strength StrengthintegerExample: -34Strength of the signal in dBm (decibels per milliwatt) of the access point."},{"location":"reference/records/#/$defs/activity/","title":"Activity","text":"

A detected activity with an associated confidence. Descriptions partially based on: https://developers.google.com/android/reference/com/google/android/gms/location/DetectedActivity

Example
{\n\"type\": \"ON_FOOT\",\n\"confidence\": 89\n}\n
Property Description confidence ConfidenceintegerExample: 100Value from 0 to 100 indicating the likelihood that the user is performing this activity.The larger the value, the more consistent the data used to perform the classification is with the detected activity. Multiple activities may have high confidence values. For example, the ON_FOOT may have a confidence of 100 while the RUNNING activity may have a confidence of 95. The sum of the confidences of all detected activities for a classification does not have to be <= 100 since some activities are not mutually exclusive (for example, you can be walking while in a bus) and some activities are hierarchical (ON_FOOT is a generalization of WALKING and RUNNING). extra Extra Activity Informationobject\u00a0\u00a0(Extra Activity Information)Generic object containing extra information about an activity, in the form of a property with a type, a name, and a value. So far only the property with name vehicle_personal_confidence has been encountered. type Activity Typestring\u00a0\u00a0(Activity Type)Example: \"STILL\"Type of activity detected."},{"location":"reference/records/#/$defs/activity/properties/extra/","title":"Extra Activity Information","text":"

Generic object containing extra information about an activity, in the form of a property with a type, a name, and a value. So far only the property with name vehicle_personal_confidence has been encountered.

Example
{\n\"type\": \"VALUE\",\n\"name\": \"vehicle_personal_confidence\",\n\"intVal\": 100\n}\n
Property Description intVal Integer ValueintegerExample: 100Integer value of the property. name NamestringExample: \"vehicle_personal_confidence\"Name of the property. type TypestringExample: \"VALUE\"Type of the property."},{"location":"reference/records/#/$defs/activityType/","title":"Activity Type","text":"

Type of activity detected, such as WALKING or ON_BICYCLE. Some activity types are hierarchical, for example, WALKING is a subtype of ON_FOOT, and in particular, the following activity type hierarchy is known:

- EXITING_VEHICLE\n- IN_VEHICLE\n- \u251c\u2500 IN_RAIL_VEHICLE\n- \u2514\u2500 IN_ROAD_VEHICLE\n-    \u251c\u2500 IN_FOUR_WHEELER_VEHICLE\n-    \u2502  \u251c\u2500 IN_BUS\n-    \u2502  \u2514\u2500 IN_CAR\n-    \u2514\u2500 IN_TWO_WHEELER_VEHICLE\n- ON_BICYCLE\n- ON_FOOT\n- \u251c\u2500 RUNNING\n- \u2514\u2500 WALKING\n- STILL\n- TILTING\n- UNKNOWN\n

Descriptions partially based on: https://developers.google.com/android/reference/com/google/android/gms/location/DetectedActivity

Activity Type Description EXITING_VEHICLE Exiting VehicleThe device is exiting a vehicle. IN_BUS In BusThe device is in a bus. IN_CAR In CarThe device is in a car. IN_FOUR_WHEELER_VEHICLE In Four-Wheeler VehicleThe device is in a four-wheeler vehicle. IN_RAIL_VEHICLE In Rail VehicleThe device is in a rail vehicle. IN_ROAD_VEHICLE In Road VehicleThe device is in a road vehicle. IN_TWO_WHEELER_VEHICLE In Two-Wheeler VehicleThe device is in a two-wheeler vehicle. IN_VEHICLE In VehicleThe device is in a vehicle, such as a car. ON_BICYCLE On BicycleThe device is on a bicycle. ON_FOOT On FootThe device is on a user who is walking or running. RUNNING RunningThe device is on a user who is running. STILL StillThe device is still (not moving). TILTING TiltingThe device angle relative to gravity changed significantly. This often occurs when a device is picked up from a desk or a user who is sitting stands up. UNKNOWN UnknownUnable to detect the current activity. WALKING WalkingThe device is on a user who is walking."},{"location":"reference/semantic/","title":"Semantic Location History","text":""},{"location":"reference/semantic/#semantic-location-history-format-definition","title":"Semantic Location History Format Definition","text":"

This page has been automatically generated from the schema Semantic.schema.json.

"},{"location":"reference/semantic/#/","title":"Semantic Location History","text":"

A Semantic Location History JSON file in a Google Takeout Location History extraction. Contains Semantic Location History information from the user's account. Typically this will be a file containing data for a single month, with a name such as 2021_JANUARY.json.

Property Description timelineObjects\u200b[] Timeline Objectsarray of: object\u00a0\u00a0(Timeline Object)List of all available semantic information, in chronological order. Each item in the list is either an Activity Segment or a Place Visit, encapsulated in a generic Timeline Object."},{"location":"reference/semantic/#/properties/timelineObjects/items/","title":"Timeline Object","text":"

Encapsulates either an Activity Segment or a Place Visit, depending on the single key found.

Single Property Description activitySegment Activity Segmentobject\u00a0\u00a0(Activity Segment)An activity involving changes in location, usually a journey from one place to another, such as a walk, a car drive, a bus ride, or a flight. placeVisit Place Visitobject\u00a0\u00a0(Place Visit)A visit or stay at a place in a fixed location for a duration of time, such as a stay at home, at work, a visit to a shopping mall, or to a restaurant."},{"location":"reference/semantic/#/$defs/activitySegment/","title":"Activity Segment","text":"

An activity involving changes in location, usually a journey from one place to another, such as a walk, a car drive, a bus ride, or a flight.

Example
{\n\"activitySegment\": {\n\"startLocation\": {\n\"latitudeE7\": 414083590,\n\"longitudeE7\": 21704229,\n\"sourceInfo\": {\n\"deviceTag\": 1114211210\n}\n},\n\"endLocation\": {\n\"latitudeE7\": 413961889,\n\"longitudeE7\": 21536695,\n\"sourceInfo\": {\n\"deviceTag\": 1114211210\n}\n},\n\"duration\": {\n\"startTimestamp\": \"2022-03-03T12:22:24Z\",\n\"endTimestamp\": \"2022-03-03T12:43:34Z\"\n},\n\"distance\": 2640,\n\"activityType\": \"IN_BUS\",\n\"confidence\": \"HIGH\",\n\"activities\": [\n{\n\"activityType\": \"IN_BUS\",\n\"probability\": 85.6847882270813\n},\n{\n\"activityType\": \"WALKING\",\n\"probability\": 8.418431878089905\n},\n{\n\"activityType\": \"IN_PASSENGER_VEHICLE\",\n\"probability\": 2.8303226456046104\n},\n{\n\"activityType\": \"STILL\",\n\"probability\": 1.7383299767971039\n},\n{\n\"activityType\": \"IN_SUBWAY\",\n\"probability\": 0.4673520103096962\n},\n{\n\"activityType\": \"IN_TRAIN\",\n\"probability\": 0.3031305968761444\n},\n{\n\"activityType\": \"IN_TRAM\",\n\"probability\": 0.269505986943841\n},\n{\n\"activityType\": \"CYCLING\",\n\"probability\": 0.1483310479670763\n}\n],\n\"transitPath\": {\n\"transitStops\": [\n{\n\"latitudeE7\": 414083140,\n\"longitudeE7\": 21704000,\n\"placeId\": \"ChIJWey1zMWipBIRiNQSzpI4EDQ\",\n\"address\": \"08025 Barcelona\\nEspa\\u00f1a\",\n\"name\": \"Sant Antoni Maria Claret-Lepant\"\n},\n{\n\"latitudeE7\": 414066427,\n\"longitudeE7\": 21681608,\n\"placeId\": \"ChIJ3Wr_xsaipBIRctQDPNF0IHM\",\n\"address\": \"08025 Barcelona\\nEspa\\u00f1a\",\n\"name\": \"Sant Antoni Maria Claret - Sardenya\"\n},\n{\n\"latitudeE7\": 414049343,\n\"longitudeE7\": 21659001,\n\"placeId\": \"ChIJh2lnv8CipBIRpH0ym2Bxo68\",\n\"address\": \"08025 Barcelona\\nEspa\\u00f1a\",\n\"name\": \"Sant Antoni Maria Claret - N\\u00e0pols\"\n}\n],\n\"name\": \"H8\",\n\"hexRgbColor\": \"009EE0\",\n\"linePlaceId\": \"ChIJQVEUoLuipBIRJO37wI4yyBs\",\n\"stopTimesInfo\": [\n{\n\"scheduledDepartureTimestamp\": \"2022-03-03T12:42:00Z\",\n\"realtimeDepartureTimestamp\": \"2022-03-03T12:43:37Z\"\n},\n{\n\"scheduleArrivalTimestamp\": \"2022-03-03T12:44:01Z\",\n\"scheduledDepartureTimestamp\": \"2022-03-03T12:44:01Z\",\n\"realtimeArrivalTimestamp\": \"2022-03-03T12:45:38Z\",\n\"realtimeDepartureTimestamp\": \"2022-03-03T12:45:38Z\"\n},\n{\n\"scheduleArrivalTimestamp\": \"2022-03-03T12:46:03Z\",\n\"scheduledDepartureTimestamp\": \"2022-03-03T12:46:03Z\",\n\"realtimeArrivalTimestamp\": \"2022-03-03T12:47:40Z\",\n\"realtimeDepartureTimestamp\": \"2022-03-03T12:47:40Z\"\n},\n{\n\"scheduleArrivalTimestamp\": \"2022-03-03T12:48:00Z\",\n\"scheduledDepartureTimestamp\": \"2022-03-03T12:48:00Z\",\n\"realtimeArrivalTimestamp\": \"2022-03-03T12:49:37Z\",\n\"realtimeDepartureTimestamp\": \"2022-03-03T12:49:37Z\"\n}\n],\n\"source\": \"INFERRED\",\n\"confidence\": 0.9155850640140931,\n\"distanceMeters\": 2341.0\n},\n\"simplifiedRawPath\": {\n\"points\": [\n{\n\"latE7\": 414032766,\n\"lngE7\": 21641819,\n\"accuracyMeters\": 10,\n\"timestamp\": \"2022-03-03T12:27:48Z\"\n},\n{\n\"latE7\": 414016705,\n\"lngE7\": 21661614,\n\"accuracyMeters\": 13,\n\"timestamp\": \"2022-03-03T12:30:04Z\"\n},\n{\n\"latE7\": 413986545,\n\"lngE7\": 21623960,\n\"accuracyMeters\": 12,\n\"timestamp\": \"2022-03-03T12:33:51Z\"\n},\n{\n\"latE7\": 413976870,\n\"lngE7\": 21610201,\n\"accuracyMeters\": 11,\n\"timestamp\": \"2022-03-03T12:37:09Z\"\n},\n{\n\"latE7\": 413968976,\n\"lngE7\": 21609892,\n\"accuracyMeters\": 13,\n\"timestamp\": \"2022-03-03T12:38:50Z\"\n},\n{\n\"latE7\": 413955345,\n\"lngE7\": 21551848,\n\"accuracyMeters\": 11,\n\"timestamp\": \"2022-03-03T12:42:06Z\"\n}\n],\n\"source\": \"INFERRED\",\n\"distanceMeters\": 2413.400132766728\n}\n}\n}\n
Property Description activities\u200b[] Activitiesarray of: object\u00a0\u00a0(Activity)List of all the considered candidate activity types and their probabilities. The sum of all the probabilities is always <= 100. activityType Activity Typestring\u00a0\u00a0(Activity Type)Example: \"WALKING\"Best match activity type. Corresponds to the activity type with the highest probability in activities. confidence ConfidencestringExample: \"HIGH\"Confidence that the chosen activity type (see activityType) is correct. One of: LOW, MEDIUM, HIGH or UNKNOWN_CONFIDENCE. Activities that have been manually confirmed always have a confidence of HIGH. distance DistanceintegerExample: 292Distance traveled during the activity, in meters. duration Durationobject\u00a0\u00a0(Duration)Duration of the activity. editActionMetadata Edit-Action Metadataobject\u00a0\u00a0(Edit-Action Metadata) editConfirmationStatus Edit-Confirmation StatusstringExample: \"CONFIRMED\"Whether the user has manually edited the activity segment. Can be NOT_CONFIRMED or CONFIRMED. endLocation End Locationobject\u00a0\u00a0(Location)End location of the activity. lastEditedTimestamp Last-Edited Timestampstring\u00a0\u00a0(date-time)Example: \"2022-03-06T14:13:11.092Z\" parkingEvent Parking Eventobject\u00a0\u00a0(Parking Event) simplifiedRawPath Simplified Raw Pathobject\u00a0\u00a0(Simplified Raw Path) startLocation Start Locationobject\u00a0\u00a0(Location)Start location of the activity. transitPath Transit Pathobject\u00a0\u00a0(Transit Path)Path taken in a public transit system, such as a bus or a metro. waypointPath Waypoint Pathobject\u00a0\u00a0(Waypoint Path)"},{"location":"reference/semantic/#/$defs/placeVisit/","title":"Place Visit","text":"

A visit or stay at a place in a fixed location for a duration of time, such as a stay at home, at work, a visit to a shopping mall, or to a restaurant.

Property Description centerLatE7 Center LatitudeintegerExample: 414216106Latitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90\u00b0 to +90\u00b0). centerLngE7 Center LongitudeintegerExample: 21684775Longitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180\u00b0 to +180\u00b0). checkin Checkinobject\u00a0\u00a0(Checkin) Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome. childVisits\u200b[] Child Visitsarray of: object\u00a0\u00a0(Place Visit) duration Durationobject\u00a0\u00a0(Duration)Duration of the place visit. editActionMetadata Edit-Action Metadataobject\u00a0\u00a0(Edit-Action Metadata) editConfirmationStatus Edit-Confirmation StatusstringExample: \"CONFIRMED\"Whether the user has manually edited the place visit. Can be NOT_CONFIRMED or CONFIRMED. lastEditedTimestamp Last-Edited Timestampstring\u00a0\u00a0(date-time)Example: \"2022-03-06T14:13:11.092Z\" location Locationobject\u00a0\u00a0(Location)Location of the place. locationAssertionType Location Assertion TypestringExample: \"AREA\" locationConfidence Visit ConfidenceintegerExample: 71 Help Wanted: How is this different from visitConfidence Contributions to improve this are welcome. otherCandidateLocations\u200b[] Other Candidate Locationsarray of: object\u00a0\u00a0(Location) placeConfidence Place ConfidencestringExample: \"HIGH\"Categorized confidence for this place visit. One of: LOW_CONFIDENCE, MEDIUM_CONFIDENCE, HIGH_CONFIDENCE or USER_CONFIRMED. Help Wanted: Is this directly related to locationConfidence and/or visitConfidence Contributions to improve this are welcome. placeVisitImportance Place Visit ImportancestringExample: \"MAIN\"One of MAIN or TRANSITIONAL. placeVisitLevel Place Visit LevelintegerExample: 1Level (depth) of this place visit. This value increases by 1 with each recursive access to a childVisits entry. placeVisitType Place Visit TypestringExample: \"SINGLE_PLACE\"Can be SINGLE_PLACE. Help Wanted: Are there other valid values? Contributions to improve this are welcome. sectionId Section IDstring simplifiedRawPath Simplified Raw Pathobject\u00a0\u00a0(Simplified Raw Path) visitConfidence Visit ConfidenceintegerExample: 95 Help Wanted: How is this different from locationConfidence Contributions to improve this are welcome."},{"location":"reference/semantic/#/$defs/activity/","title":"Activity","text":"Example
{\n\"activityType\": \"WALKING\",\n\"probability\": 95.93904614448547\n}\n
Property Description activityType Activity Typestring\u00a0\u00a0(Activity Type)Example: \"STILL\"Type of activity. probability ProbabilitynumberExample: 95.93904614448547Probability (or confidence) that the activity type is correct, in the range 0 to 100."},{"location":"reference/semantic/#/$defs/activityType/","title":"Activity Type","text":"Activity Type Description BOATING Boating CATCHING_POKEMON Catching Pok\u00e9mon CYCLING Cycling FLYING Flying HIKING Hiking HORSEBACK_RIDING Horseback riding IN_BUS On a bus IN_CABLECAR In a cable car IN_FERRY On a ferry IN_FUNICULAR On a funicular IN_GONDOLA_LIFT In a gondola lift IN_PASSENGER_VEHICLE Driving IN_SUBWAY On the subway IN_TAXI In a taxi IN_TRAIN On a train IN_TRAM On a tram IN_VEHICLE In a vehicle IN_WHEELCHAIR By wheelchair KAYAKING Kayaking KITESURFING Kitesurfing MOTORCYCLING Motorcycling PARAGLIDING Paragliding ROWING Rowing RUNNING Running SAILING Sailing SKATEBOARDING Skateboarding SKATING Skating SKIING Skiing SLEDDING Sledding SNOWBOARDING Snowboarding SNOWMOBILE Snowmobiling SNOWSHOEING Snowshoeing STILL Still SURFING Surfing SWIMMING Swimming UNKNOWN_ACTIVITY_TYPE Moving WALKING Walking WALKING_NORDIC Nordic walking"},{"location":"reference/semantic/#/$defs/duration/","title":"Duration","text":"

Duration of time defined by a start timestamp and an end timestamp.

Example
{\n\"startTimestamp\": \"2022-02-02T10:41:08.315Z\",\n\"endTimestamp\": \"2022-02-02T10:45:09.962Z\"\n}\n
Property Description endTimestamp End Timestampstring\u00a0\u00a0(date-time)Example: \"2022-02-02T10:45:09.962Z\" startTimestamp Start Timestampstring\u00a0\u00a0(date-time)Example: \"2022-02-02T10:41:08.315Z\""},{"location":"reference/semantic/#/$defs/editActionMetadata/","title":"Edit-Action Metadata","text":"Property Description activitySegment Activity Segmentobject\u00a0\u00a0(Activity Segment) editHistory Edit Historyobject\u00a0\u00a0(Edit History) originalCandidates Original Candidatesobject\u00a0\u00a0(Original Candidates) placeVisitSegment Place Visit Segmentobject\u00a0\u00a0(Place Visit Segment)"},{"location":"reference/semantic/#/$defs/location/","title":"Location","text":"Example
{\n\"latitudeE7\": 414036299,\n\"longitudeE7\": 21743558,\n\"placeId\": \"ChIJk_s92NyipBIRUMnDG8Kq2Js\",\n\"address\": \"C/ de Mallorca, 401\\n08013 Barcelona\\nEspanya\",\n\"name\": \"La Sagrada Familia\",\n\"semanticType\": \"TYPE_SEARCHED_ADDRESS\",\n\"sourceInfo\": {\n\"deviceTag\": 1234567890\n},\n\"locationConfidence\": 87.07311,\n\"calibratedProbability\": 76.20023\n}\n
Property Description accuracyMetres Accuracy in metersintegerExample: 19Approximate accuracy radius of the location measurement, in meters. A lower value means better precision. address AddressstringExample: \"C/ de Mallorca, 401\\n08013 Barcelona\\nEspanya\"Address of the location. calibratedProbability Calibrated ProbabilitynumberExample: 100.0 isCurrentLocation Is Current LocationbooleanExample: true latitudeE7 LatitudeintegerExample: 414216106Latitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90\u00b0 to +90\u00b0). locationConfidence Location ConfidencenumberExample: 100.0 longitudeE7 LongitudeintegerExample: 21684775Longitude coordinate of the location. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180\u00b0 to +180\u00b0). name NamestringExample: \"La Sagrada Familia\"Name of the location. placeId Place IDstringExample: \"ChIJk_s92NyipBIRUMnDG8Kq2Js\"Google Maps Place ID of the location. semanticType Semantic Typestring\u00a0\u00a0(Semantic Type)Example: \"TYPE_HOME\"Place type based on semantic information specific to the user. sourceInfo Source Informationobject\u00a0\u00a0(Source Information)Information on the source that provided the location."},{"location":"reference/semantic/#/$defs/parkingEvent/","title":"Parking Event","text":"Example
{\n\"location\": {\n\"latitudeE7\": 412518975,\n\"longitudeE7\": 21683133,\n\"accuracyMetres\": 19\n},\n\"method\": \"EXITING_VEHICLE_SIGNAL\",\n\"locationSource\": \"FROM_RAW_LOCATION\",\n\"timestamp\": \"2022-02-27T14:47:16.731Z\"\n}\n
Property Description location Locationobject\u00a0\u00a0(Location) locationSource Location SourcestringExample: \"FROM_RAW_LOCATION\" method MethodstringExample: \"EXITING_VEHICLE_SIGNAL\" timestamp Timestampstring\u00a0\u00a0(date-time)Example: \"2022-02-27T14:47:16.731Z\""},{"location":"reference/semantic/#/$defs/simplifiedRawPath/","title":"Simplified Raw Path","text":"Example
{\n\"points\": [\n{\n\"latE7\": 416032766,\n\"lngE7\": 21841819,\n\"accuracyMeters\": 10,\n\"timestamp\": \"2022-03-03T08:27:48Z\"\n},\n{\n\"latE7\": 416016705,\n\"lngE7\": 21861614,\n\"accuracyMeters\": 13,\n\"timestamp\": \"2022-03-03T08:30:04Z\"\n},\n{\n\"latE7\": 415986545,\n\"lngE7\": 21823960,\n\"accuracyMeters\": 12,\n\"timestamp\": \"2022-03-03T08:33:51Z\"\n}\n],\n\"source\": \"INFERRED\",\n\"distanceMeters\": 2413.400132766728\n}\n
Property Description distanceMeters Distance in metersnumberExample: 2413.400132766728Distance traveled with the path, in meters. points\u200b[] Pointsarray of: object\u00a0\u00a0(Point)List of all the recorded points that form the path. source SourcestringExample: \"INFERRED\"Source of the location data of the path. One of BACKFILLED, INFERRED, or RESNAPPED_FOR_EDIT."},{"location":"reference/semantic/#/$defs/transitPath/","title":"Transit Path","text":"

A path taken in a public transit system, such as a bus or a metro. Note that it does not describe an entire transit line, but only a specific journey a user does in a transit line.

Example
{\n\"transitStops\": [\n{\n\"latitudeE7\": 414083140,\n\"longitudeE7\": 21704000,\n\"placeId\": \"ChIJWey1zMWipBIRiNQSzpI4EDQ\",\n\"address\": \"08025 Barcelona\\nEspa\\u00f1a\",\n\"name\": \"Sant Antoni Maria Claret-Lepant\"\n},\n{\n\"latitudeE7\": 414066427,\n\"longitudeE7\": 21681608,\n\"placeId\": \"ChIJ3Wr_xsaipBIRctQDPNF0IHM\",\n\"address\": \"08025 Barcelona\\nEspa\\u00f1a\",\n\"name\": \"Sant Antoni Maria Claret - Sardenya\"\n},\n{\n\"latitudeE7\": 414049343,\n\"longitudeE7\": 21659001,\n\"placeId\": \"ChIJh2lnv8CipBIRpH0ym2Bxo68\",\n\"address\": \"08025 Barcelona\\nEspa\\u00f1a\",\n\"name\": \"Sant Antoni Maria Claret - N\\u00e0pols\"\n}\n],\n\"name\": \"H8\",\n\"hexRgbColor\": \"009EE0\",\n\"linePlaceId\": \"ChIJQVEUoLuipBIRJO37wI4yyBs\",\n\"stopTimesInfo\": [\n{\n\"scheduledDepartureTimestamp\": \"2022-03-03T12:42:00Z\",\n\"realtimeDepartureTimestamp\": \"2022-03-03T12:43:37Z\"\n},\n{\n\"scheduleArrivalTimestamp\": \"2022-03-03T12:44:01Z\",\n\"scheduledDepartureTimestamp\": \"2022-03-03T12:44:01Z\",\n\"realtimeArrivalTimestamp\": \"2022-03-03T12:45:38Z\",\n\"realtimeDepartureTimestamp\": \"2022-03-03T12:45:38Z\"\n},\n{\n\"scheduleArrivalTimestamp\": \"2022-03-03T12:46:03Z\",\n\"scheduledDepartureTimestamp\": \"2022-03-03T12:46:03Z\",\n\"realtimeArrivalTimestamp\": \"2022-03-03T12:47:40Z\",\n\"realtimeDepartureTimestamp\": \"2022-03-03T12:47:40Z\"\n},\n{\n\"scheduleArrivalTimestamp\": \"2022-03-03T12:48:00Z\",\n\"scheduledDepartureTimestamp\": \"2022-03-03T12:48:00Z\",\n\"realtimeArrivalTimestamp\": \"2022-03-03T12:49:37Z\",\n\"realtimeDepartureTimestamp\": \"2022-03-03T12:49:37Z\"\n}\n],\n\"source\": \"INFERRED\",\n\"confidence\": 0.9155850640140931,\n\"distanceMeters\": 2341.0\n}\n
Property Description confidence ConfidencenumberExample: 0.9155850640140931 distanceMeters Distance in metersnumberExample: 396.34176716755843Distance traveled with the transit path, in meters. hexRgbColor Hexadecimal RGB ColorstringExample: \"009EE0\"Color of the transit line in hexadecimal in the form RRGGBB. linePlaceId Line Place IDstringExample: \"ChIJQVEUoLuipBIRJO37wI4yyBs\"Google Maps Place ID of the transit line. name NamestringExample: \"H8\"Name of the transit line. source SourcestringExample: \"INFERRED\"Source of the location data of the transit path. Either BACKFILLED or INFERRED. stopTimesInfo\u200b[] Stop Times Infoarray of: object\u00a0\u00a0(Stop Time Info)Time information (departure and arrival times, both real and scheduled) for each transit stop used. transitStops\u200b[] Transit Stopsarray of: object\u00a0\u00a0(Location)List of locations of the transit stops used."},{"location":"reference/semantic/#/$defs/activitySegment/properties/waypointPath/","title":"Waypoint Path","text":"Example
{\n\"waypoints\": [\n{\n\"latE7\": 416119834,\n\"lngE7\": 21768624\n},\n{\n\"latE7\": 416117012,\n\"lngE7\": 21899302\n},\n{\n\"latE7\": 416119262,\n\"lngE7\": 21802315\n}\n],\n\"source\": \"INFERRED\",\n\"distanceMeters\": 396.34176716755843,\n\"travelMode\": \"WALK\",\n\"confidence\": 0.7986568220419046\n}\n
Property Description confidence ConfidencenumberExample: 0.7986568220419046 distanceMeters Distance in metersnumberExample: 396.34176716755843Total distance of the path, in meters. roadSegment\u200b[] Road Segmentarray of: object\u00a0\u00a0(Road Segment) source SourcestringExample: \"INFERRED\"Source of the location data of the path. Either BACKFILLED or INFERRED. travelMode Travel ModestringExample: \"WALK\" waypoints\u200b[] Waypointsarray of: object\u00a0\u00a0(Waypoint)"},{"location":"reference/semantic/#/$defs/placeVisit/properties/checkin/","title":"Checkin","text":"

Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome.

Property Description atTime At Timestring\u00a0\u00a0(date-time)Example: \"2022-03-06T14:13:11.092Z\" device Deviceobject\u00a0\u00a0(Device) latestKnownLocation Latest Known Locationobject\u00a0\u00a0(Latest Known Location)"},{"location":"reference/semantic/#/$defs/editActionMetadata/properties/activitySegment/","title":"Activity Segment","text":"Property Description activityConfidence ConfidencenumberExample: 98.705695 activityType Activity Typestring\u00a0\u00a0(Activity Type)Example: \"WALKING\""},{"location":"reference/semantic/#/$defs/editActionMetadata/properties/editHistory/","title":"Edit History","text":"Property Description editEvent\u200b[] Edit Eventarray of: object\u00a0\u00a0(Edit Event)"},{"location":"reference/semantic/#/$defs/editActionMetadata/properties/originalCandidates/","title":"Original Candidates","text":"Property Description placeVisitSegment Place Visit Segmentobject\u00a0\u00a0(Place Visit Segment)"},{"location":"reference/semantic/#/$defs/editActionMetadata/properties/placeVisitSegment/","title":"Place Visit Segment","text":"Property Description location Locationobject\u00a0\u00a0(Location)"},{"location":"reference/semantic/#/$defs/semanticType/","title":"Semantic Type","text":"

Place type based on semantic information specific to the user.

Semantic Type Description TYPE_ALIASED_LOCATION Type Aliased LocationThe place has been given a private label by the user. See: Give a place a private label. TYPE_HOME Type HomeThe place has been designated as 'Home' by the user. See: Set or change your home & work addresses. TYPE_SEARCHED_ADDRESS Type Searched AddressThe user has searched for this place in the past. TYPE_WORK Type WorkThe place has been designated as 'Work' by the user. See: Set or change your home & work addresses."},{"location":"reference/semantic/#/$defs/location/properties/sourceInfo/","title":"Source Information","text":"

Information on the source that provided the location.

Property Description deviceTag Device TagintegerExample: 1234567890Integer identifier (specific to Location History) associated with the device that obtained the location. Refer to deviceSettings in Settings.json for information about the device with this deviceTag."},{"location":"reference/semantic/#/$defs/point/","title":"Point","text":"Example
{\n\"latE7\": 416032766,\n\"lngE7\": 21841819,\n\"accuracyMeters\": 10,\n\"timestamp\": \"2022-03-03T08:27:48Z\"\n}\n
Property Description accuracyMeters Accuracy in metersintegerExample: 10Approximate accuracy radius of the location measurement, in meters. A lower value means better precision. latE7 LatitudeintegerExample: 414216106Latitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90\u00b0 to +90\u00b0). lngE7 LongitudeintegerExample: 21684775Longitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180\u00b0 to +180\u00b0). timestamp Timestampstring\u00a0\u00a0(date-time)Example: \"2022-03-03T08:27:48Z\"Timestamp of the point."},{"location":"reference/semantic/#/$defs/transitPath/properties/stopTimesInfo/items/","title":"Stop Time Info","text":"

Departure and/or arrival time information (both real and scheduled) for a stop at a transit line.

Example
{\n\"scheduleArrivalTimestamp\": \"2022-03-03T12:44:01Z\",\n\"scheduledDepartureTimestamp\": \"2022-03-03T12:44:01Z\",\n\"realtimeArrivalTimestamp\": \"2022-03-03T12:45:38Z\",\n\"realtimeDepartureTimestamp\": \"2022-03-03T12:45:38Z\"\n}\n
Property Description realtimeArrivalTimestamp Realtime Arrival Timestampstring\u00a0\u00a0(date-time)Example: \"2022-03-03T12:45:38Z\" realtimeDepartureTimestamp Realtime Departure Timestampstring\u00a0\u00a0(date-time)Example: \"2022-03-03T12:45:38Z\" scheduleArrivalTimestamp Schedule Arrival Timestampstring\u00a0\u00a0(date-time)Example: \"2022-03-03T12:44:01Z\" scheduledDepartureTimestamp Scheduled Departure Timestampstring\u00a0\u00a0(date-time)Example: \"2022-03-03T12:44:01Z\""},{"location":"reference/semantic/#/$defs/activitySegment/properties/waypointPath/properties/roadSegment/items/","title":"Road Segment","text":"Property Description duration DurationstringExample: \"8s\" placeId Place IDstringExample: \"ChIJk_s92NyipBIRUMnDG8Kq2Js\"Google Maps Place ID of the location."},{"location":"reference/semantic/#/$defs/waypoint/","title":"Waypoint","text":"Example
{\n\"latE7\": 414216106,\n\"lngE7\": 21684775\n}\n
Property Description latE7 LatitudeintegerExample: 414216106Latitude coordinate of the waypoint. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90\u00b0 to +90\u00b0). lngE7 LongitudeintegerExample: 21684775Longitude coordinate of the waypoint. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180\u00b0 to +180\u00b0)."},{"location":"reference/semantic/#/$defs/placeVisit/properties/checkin/properties/device/","title":"Device","text":"Property Description android Androidobject\u00a0\u00a0(Android)"},{"location":"reference/semantic/#/$defs/placeVisit/properties/checkin/properties/latestKnownLocation/","title":"Latest Known Location","text":"Property Description detectionTime Detection Timestring\u00a0\u00a0(date-time)Example: \"2022-03-06T14:13:11.092Z\" location Locationobject\u00a0\u00a0(Location)"},{"location":"reference/semantic/#/$defs/editActionMetadata/properties/editHistory/properties/editEvent/items/","title":"Edit Event","text":"Property Description editOperation\u200b[] Edit Operationarray of: string uiConfiguration UI Configurationobject\u00a0\u00a0(UI Configuration)"},{"location":"reference/semantic/#/$defs/editActionMetadata/properties/originalCandidates/properties/placeVisitSegment/","title":"Place Visit Segment","text":"Property Description placeVisitCandidate\u200b[] Place Visit Candidatearray of: object\u00a0\u00a0(Original Candidates)"},{"location":"reference/semantic/#/$defs/placeVisit/properties/checkin/properties/device/properties/android/","title":"Android","text":"Property Description fingerprint Fingerprintstring"},{"location":"reference/semantic/#/$defs/editActionMetadata/properties/editHistory/properties/editEvent/items/properties/uiConfiguration/","title":"UI Configuration","text":"Property Description uiActivitySegmentConfiguration UI Activity Segment ConfigurationstringExample: \"DEFAULT_ACTIVITY_SEGMENT_CONFIGURATION\" uiPlaceVisitConfiguration UI Place Visit ConfigurationstringExample: \"DEFAULT_PLACE_VISIT_CONFIGURATION\""},{"location":"reference/semantic/#/$defs/editActionMetadata/properties/originalCandidates/properties/placeVisitSegment/properties/placeVisitCandidate/items/","title":"Original Candidates","text":"Property Description location Locationobject\u00a0\u00a0(Location)"},{"location":"reference/settings/","title":"Settings.json","text":""},{"location":"reference/settings/#settingsjson-format-definition","title":"Settings.json Format Definition","text":"

This page has been automatically generated from the schema Settings.schema.json.

"},{"location":"reference/settings/#/","title":"Settings","text":"

The Settings.json file in a Google Takeout Location History extraction. Contains information about the Google account settings related to Location History, information about the devices associated, and other auxiliary metadata.

Example
{\n\"createdTime\": \"2013-05-15T21:53:59.385Z\",\n\"modifiedTime\": \"2020-07-01T21:27:31.880Z\",\n\"historyEnabled\": true,\n\"deviceSettings\": [\n{\n\"deviceTag\": 1234567890,\n\"reportingEnabled\": true,\n\"legalCountryCode\": \"es\",\n\"devicePrettyName\": \"ONEPLUS A6013\",\n\"platformType\": \"ANDROID\",\n\"deviceCreationTime\": \"2019-01-07T18:13:23.713Z\",\n\"latestLocationReportingSettingChange\": {\n\"reportingEnabledModificationTime\": \"2019-01-07T18:13:24.673Z\"\n},\n\"androidOsLevel\": 28,\n\"deviceSpec\": {\n\"manufacturer\": \"OnePlus\",\n\"brand\": \"OnePlus\",\n\"product\": \"OnePlus6T\",\n\"device\": \"OnePlus6T\",\n\"model\": \"ONEPLUS A6013\",\n\"isLowRam\": false\n}\n}\n],\n\"retentionWindowDays\": 2147483647,\n\"hasReportedLocations\": true,\n\"hasSetRetention\": false\n}\n
Property Description createdTime Created Timestring\u00a0\u00a0(date-time)Example: \"2013-05-15T21:53:59.385Z\"Timestamp (as an ISO 8601 string) when Location History was first available on this Google account. deviceSettings\u200b[] Device Settingsarray of: object\u00a0\u00a0(Device Settings)List of devices associated with the Location History information on this Google account. hasReportedLocations Has Reported LocationsbooleanExample: trueWhether this Google account has any reported Location History information. hasSetRetention Has Set RetentionbooleanExample: falseWhether this Google account has configured the auto-delete setting (retention) for the Location History data. Corresponds to the Auto-delete setting in the Activity Controls page.See also retentionWindowDays. historyEnabled History EnabledbooleanExample: trueWhether Location History is enabled on this Google account (controlled in the Activity Controls page). modifiedTime Modified Timestring\u00a0\u00a0(date-time)Example: \"2020-07-01T21:27:31.880Z\"Timestamp (as an ISO 8601 string) when any Location History setting was last modified on this Google account. retentionWindowDays Retention Window DaysintegerExample: 540Number of days the Location History information is retained in this Google account. Corresponds to the Auto-delete setting in the Activity Controls page.This value should be ignored if hasSetRetention is false."},{"location":"reference/settings/#/$defs/deviceSettings/","title":"Device Settings","text":"

Information about a device associated with the Google Location History account.

Example
{\n\"deviceTag\": 1234567890,\n\"reportingEnabled\": true,\n\"legalCountryCode\": \"es\",\n\"devicePrettyName\": \"ONEPLUS A6013\",\n\"platformType\": \"ANDROID\",\n\"deviceCreationTime\": \"2019-01-07T18:13:23.713Z\",\n\"latestLocationReportingSettingChange\": {\n\"reportingEnabledModificationTime\": \"2019-01-07T18:13:24.673Z\"\n},\n\"androidOsLevel\": 28,\n\"deviceSpec\": {\n\"manufacturer\": \"OnePlus\",\n\"brand\": \"OnePlus\",\n\"product\": \"OnePlus6T\",\n\"device\": \"OnePlus6T\",\n\"model\": \"ONEPLUS A6013\",\n\"isLowRam\": false\n}\n}\n
Property Description androidOsLevel Android OS LevelintegerExample: 28The version of the device's operating system (only applies to Android devices). Corresponds to the API Level (e.g. 28 is Android 9 Pie). deviceCreationTime Device Creation Timestring\u00a0\u00a0(date-time)Example: \"2019-01-07T18:13:23.713Z\"Timestamp (as an ISO 8601 string) of the first time this device was available for Location History reporting on this Google account. devicePrettyName Device Pretty NamestringExample: \"ONEPLUS A6013\"Pretty name of the device, recommended for user-facing applications. deviceSpec Device Specificationobject\u00a0\u00a0(Device Specification)Technical information and specifications about the device. deviceTag Device TagintegerExample: 1234567890Integer identifier (specific to Location History) of the device. latestLocationReportingSettingChange Latest Location Reporting Setting Changeobject\u00a0\u00a0(Latest Location Reporting Setting Change)Information on the latest change(s) to Location History settings on this Google account. Help Wanted: Are properties other than reportingEnabledModificationTime possible? Contributions to improve this are welcome. legalCountryCode Legal Country CodestringExample: \"es\"Two-letter ISO 3166 country code. Help Wanted: The meaning of this field is uncertain. Contributions to improve this are welcome. platformType Platform TypestringExample: \"ANDROID\"Platform of the device. Valid values are: ANDROID, IOS and UNKNOWN. reportingEnabled Reporting EnabledbooleanExample: trueWhether this device is configured to report Location History information (controlled in the Activity Controls page)."},{"location":"reference/settings/#/$defs/deviceSpec/","title":"Device Specification","text":"

Technical information and specifications about a device.

Example
{\n\"manufacturer\": \"OnePlus\",\n\"brand\": \"OnePlus\",\n\"product\": \"OnePlus6T\",\n\"device\": \"OnePlus6T\",\n\"model\": \"ONEPLUS A6013\",\n\"isLowRam\": false\n}\n
Property Description brand BrandstringExample: \"OnePlus\"Brand of the device. device DevicestringExample: \"OnePlus6T\"Name of the device. isLowRam Is Low RambooleanExample: falseWhether the device is considered low-ram. Help Wanted: Is it maybe related to Google Maps Go? Contributions to improve this are welcome. manufacturer ManufacturerstringExample: \"OnePlus\"Manufacturer of the device. model ModelstringExample: \"ONEPLUS A6013\"Model of the device. product ProductstringExample: \"OnePlus6T\"Product name of the device."},{"location":"reference/settings/#/$defs/deviceSettings/properties/latestLocationReportingSettingChange/","title":"Latest Location Reporting Setting Change","text":"

Information on the latest change(s) to Location History settings on this Google account.

Help Wanted: Are properties other than reportingEnabledModificationTime possible? Contributions to improve this are welcome.

Example
{\n\"reportingEnabledModificationTime\": \"2019-01-07T18:13:24.673Z\"\n}\n
Property Description reportingEnabledModificationTime Reporting Enabled Modification TimestringExample: \"2019-01-07T18:13:24.673Z\"Time that Location History reporting was enabled or disabled for the last time on this Google account."},{"location":"reference/timeline-edits/","title":"Timeline Edits.json","text":""},{"location":"reference/timeline-edits/#timeline-editsjson-format-definition","title":"Timeline Edits.json Format Definition","text":"

This page has been automatically generated from the schema TimelineEdits.schema.json.

"},{"location":"reference/timeline-edits/#/","title":"Timeline Edits Schema","text":"

This schema outlines the structure of timeline edits data, encompassing device information, place visit aggregates, and raw signal data from the device.

Property Description timelineEdits\u200b[] Timeline Editsarray of: object\u00a0\u00a0(Timeline Edit Information)List of all timeline edits."},{"location":"reference/timeline-edits/#/$defs/timelineEditsItem/","title":"Timeline Edit Information","text":"

Various information about the timeline edit, including device ID, place aggregates, and raw signal data.

Example
{\n\"deviceId\": \"0\",\n\"placeAggregates\": {\n\"placeAggregateInfo\": [\n{\n\"score\": 1228.0,\n\"numBucketsWithLocation\": 0,\n\"bucketSpanDays\": 0,\n\"point\": {\n\"latE7\": 429362473,\n\"lngE7\": -788308560\n},\n\"placeId\": \"ChIJV8SII64E1YkRvAqrnP5G_x8\",\n\"placePoint\": {\n\"latE7\": 429362442,\n\"lngE7\": -788308585\n}\n},\n{\n\"score\": 166.0,\n\"numBucketsWithLocation\": 0,\n\"bucketSpanDays\": 0,\n\"point\": {\n\"latE7\": 426994475,\n\"lngE7\": -778539281\n},\n\"placeId\": \"ChIJ4_FHs78TK4gRw8h22XkBDEA\",\n\"placePoint\": {\n\"latE7\": 426994650,\n\"lngE7\": -778539291\n}\n},\n{\n\"score\": 131.0,\n\"numBucketsWithLocation\": 0,\n\"bucketSpanDays\": 0,\n\"point\": {\n\"latE7\": 415908301,\n\"lngE7\": -739409850\n},\n\"placeId\": \"ChIJJRdROh863YkRmXCWQ14VMcI\",\n\"placePoint\": {\n\"latE7\": 415908776,\n\"lngE7\": -739409849\n}\n}\n],\n\"windowSizeHrs\": 2011,\n\"topRankedPlacesPlaceIds\": [\n\"ChIJV8SII64E1YkRvAqrnP5G_x8\",\n\"ChIJ4_FHs78TK4gRw8h22XkBDEA\",\n\"ChIJJRdROh863YkRmXCWQ14VMcI\"\n],\n\"processWindow\": {\n\"startTime\": \"2023-12-14T08:00:55Z\",\n\"endTime\": \"2024-03-07T08:00:55Z\"\n},\n\"metadata\": {\n\"platform\": \"UNKNOWN\"\n}\n}\n}\n
Property Description deviceId Device IDstringExample: \"0\"The unique identifier for the device that generated the data. placeAggregates Place Aggregatesobject\u00a0\u00a0(Place Aggregates)Aggregated information about places visited by the device. rawSignal Raw Signalobject\u00a0\u00a0(Raw Signal)Raw signal data from the device."},{"location":"reference/timeline-edits/#/$defs/timelineEditsItem/properties/placeAggregates/","title":"Place Aggregates","text":"

Aggregated information about places visited by the device.

Property Description metadata Metadataobject\u00a0\u00a0(Metadata)Metadata about the data object. placeAggregateInfo\u200b[] Place Aggregate Informationarray of: object\u00a0\u00a0(Place Aggregate Info Item)An array of place information, including score, location, and place ID. processWindow Process Windowobject\u00a0\u00a0(Process Window)The start and end time of the processing window. topRankedPlacesPlaceIds\u200b[] Top Ranked Placesarray of: stringAn array of place IDs for the top-ranked places. windowSizeHrs Time Window SizeintegerExample: 2016The size of the window in hours for the place aggregates."},{"location":"reference/timeline-edits/#/$defs/timelineEditsItem/properties/rawSignal/","title":"Raw Signal","text":"

Raw signal data from the device.

Example
{\n\"signal\": {\n\"position\": {\n\"point\": {\n\"latE7\": 426974802,\n\"lngE7\": -778539156\n},\n\"accuracyMm\": 100000,\n\"altitudeMeters\": 224.0,\n\"source\": \"WIFI\",\n\"timestamp\": \"2024-02-17T04:14:41.412Z\"\n}\n},\n\"additionalTimestamp\": \"2024-02-17T04:14:39.545Z\",\n\"metadata\": {\n\"platform\": \"ANDROID\"\n}\n}\n
Property Description additionalTimestamp Additional Timestampstring\u00a0\u00a0(date-time)Example: \"2024-02-17T05:54:01.359Z\"An additional timestamp associated with the raw signal. metadata Metadataobject\u00a0\u00a0(Metadata)Metadata about the data object. signal Signalobject\u00a0\u00a0(Signal)The signal data, including position, activity record, and wifi scan."},{"location":"reference/timeline-edits/#/$defs/metadata/","title":"Metadata","text":"

Metadata about the data object.

Property Description platform Device PlatformstringExample: \"ANDROID\"The platform that generated the data."},{"location":"reference/timeline-edits/#/$defs/timelineEditsItem/properties/placeAggregates/properties/placeAggregateInfo/items/","title":"Place Aggregate Info Item","text":"

The place aggregate info containing score, location, place ID, and other details.

Property Description bucketSpanDays Bucket SpanintegerExample: 0The span of the buckets in days. numBucketsWithLocation Number of BucketsintegerExample: 0The number of location buckets associated with the place. placeId Place IDstringExample: \"ChIJV8SII64E1YkRvAqrnP5G_x8\"The unique identifier for the place. placePoint Pointobject\u00a0\u00a0(Point)The geographical point. point Pointobject\u00a0\u00a0(Point)The geographical point. score ScorenumberExample: 1228.0The score assigned to the place."},{"location":"reference/timeline-edits/#/$defs/timelineEditsItem/properties/placeAggregates/properties/processWindow/","title":"Process Window","text":"

The start and end time of the processing window.

Property Description endTime End Timestring\u00a0\u00a0(date-time)Example: \"2024-03-07T08:00:55Z\"The end time of the processing window. startTime Start Timestring\u00a0\u00a0(date-time)Example: \"2023-12-14T08:00:55Z\"The start time of the processing window."},{"location":"reference/timeline-edits/#/$defs/signal/","title":"Signal","text":"

The signal data, including position, activity record, and wifi scan.

Property Description activityRecord Activity Recordobject\u00a0\u00a0(Activity Record)The activity record data, including detected activities and timestamp. position Positionobject\u00a0\u00a0(Position)The position data, including point, accuracy, altitude, source, and timestamp. wifiScan Wifi Scan Dataobject\u00a0\u00a0(Wifi Scan Data)The wifi scan data, including delivery time, devices, and source."},{"location":"reference/timeline-edits/#/$defs/point/","title":"Point","text":"

The geographical point.

Example
{\n\"latE7\": 416032766,\n\"lngE7\": 21841819,\n\"accuracyMeters\": 10,\n\"timestamp\": \"2022-03-03T08:27:48Z\"\n}\n
Property Description latE7 LatitudeintegerExample: 439362473Latitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -900000000 to +900000000 (divide value by 10^7 for the usual range -90\u00b0 to +90\u00b0). lngE7 LongitudeintegerExample: -788308560Longitude coordinate of the point. Degrees multiplied by 10^7 and rounded to the nearest integer, in the range -1800000000 to +1800000000 (divide value by 10^7 for the usual range -180\u00b0 to +180\u00b0)."},{"location":"reference/timeline-edits/#/$defs/signal/properties/activityRecord/","title":"Activity Record","text":"

The activity record data, including detected activities and timestamp.

Property Description detectedActivities\u200b[] Detected Activitiesarray of: object\u00a0\u00a0(Detected Activity Item)An array of detected activities, including activity type and probability. timestamp Timestampstring\u00a0\u00a0(date-time)Example: \"2024-02-17T05:26:47.066Z\"The timestamp of the activity record."},{"location":"reference/timeline-edits/#/$defs/signal/properties/position/","title":"Position","text":"

The position data, including point, accuracy, altitude, source, and timestamp.

Property Description accuracyMm Signal Position AccuracyintegerExample: 100000The accuracy of the position in millimeters. altitudeMeters AltitudenumberExample: 224.0The altitude of the position in meters. point Pointobject\u00a0\u00a0(Point)The geographical point. source Signal Position SourcestringExample: \"WIFI\"The source of the position data. speedMetersPerSecond SpeednumberExample: 0.0Speed in meters per second. timestamp Timestampstring\u00a0\u00a0(date-time)Example: \"2024-02-17T05:54:00.932Z\"The timestamp of the position data."},{"location":"reference/timeline-edits/#/$defs/signal/properties/wifiScan/","title":"Wifi Scan Data","text":"

The wifi scan data, including delivery time, devices, and source.

Property Description deliveryTime Delivery Timestring\u00a0\u00a0(date-time)Example: \"2024-02-17T04:26:44.661Z\"The delivery time of the wifi scan. devices\u200b[] Wifi Devicesarray of: object\u00a0\u00a0(Wifi Device)An array of wifi devices, including mac address and raw RSSI. source Wifi Scan SourcestringExample: \"ACTIVE_SCAN\"The source of the wifi scan data."},{"location":"reference/timeline-edits/#/$defs/signal/properties/activityRecord/properties/detectedActivities/items/","title":"Detected Activity Item","text":"

The detected activity item info containing activity type and probability.

Property Description activityType Activity TypestringExample: \"STILL\"The type of the detected activity. This could re-use the #/$defs/activityType from Records schema later. probability ProbabilitynumberExample: 0.96The probability of the detected activity."},{"location":"reference/timeline-edits/#/$defs/signal/properties/wifiScan/properties/devices/items/","title":"Wifi Device","text":"

The wifi device info containing mac address and raw RSSI.

Property Description mac MAC AddressstringExample: \"145830537259886\"The mac address of the wifi device. rawRssi Raw RSSIintegerExample: -51The raw RSSI of the wifi device."}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..a05c5b8 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,63 @@ + + + + https://locationhistoryformat.com/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/contributing/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/faq/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/guides/downloading/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/guides/general-structure/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/guides/raw-location/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/guides/semantic-location/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/reference/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/reference/records/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/reference/semantic/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/reference/settings/ + 2024-03-24 + daily + + + https://locationhistoryformat.com/reference/timeline-edits/ + 2024-03-24 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 0000000..a6d0353 Binary files /dev/null and b/sitemap.xml.gz differ diff --git a/static/icons/activity_types/accessible_forward_24dp.svg b/static/icons/activity_types/accessible_forward_24dp.svg new file mode 100644 index 0000000..aef238c --- /dev/null +++ b/static/icons/activity_types/accessible_forward_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/catching_pokemon_24dp.svg b/static/icons/activity_types/catching_pokemon_24dp.svg new file mode 100644 index 0000000..eb76855 --- /dev/null +++ b/static/icons/activity_types/catching_pokemon_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/directions_bike_24dp.svg b/static/icons/activity_types/directions_bike_24dp.svg new file mode 100644 index 0000000..feed500 --- /dev/null +++ b/static/icons/activity_types/directions_bike_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/directions_boat_24dp.svg b/static/icons/activity_types/directions_boat_24dp.svg new file mode 100644 index 0000000..2bd8ac3 --- /dev/null +++ b/static/icons/activity_types/directions_boat_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/directions_bus_24dp.svg b/static/icons/activity_types/directions_bus_24dp.svg new file mode 100644 index 0000000..b8b14d8 --- /dev/null +++ b/static/icons/activity_types/directions_bus_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/directions_car_24dp.svg b/static/icons/activity_types/directions_car_24dp.svg new file mode 100644 index 0000000..88881d7 --- /dev/null +++ b/static/icons/activity_types/directions_car_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/directions_railway_24dp.svg b/static/icons/activity_types/directions_railway_24dp.svg new file mode 100644 index 0000000..5916fe9 --- /dev/null +++ b/static/icons/activity_types/directions_railway_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/directions_run_24dp.svg b/static/icons/activity_types/directions_run_24dp.svg new file mode 100644 index 0000000..cfbad52 --- /dev/null +++ b/static/icons/activity_types/directions_run_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/directions_walk_24dp.svg b/static/icons/activity_types/directions_walk_24dp.svg new file mode 100644 index 0000000..dd27867 --- /dev/null +++ b/static/icons/activity_types/directions_walk_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/downhill_skiing_24dp.svg b/static/icons/activity_types/downhill_skiing_24dp.svg new file mode 100644 index 0000000..5da69c4 --- /dev/null +++ b/static/icons/activity_types/downhill_skiing_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/hiking_24dp.svg b/static/icons/activity_types/hiking_24dp.svg new file mode 100644 index 0000000..d4faa79 --- /dev/null +++ b/static/icons/activity_types/hiking_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/ice_skating_24dp.svg b/static/icons/activity_types/ice_skating_24dp.svg new file mode 100644 index 0000000..b56b518 --- /dev/null +++ b/static/icons/activity_types/ice_skating_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/kayaking_24dp.svg b/static/icons/activity_types/kayaking_24dp.svg new file mode 100644 index 0000000..0837693 --- /dev/null +++ b/static/icons/activity_types/kayaking_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/kitesurfing_24dp.svg b/static/icons/activity_types/kitesurfing_24dp.svg new file mode 100644 index 0000000..47722ef --- /dev/null +++ b/static/icons/activity_types/kitesurfing_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/local_airport_24dp.svg b/static/icons/activity_types/local_airport_24dp.svg new file mode 100644 index 0000000..ed14ae9 --- /dev/null +++ b/static/icons/activity_types/local_airport_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/local_taxi_24dp.svg b/static/icons/activity_types/local_taxi_24dp.svg new file mode 100644 index 0000000..85f96fb --- /dev/null +++ b/static/icons/activity_types/local_taxi_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/man_24dp.svg b/static/icons/activity_types/man_24dp.svg new file mode 100644 index 0000000..24dcc00 --- /dev/null +++ b/static/icons/activity_types/man_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/motorcycle_24dp.svg b/static/icons/activity_types/motorcycle_24dp.svg new file mode 100644 index 0000000..4550d93 --- /dev/null +++ b/static/icons/activity_types/motorcycle_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/moving_24dp.svg b/static/icons/activity_types/moving_24dp.svg new file mode 100644 index 0000000..3cafbe4 --- /dev/null +++ b/static/icons/activity_types/moving_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/nordic_walking_24dp.svg b/static/icons/activity_types/nordic_walking_24dp.svg new file mode 100644 index 0000000..1f564d3 --- /dev/null +++ b/static/icons/activity_types/nordic_walking_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/paragliding_24dp.svg b/static/icons/activity_types/paragliding_24dp.svg new file mode 100644 index 0000000..059ac4c --- /dev/null +++ b/static/icons/activity_types/paragliding_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/pool_24dp.svg b/static/icons/activity_types/pool_24dp.svg new file mode 100644 index 0000000..30a1572 --- /dev/null +++ b/static/icons/activity_types/pool_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/rowing_24dp.svg b/static/icons/activity_types/rowing_24dp.svg new file mode 100644 index 0000000..66592c9 --- /dev/null +++ b/static/icons/activity_types/rowing_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/sailing_24dp.svg b/static/icons/activity_types/sailing_24dp.svg new file mode 100644 index 0000000..993c537 --- /dev/null +++ b/static/icons/activity_types/sailing_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/skateboarding_24dp.svg b/static/icons/activity_types/skateboarding_24dp.svg new file mode 100644 index 0000000..ba2392b --- /dev/null +++ b/static/icons/activity_types/skateboarding_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/sledding_24dp.svg b/static/icons/activity_types/sledding_24dp.svg new file mode 100644 index 0000000..593430d --- /dev/null +++ b/static/icons/activity_types/sledding_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/snowboarding_24dp.svg b/static/icons/activity_types/snowboarding_24dp.svg new file mode 100644 index 0000000..9ac5fc4 --- /dev/null +++ b/static/icons/activity_types/snowboarding_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/snowmobile_24dp.svg b/static/icons/activity_types/snowmobile_24dp.svg new file mode 100644 index 0000000..0c37cf8 --- /dev/null +++ b/static/icons/activity_types/snowmobile_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/snowshoeing_24dp.svg b/static/icons/activity_types/snowshoeing_24dp.svg new file mode 100644 index 0000000..3902fd9 --- /dev/null +++ b/static/icons/activity_types/snowshoeing_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/subway_24dp.svg b/static/icons/activity_types/subway_24dp.svg new file mode 100644 index 0000000..95fb7be --- /dev/null +++ b/static/icons/activity_types/subway_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/surfing_24dp.svg b/static/icons/activity_types/surfing_24dp.svg new file mode 100644 index 0000000..0cef53d --- /dev/null +++ b/static/icons/activity_types/surfing_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/activity_types/tram_24dp.svg b/static/icons/activity_types/tram_24dp.svg new file mode 100644 index 0000000..7c094ef --- /dev/null +++ b/static/icons/activity_types/tram_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/file.svg b/static/icons/file.svg new file mode 100644 index 0000000..8daa008 --- /dev/null +++ b/static/icons/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/folder.svg b/static/icons/folder.svg new file mode 100644 index 0000000..fe2b0f7 --- /dev/null +++ b/static/icons/folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/semantic_types/home_circled_24dp.svg b/static/icons/semantic_types/home_circled_24dp.svg new file mode 100644 index 0000000..fdf8cc3 --- /dev/null +++ b/static/icons/semantic_types/home_circled_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/semantic_types/label_circled_24dp.svg b/static/icons/semantic_types/label_circled_24dp.svg new file mode 100644 index 0000000..918a24f --- /dev/null +++ b/static/icons/semantic_types/label_circled_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/semantic_types/schedule_circled_24dp.svg b/static/icons/semantic_types/schedule_circled_24dp.svg new file mode 100644 index 0000000..07026e7 --- /dev/null +++ b/static/icons/semantic_types/schedule_circled_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/semantic_types/work_circled_24dp.svg b/static/icons/semantic_types/work_circled_24dp.svg new file mode 100644 index 0000000..caa2082 --- /dev/null +++ b/static/icons/semantic_types/work_circled_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/images/download_takeout_1.png b/static/images/download_takeout_1.png new file mode 100644 index 0000000..64c5f42 Binary files /dev/null and b/static/images/download_takeout_1.png differ diff --git a/static/images/download_takeout_2.png b/static/images/download_takeout_2.png new file mode 100644 index 0000000..6d2b221 Binary files /dev/null and b/static/images/download_takeout_2.png differ diff --git a/static/images/download_takeout_3.png b/static/images/download_takeout_3.png new file mode 100644 index 0000000..4024fa5 Binary files /dev/null and b/static/images/download_takeout_3.png differ diff --git a/static/images/hero.png b/static/images/hero.png new file mode 100644 index 0000000..dd07f13 Binary files /dev/null and b/static/images/hero.png differ diff --git a/static/images/semantic_example.png b/static/images/semantic_example.png new file mode 100644 index 0000000..9f1934f Binary files /dev/null and b/static/images/semantic_example.png differ diff --git a/static/timeline_blue_24dp.svg b/static/timeline_blue_24dp.svg new file mode 100644 index 0000000..ae3cbab --- /dev/null +++ b/static/timeline_blue_24dp.svg @@ -0,0 +1 @@ + diff --git a/static/timeline_blue_24dp_favicon.svg b/static/timeline_blue_24dp_favicon.svg new file mode 100644 index 0000000..42723fc --- /dev/null +++ b/static/timeline_blue_24dp_favicon.svg @@ -0,0 +1,26 @@ + + + + + + + + + + +