Advertisement
Guest User

Untitled

a guest
Feb 10th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. app.factory('$geoUtils', function($cordovaGeolocation, $filter) {
  2. var geoUtils = this;
  3.  
  4. geoUtils.init = function() {
  5. if (Number.prototype.toRadians === undefined) {
  6. Number.prototype.toRadians = function() {
  7. return this * Math.PI / 180;
  8. };
  9. }
  10. };
  11. geoUtils.init();
  12.  
  13. geoUtils.getLatLng = function(lat, lng) {
  14. return {
  15. latitude: lat,
  16. longitude: lng
  17. };
  18. };
  19. geoUtils.getDistance = function(location1, location2, parse) {
  20. var lat1 = Number(location1.latitude),
  21. lat2 = Number(location2.latitude),
  22. lon1 = Number(location1.longitude),
  23. lon2 = Number(location2.longitude);
  24. var R = 6371000; // metres
  25. var f1 = lat1.toRadians();
  26. var f2 = lat2.toRadians();
  27. var diff_F = (lat2 - lat1).toRadians();
  28. var diff_L = (lon2 - lon1).toRadians();
  29.  
  30. var a = Math.sin(diff_F / 2) * Math.sin(diff_F / 2) +
  31. Math.cos(f1) * Math.cos(f1) *
  32. Math.sin(diff_L / 2) * Math.sin(diff_L / 2);
  33. var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  34.  
  35. var d = R * c * 0.000621371192;
  36. return parse ? $filter('number')(Math.ceil(d)) : Math.ceil(d);
  37. };
  38.  
  39. geoUtils.getBounds = function (set) {
  40. var obj = {
  41. minX: set [0].lat,
  42. maxX: set [0].lat,
  43. minY: set [0].lng,
  44. maxY: set [0].lng
  45. };
  46. set.reduce(function(arr, cur) {
  47. obj.minX = arr.minX > cur.lat ? cur.lat : arr.minX;
  48. obj.minY = arr.minY > cur.lng ? cur.lng : arr.minY;
  49. obj.maxX = arr.maxX < cur.lat ? cur.lat : arr.maxX;
  50. obj.maxY = arr.maxY < cur.lng ? cur.lng : arr.maxY;
  51. return obj;
  52. }, obj);
  53. return [
  54. [obj.maxX, obj.minY],
  55. [obj.minX, obj.maxY]
  56. ];
  57. };
  58.  
  59. return geoUtils;
  60. })
  61. .factory('$safeGL', function($q, $cordovaGeolocation, $localstorage) {
  62.  
  63. this.getCurrentPosition = function(options) {
  64. var defer = $q.defer();
  65. $cordovaGeolocation.getCurrentPosition(angular.extend({
  66. timeout: 3000,
  67. enableHighAccuracy: false
  68. }, options)).then(function(res) {
  69. defer.resolve(angular.extend(res, {
  70. available: true
  71. }));
  72. }, function(e) {
  73. defer.resolve(angular.extend(e, {
  74. available: false
  75. }));
  76. });
  77. return defer.promise;
  78. };
  79.  
  80. return this;
  81. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement