Skip to content

Instantly share code, notes, and snippets.

@lasergoat
Created March 1, 2016 17:10
Show Gist options
  • Save lasergoat/193f8f5a2a4c7c052dce to your computer and use it in GitHub Desktop.
Save lasergoat/193f8f5a2a4c7c052dce to your computer and use it in GitHub Desktop.
Angular Geo Location Snippet
var app = angular.module('app', []);
app.factory('geoLoc', ['$q', '$window', function ($q, $window) {
'use strict';
return {
currentPosition: function() {
var deferred = $q.defer();
if (!$window.navigator.geolocation) {
deferred.reject('Geolocation not supported.');
} else {
$window.navigator.geolocation.getCurrentPosition(
function (position) {
deferred.resolve(position);
},
function (err) {
deferred.reject(err);
}
);
}
return deferred.promise;
}
};
}]);
app.factory('geoDistance', function () {
'use strict';
var deg2rad = function(deg) {
return deg * (Math.PI/180)
}
return {
miles: function(lat1,lon1,lat2,lon2) {
var R = 3961; // Radius of the earth in miles
var dLat = deg2rad(lat2-lat1); // deg2rad below
var dLon = deg2rad(lon2-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in miles
return d;
}
};
});
app.controller('Controller',
function(geoLoc, geoDistance, $http, $interval, $scope) {
var self = this;
self.errorMessage = null;
self.loading = false;
var round = function(x) {
return Math.round(x*100)/100;
};
self.getTime = function(distance) {
var mph = 3.1;
return round(distance / mph * 60) * 1.2;
}
self.getLocation = function(position) {
var lat2 = 28.5492468;
var lon2 = -81.3545004;
self.loading = true;
geoLoc.currentPosition().then(function(pos) {
console.log(pos);
var lat1 = pos.coords.latitude;
var lon1 = pos.coords.longitude;
self.distance = round(geoDistance.miles(lat1, lon1, lat2, lon2));
self.loading = false;
});
};
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment