haversine-geolocation
Version:
Get distances between two points or get closest position to current point. Based on the Haversine Formula
2 lines • 5.24 kB
JavaScript
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=5)}([function(e,t){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}},function(e,t){e.exports=function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}},function(e,t,r){var n=r(6),o=r(7),i=r(8),a=r(9);e.exports=function(e){return n(e)||o(e)||i(e)||a()}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function r(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}e.exports=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}},function(e,t,r){"use strict";r.r(t);var n=r(1),o=r.n(n),i=r(2),a=r.n(i),u=r(3),c=r.n(u),s=r(4),f=r.n(s);function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function p(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach((function(t){o()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var y=function(){function e(){c()(this,e)}return f()(e,[{key:"_convertMeasurements",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"km",r="";switch(t.toLowerCase()){case"mi":r=(.62137*e).toFixed(1);break;case"km":r=e.toFixed(1);break;case"m":r=(1e3*e).toFixed();break;default:r=e.toFixed(1)}return parseFloat(r)}},{key:"_haversine",value:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=t.map((function(e){return e/180*Math.PI})),o=n[0],i=n[1],a=n[2],u=n[3],c=6372.8,s=a-o,f=u-i,l=Math.sin(s/2)*Math.sin(s/2)+Math.sin(f/2)*Math.sin(f/2)*Math.cos(o)*Math.cos(a),p=2*Math.asin(Math.sqrt(l));return c*p}},{key:"isGeolocationAvailable",value:function(){return new Promise((function(e,t){"geolocation"in navigator?navigator.geolocation.getCurrentPosition((function(t){e(t)}),(function(e){switch(e.code){case e.PERMISSION_DENIED:t(new Error("Error: Permission denied"));break;case e.POSITION_UNAVAILABLE:t(new Error("Error: Position unavailable"));break;case e.TIMEOUT:t(new Error("Error: Timeout"))}})):t(new Error("Error: Geolocation disabled in your browser"))}))}},{key:"getDistanceBetween",value:function(e,t,r){if(e.hasOwnProperty("latitude")&&e.hasOwnProperty("longitude")&&t.hasOwnProperty("latitude")&&t.hasOwnProperty("longitude")){var n=this._haversine(e.latitude,e.longitude,t.latitude,t.longitude);return this._convertMeasurements(n,r)}throw new Error("Error: Position latitude or longitude is not correct")}},{key:"getClosestPosition",value:function(e,t,r){var n=this,o=t.map((function(t){return n.getDistanceBetween(e,t,r)})),i=o.indexOf(Math.min.apply(Math,a()(o)));return console.log("getClosestPosition: closestPosition: ",p(p({},t[i]),{},{haversine:{distance:o[i],measurement:r,accuracy:e.accuracy}})),p(p({},t[i]),{},{haversine:{distance:o[i],measurement:r,accuracy:e.accuracy}})}}]),e}();t.default=new y},function(e,t,r){var n=r(0);e.exports=function(e){if(Array.isArray(e))return n(e)}},function(e,t){e.exports=function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}},function(e,t,r){var n=r(0);e.exports=function(e,t){if(e){if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}}])}));
//# sourceMappingURL=build.js.map