-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgeolib.min.js
1 lines (1 loc) · 4.76 KB
/
geolib.min.js
1
function Geo(e,t,n,o,r,i){this.getGPSCoords=n,this.getSpeed=o,this.GPSPingRate=t,this.onTouchDown=r,this.onTouchUp=i,this.maxSpeed=2,this.prevCheckTime=Date.now(),this.metersTraveled=0,this.positionCheckRate=15,this.curPositionCheck=0,this.prevLat=null,this.prevLon=null,this.numGPSPrevUsed=5,this.latBuffer=[],this.lonBuffer=[];var a=this;this.ParseTouchDown=function(e){if(e.changedTouches&&e.changedTouches.length>0){var t=e.changedTouches[0].pageX,n=e.changedTouches[0].pageY;a.onTouchDown&&a.onTouchDown(t,n)}else if(e.clientX&&e.clientY){var t=e.clientX,n=e.clientY;a.onTouchDown&&a.onTouchDown(t,n)}},this.ParseTouchUp=function(e){if(e.changedTouches&&e.changedTouches.length>0){var t=e.changedTouches[0].pageX,n=e.changedTouches[0].pageY;a.onTouchUp&&a.onTouchUp(t,n)}else if(e.clientX&&e.clientY){var t=e.clientX,n=e.clientY;a.onTouchUp&&a.onTouchUp(t,n)}},this.CallGPSTracker=function(e){var t={maximumAge:a.GPSPingRate,timeout:a.GPSPingRate,enableHighAccuracy:e};navigator.geolocation.getCurrentPosition(function(t){a.ProcessPosition(t.coords.latitude,t.coords.longitude,e)},function(t){setTimeout(function(){a.CallGPSTracker(e)},a.GPSPingRate)},t)},this.MetersToDegrees=function(e){return ratioOfCircumfrence=1e3*e/40075.017,ratioOfCircumfrence/360},this.DegreesToMeters=function(e){},this.PtDistance=function(e,t,n,o){var r=.01745329252*e,i=.01745329252*t,a=.01745329252*n,h=.01745329252*o,s=Math.sin(r),u=Math.cos(r),c=Math.sin(a),f=Math.cos(a),l=h-i,d=Math.cos(l),g=f*Math.sin(l),v=u*c-s*f*d,p=s*c+u*f*d;return Math.abs(6371.009*Math.atan2(Math.sqrt(g*g+v*v),p))},this.ProcessPosition=function(e,t,n){for(;a.latBuffer.length>a.numGPSPrevUsed;)a.latBuffer.splice(0,1),a.lonBuffer.splice(0,1);for(var o=0,r=0,i=0;i<a.latBuffer.length;i++)o+=a.latBuffer[i],r+=a.lonBuffer[i];if(a.latBuffer.length>0&&(o/=a.latBuffer.length,r/=a.lonBuffer.length),Math.abs(e-o)>.01&&Math.abs(t-r)>.01&&(a.latBuffer=[],a.lonBuffer=[],o=e,r=t),o=(o*a.latBuffer.length+e)/(a.latBuffer.length+1),r=(r*a.lonBuffer.length+t)/(a.lonBuffer.length+1),a.latBuffer.push(e),a.lonBuffer.push(t),setTimeout(function(){a.CallGPSTracker(n)},a.GPSPingRate),a.latBuffer.length>0){if(a.prevLat&&a.prevLon||(a.prevLat=o,a.prevLon=r),a.curPositionCheck+=1,a.curPositionCheck>=a.positionCheckRate){var h=(Date.now()-a.prevCheckTime)/1e3,s=1e3*a.PtDistance(a.prevLat,a.prevLon,o,r),u=s/h;u<.5&&(s=0,u=0),s=Math.min(s,a.maxSpeed*h),a.getSpeed&&a.getSpeed(u,s),a.metersTraveled+=s,a.prevLat=o,a.prevLon=r,a.curPositionCheck=0,a.prevCheckTime=Date.now()}a.getGPSCoords&&a.getGPSCoords(o,r)}},this.ExpDistr=function(e,t,n){return Math.min(t,Math.round(-Math.log(n)*e))},this.GoodMod=function(e,t){return(t+e%t)%t},this.ClampLatLon=function(e,t){for(var n=!0;n;){for(n=!1;e>360;)e-=360,n=!0;for(;e<-360;)e+=360,n=!0;for(;t>360;)t-=360,n=!0;for(;t<-360;)t+=360,n=!0;for(;e>90;)e=180-e,n=!0;for(;e<-90;)e=-(180+e),n=!0;for(;t>180;)t-=360,n=!0;for(;t<-180;)t+=360,n=!0}return[e,t]},this.GeneratePoints=function(e,t,n){var o=a.ClampLatLon(e,t);e=o[0],t=o[1],e+=90,t+=180;for(var r=Math.round(1e4*e),i=Math.round(1e4*t),h=a.GoodMod(r,5001),s=a.GoodMod(i,5503),u=[],c=0;c<11;c++)for(var f=c-Math.floor(5.5),l=a.GoodMod(h+f,5001),d=0;d<11;d++)for(var g=d-Math.floor(5.5),v=a.GoodMod(s+g,5503),p=getxor4069(Math.round(7477*(5001*(l+1)+5001*(v+1)*5503))+983*n),P=p(),T=a.ExpDistr(3,18,P),w=0;w<T;w++){var M=getxor4069(Math.round(8353*p())),m=M()+f,L=M()+g;if(Math.sqrt(m*m+L*L)<6){var C=(r+m)/1e4-90,G=(i+L)/1e4-180;o=a.ClampLatLon(C,G),u.push([m,L,o[0],o[1],M])}}return u},window.addEventListener("ontouchstart",this.ParseTouchDown),window.addEventListener("touchstart",this.ParseTouchDown),window.addEventListener("mousedown",this.ParseTouchDown),window.addEventListener("onmousedown",this.ParseTouchDown),window.addEventListener("ontouchend",this.ParseTouchUp),window.addEventListener("touchend",this.ParseTouchUp),window.addEventListener("mouseup",this.ParseTouchUp),window.addEventListener("onmouseup",this.ParseTouchUp),this.CallGPSTracker(e)}function XorGen(e){var t=this;t.next=function(){var e,n,o=t.w,r=t.X,i=t.i;return t.w=o=o+1640531527|0,n=r[i+34&127],e=r[i=i+1&127],n^=n<<13,e^=e<<17,n^=n>>>15,e^=e>>>12,n=r[i]=n^e,t.i=i,n+(o^o>>>16)|0},function(e,t){var n,o,r,i,a,h=[],s=128;for(t===(0|t)?(o=t,t=null):(t+="\0",o=0,s=Math.max(s,t.length)),r=0,i=-32;i<s;++i)t&&(o^=t.charCodeAt((i+32)%t.length)),0===i&&(a=o),o^=o<<10,o^=o>>>15,o^=o<<4,o^=o>>>13,i>=0&&(a=a+1640531527|0,r=0==(n=h[127&i]^=o+a)?r+1:0);for(r>=128&&(h[127&(t&&t.length||0)]=-1),r=127,i=512;i>0;--i)o=h[r+34&127],n=h[r=r+1&127],o^=o<<13,n^=n<<17,o^=o>>>15,n^=n>>>12,h[r]=o^n;e.w=a,e.X=h,e.i=r}(t,e)}function getxor4069(e){null==e&&(e=+new Date);var t=new XorGen(e),n=function(){return(t.next()>>>0)/(4*(1<<30))};return n.double=function(){do{var e=((t.next()>>>11)+(t.next()>>>0)/(4*(1<<30)))/(1<<21)}while(0===e);return e},n.int32=t.next,n}