UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 1.45 kB
import{tBaseLine as o,tPanion as e,dtPanion as n,ddtPanion as a,tAscensionZoomOnly as t,tAscensionZoomPan as c,dtAscensionZoomOnly as s,dtAscensionZoomPan as m,ddtAscensionZoomOnly as r,ddtAscensionZoomPan as i,tDescensionZoomOnly as u,tDescensionZoomPan as l,dtDescensionZoomOnly as d,dtDescensionZoomPan as x,ddtDescensionZoomOnly as p,ddtDescensionZoomPan as F}from"./functions.js";function f(f,Z){let P=D(f,Z);const b={ascensionFactor:null!=Z.ascensionFactor?Z.ascensionFactor:.5,descensionFactor:null!=Z.descensionFactor?Z.descensionFactor:.5},g=0===b.ascensionFactor,h=0===b.descensionFactor,M=g?t:c,k=g?s:m,N=g?r:i,j=h?u:l,w=h?d:x,z=h?p:F,A=o=>M(f,o,b)+e(f,o,b)+j(f,o,b),I=o=>k(f,o,b)+n(f,o,b)+w(f,o,b),q=o=>N(f,o,b)+a(f,o,b)+z(f,o,b);let v=A(P);const y=o(f);let B;const C=Z.maximumIterations||20,E=null!=Z.maximumDistance?Z.maximumDistance:1/0;for(B=0;B<C;B++){const o=1e-6,e=(I(P)+o)/q(P);if(isNaN(e)||P>=E&&e<0){if(!isFinite(E))return null;P=E,v=A(P);break}if(P-=e,P<f.compared.sourceZoom||P<f.compared.targetZoom)return null;const n=A(P);if(Math.abs(n-v)/v<=.005)break;v=n}return v>y*(1-.3)||P<f.compared.sourceZoom||P<f.compared.targetZoom?null:P}function D(o,e){const n=Math.max(o.compared.sourceZoom,o.compared.targetZoom),a=o.source.zoomAtPixelsPerPan(o.desiredPixelFlow/o.compared.pan)/2;return a<n?null!=e.maximumDistance?n+(e.maximumDistance-n)/2:1.5*n:e.maximumDistance?Math.min(e.maximumDistance,a):a}export{f as optimalDistance};