@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.35 kB
JavaScript
import{rad2deg as t,asinClamped as n,deg2rad as o}from"../../../core/mathUtils.js";import{isNone as r}from"../../../core/maybe.js";import{getReferenceEllipsoid as e}from"../../../geometry/ellipsoidUtils.js";import i from"../../../geometry/Point.js";function s(t,n,o){if(r(n.longitude)||r(n.latitude)||r(o.longitude)||r(o.latitude))throw new Error("Invalid points: no lon/lat");return u(t,n.longitude,n.latitude,o.longitude,o.latitude)}function u(t,r,e,i,s){const u=o(e),a=o(s),l=u-a,c=o(r)-o(i),d=Math.sin(l/2),h=Math.sin(c/2),m=2*n(Math.sqrt(d*d+Math.cos(u)*Math.cos(a)*h*h))*t;return Math.round(1e4*m)/1e4}function a(t,n,o){const r=n.spatialReference,u=e(r),a=new i(n.x,t.y,r),l=new i(o.x,t.y,r),c=new i(t.x,n.y,r),d=new i(t.x,o.y,r);return{lon:s(u.radius,a,l),lat:s(u.radius,c,d)}}function l(r,e,i){const s=e/i,u=o(r),a=Math.sin(s/2),l=Math.cos(u),c=2*n(Math.sqrt(a*a/(l*l)));return t(c)}function c(t,n){let o=t/15;return n||(o=Math.round(o)),o}function d(t,n){const o=t?.[0];if(null==o)return null;n||(n={hours:0,minutes:0,seconds:0}),n.hours=c(o,!0);const r=n.hours%1;n.hours-=r,n.minutes=60*r;const e=n.minutes%1;return n.minutes-=e,n.seconds=Math.round(60*e),n}export{u as getGreatCircleDistance,s as getGreatCircleDistanceFromPoints,a as getGreatCircleSpanAt,l as getLonDeltaForDistance,c as longitudeToTimezone,d as positionToTimezoneInfo};