var map = L.map('map', { zoomControl: false }).setView([45.516, -122.660], 14, null, null, 24); var opts = { attribution: 'Map data © OpenStreetMap contributors, CC-BY-SA, Imagery © Mapbox', maxZoom: 18, zoomOffset: -1, tileSize: 512, id: 'mapbox/light-v10', accessToken: 'pk.eyJ1IjoiYWFyb25wayIsImEiOiJja3A0eXV2ZXIwMGt3MnVuc2Uzcm1yYzFuIn0.-_qwPOLRiQk8t56xs6vkfg' }; if(getQueryVariable('attribution') == 0) { opts.attribution = 'Mapbox'; } L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', opts).addTo(map); if(getQueryVariable('controls') != 0) { new L.Control.Zoom({ position: 'topleft' }).addTo(map); } var geojsonLineOptions = { color: "#0033ff", weight: 4, opacity: 0.5 }; var startIcon = L.icon({ iconUrl: '/assets/map-pin-start.png', iconSize: [18,28], iconAnchor: [9,28] }); // Load the current location and show on the map var currentLocationMarker; var currentTrack; var lastSeenTimestamp; function getCurrentLocation() { var interval = 5000; if(getQueryVariable('interval')) { interval = getQueryVariable('interval'); } $.getJSON("/share/current.json?token="+$("#share_token").val(), function(data){ if(data.data) { moveMarkerToPosition(data.data); if(lastSeenTimestamp != data.data.properties.timestamp) { map.setView(currentLocationMarker.getLatLng()); } lastSeenTimestamp = data.data.properties.timestamp; } setTimeout(getCurrentLocation, interval); }); } function getRecentHistory() { $.getJSON("/share/history.json?token="+$("#share_token").val(), function(data){ if(data.linestring) { L.geoJson(data.linestring, { style: geojsonLineOptions }).addTo(map); } }); } getCurrentLocation(); getRecentHistory(); function moveMarkerToPosition(feature) { if(feature && feature.geometry) { var coord = pointFromGeoJSON(feature.geometry.coordinates); if(coord) { if(!currentTrack) { currentTrack = L.polyline([coord, coord]).addTo(map); } else { currentTrack.addLatLng(coord); } if(!currentLocationMarker) { currentLocationMarker = L.marker(coord).addTo(map); } else { currentLocationMarker.setLatLng(coord); } } } } function pointFromGeoJSON(geo) { return L.latLng(geo[1], geo[0]) } function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); if (decodeURIComponent(pair[0]) == variable) { return decodeURIComponent(pair[1]); } } }