var geo = (function(){ var geo = {} var polling = false, fetching = false, poll_timeout = null geo.fetch = function(){ fetching = true navigator.geolocation.getCurrentPosition(geo.success, geo.error, {timeout: 15000}) } geo.success = function(position){ var lat_str = as_degrees( position.coords.latitude || 40.99167, "N", "S" ) var lng_str = as_degrees( position.coords.longitude || -74.07944, "E", "W" ) $(".latlng").html( lat_str + "     " + lng_str ) geo.done() } geo.error = function(error){ $(".latlng").html( "+40° 58' 90.9\" N     74° 04' 46.3\" W" ) geo.done() } geo.done = function(){ fetching = false if (polling) { clearTimeout( poll_timeout ) poll_timeout = setTimeout(geo.fetch, 15000) } } geo.start_polling = function(){ polling = true if (! fetching) { geo.fetch() } } geo.stop_polling = function(){ polling = false clearTimeout(poll_timeout) } function as_degrees (n, pos, neg) { var s = "" var sig = n >= 0 ? pos : neg s += Math.floor(n) + "° " n = Math.abs(n) n %= 1 n *= 60 nn = Math.floor(n) if (nn < 10) nn = "0" + nn s += nn + "' " n %= 1 n *= 60 nn = Math.floor(n) if (nn < 10) nn = "0" + nn s += nn n %= 1 n *= 10 nn = Math.floor(n) s += "." + nn + '\" ' + sig return s } return geo })()