/* COPYRIGHT Esri - https://js.arcgis.com/5.1.0/LICENSE.txt */
import{createLength as n}from"../../core/quantity.js";import{lengthUnitFromSpatialReference as t,verticalLengthUnitFromSpatialReference as e}from"../../core/units.js";import{distance as r,set as l}from"../../core/libs/gl-matrix-2/math/vec3.js";import{create as i}from"../../core/libs/gl-matrix-2/factories/vec3f64.js";import{projectVectorToVector as u}from"../../geometry/projection/projectVectorToVector.js";import{equals as o}from"../../geometry/support/spatialReferenceUtils.js";import{computeEuclideanMeasurementSR as c}from"./measurementUtils.js";function s(n){return f(n,0)}function a(n){return f(n,1)}function f(e,r){const{hasZ:l,spatialReference:i}=e,u=c(i);let o=0;const s=t(u);if(null==s)return null;const a=0===r?g:j;for(const n of e.paths){if(n.length<2)continue;const t=n.length-1;for(let e=0;e<t;++e){const t=n[e];S[0]=t[0],S[1]=t[1],S[2]=l?t[2]:0;const r=n[e+1];M[0]=r[0],M[1]=r[1],M[2]=l?r[2]:0;const u=a(S,M,i);if(null==u)return null;o+=u.value}}return n(o,s)}function p(n,t){const{spatialReference:e}=n;return o(e,t.spatialReference)?(S[0]=n.x,S[1]=n.y,S[2]=n.hasZ?n.z:0,M[0]=t.x,M[1]=t.y,M[2]=t.hasZ?t.z:0,Z(S,M,e)):null}function h(n,t){const{spatialReference:e}=n;return o(e,t.spatialReference)?(S[0]=n.x,S[1]=n.y,S[2]=n.hasZ?n.z:0,M[0]=t.x,M[1]=t.y,M[2]=t.hasZ?t.z:0,g(S,M,e)):null}function m(n,t){const{spatialReference:e}=n;return o(e,t.spatialReference)?(S[0]=n.x,S[1]=n.y,S[2]=n.hasZ?n.z:0,M[0]=t.x,M[1]=t.y,M[2]=t.hasZ?t.z:0,j(S,M,e)):null}function z(n,t){const{spatialReference:e}=n;return o(e,t.spatialReference)?(S[0]=n.x,S[1]=n.y,S[2]=n.hasZ?n.z:0,M[0]=t.x,M[1]=t.y,M[2]=t.hasZ?t.z:0,v(S,M,e)):null}function x(n,t){const{spatialReference:e}=n;return o(e,t.spatialReference)?(S[0]=n.x,S[1]=n.y,S[2]=n.hasZ?n.z:0,M[0]=t.x,M[1]=t.y,M[2]=t.hasZ?t.z:0,d(S,M,e)):null}function y(n){return null!=n?R(n.hasZ?n.z:0,n.spatialReference):null}function R(t,r){const l=e(r);return null!=l?n(t??0,l):null}function Z(t,e,r){const l=b(t,e,r);return null!=l?{direct:n(l.direct,l.unit),horizontal:n(l.horizontal,l.unit),vertical:n(l.vertical,l.unit)}:null}function g(t,e,r){const l=b(t,e,r,0);return null!=l?n(l.direct,l.unit):null}function j(t,e,r){const l=b(t,e,r,1);return null!=l?n(l.horizontal,l.unit):null}function v(t,e,r){const l=b(t,e,r,2);return null!=l?n(Math.abs(l.verticalSigned),l.unit):null}function d(t,e,r){const l=b(t,e,r,2);return null!=l?n(l.verticalSigned,l.unit):null}function b(n,e,i,o){const s=c(i),a=t(s);if(null==a)return null;const f=e[2]-n[2];if(2===o)return{verticalSigned:f,unit:a};if(!u(n,i,U,s)||!u(e,i,V,s))return null;if(0===o){return{direct:r(V,U),unit:a}}if(l(q,n[0],n[1],e[2]),!u(q,i,q,s))return null;const p=r(q,V);if(1===o)return{horizontal:p,unit:a};return{direct:r(V,U),horizontal:p,vertical:Math.abs(f),unit:a}}const S=i(),M=i(),U=i(),V=i(),q=i();export{y as elevationFromPoint,R as elevationFromZ,g as euclideanDirectDistance,h as euclideanDirectDistanceBetweenPoints,Z as euclideanDistance,p as euclideanDistanceBetweenPoints,j as euclideanHorizontalDistance,m as euclideanHorizontalDistanceBetweenPoints,a as euclideanHorizontalLength,s as euclideanLength,v as verticalDistance,z as verticalDistanceBetweenPoints,d as verticalSignedDistance,x as verticalSignedDistanceBetweenPoints};
