<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<title>Batterymap</title>
var directionsService = new google.maps.DirectionsService;
var map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 40.790278, lng: -73.959722}
var infoWindow = new google.maps.InfoWindow({map: map});
var destWindow = new google.maps.InfoWindow({map: map});
// Try HTML5 geolocation.
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
lat: position.coords.latitude,
lng: position.coords.longitude
infoWindow.setPosition(pos);
infoWindow.setContent('From here, battery will lose…');
destWindow.setPosition(pos)
destWindow.setContent('Drag map to destination')
map.addListener('center_changed', function() {
timeout = window.setTimeout(update, 500);
var goTo = map.getCenter().toJSON();
var modes = {'DRIVING': undefined, 'TRANSIT': undefined, 'WALKING': undefined};
Object.keys(modes).forEach(function(mode) {
getDistance(directionsService, pos, goTo, mode, function(time) {
var html = Object.keys(modes).map(function(mode) {
return getBatteryFromTime(modes[mode]) + ' ' + mode.toLowerCase()
destWindow.setPosition(goTo);
destWindow.setContent(html);
destWindow.setZIndex(999);
handleLocationError(true, infoWindow, map.getCenter());
// Browser doesn't support Geolocation
handleLocationError(false, infoWindow, map.getCenter());
function getDistance(directionsService, from, to, mode, callback) {
directionsService.route({
}, function(response, status) {
if(response.routes && response.routes[0].legs && response.routes[0].legs[0].duration) {
callback(response.routes[0].legs[0].duration.value);
console.log('Directions request failed due to ' + status);
function handleLocationError(browserHasGeolocation, infoWindow, pos) {
infoWindow.setPosition(pos);
infoWindow.setContent(browserHasGeolocation ?
'Error: The Geolocation service failed.' :
'Error: Your browser doesn\'t support geolocation.');
function getBatteryFromTime(seconds) {
var iPhone7BatteryLifeInSeconds = 615 * 60;
return Math.round((seconds / iPhone7BatteryLifeInSeconds) * 100) + '%';
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCHQK4s3qUUwAF5ADAoZ-qDoDMeg7Noso4&callback=initMap">