UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 4.42 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{valueInUnit as e,createAngle as n,createLength as t}from"../../../core/quantityUtils.js";import{lengthUnitFromSpatialReference as r,verticalLengthUnitFromSpatialReference as o}from"../../../core/unitUtils.js";import{d as i,c as l,f as u}from"../../../chunks/vec32.js";import s from"../../../geometry/SpatialReference.js";import{projectVectorToVector as c}from"../../../geometry/projection/projectVectorToVector.js";import{geodesicCompatibleSpatialReference as a}from"../../../geometry/support/geodesicUtils.js";import{makeDehydratedPoint as f}from"../../../layers/graphics/dehydratedPoint.js";import{getConvertedElevationFromXYZ as m}from"../../../support/elevationInfoUtils.js";import{CoordinateConstraint as d,VerticalCylinderConstraint as p,constraintOrSet as v,HorizontalPlaneConstraint as g,VerticalHalfPlaneConstraint as R,GeodesicConstraint as w,PointConstraint as j}from"./constraints.js";import{createWritable as y,fromPoint as h,toElevationAlignedDehydratedPoint as x}from"./normalizedPoint.js";import{getDegreesGeographic as S,DirectionMode as I,directionBetweenPoints as U,pointFromDistanceAlongAzimuth as M}from"../../support/angularMeasurementUtils.js";function Z(e,n,t,r,o,i){let l="geodesic",u=a(t);const s=y();return h(e,n,r,s),s[2]=0,u&&c(s,t,s,u)||(l="euclidean",u=t),{mode:l,view:n,elevationInfo:r,hasZ:o,directionMode:i,spatialReference:e.spatialReference,measurementSR:u,origin:s}}function b(n,t,o){if(null==t||null==n)return;const i=r(o.measurementSR);if(null==i)return;const l=G(n,o);if(null==l)return;const u=e(t,i);return new p(l,u)}function A(e,t,r,o){if(null==r||null==e)return;const i=G(e,o);if(null==i)return;const l=S(r),u=10,s=e=>{if(null==e)return;const t=y(),r=n(e,"degrees","geographic");return M(t,i,o.measurementSR,u,r,o.mode)?new R(i,t):void 0},c=()=>{if(null!=t&&null!=e)return S(U(t,e))};switch(o.directionMode){case I.Absolute:return s(l);case I.Relative:{const e=c();if(null==e)return;return s(e+l)}case I.RelativeBilateral:{const e=c();if(null==e)return;return v([s(e+l),s(e-l)])}}}function B(e,n){const t=C(e,n);return null!=t?new g(t):void 0}function P(e,n,t){const{context:r,longitude:o,latitude:i,direction:l,distance:u,elevation:s}=t;if(null!=o||null!=i||null!=u||null!=s||null!=l){if(null!=o||null!=i){const e=S(o),n=S(i),t=C(s,r);return new d(e,n,t)}return T(e,n,t)}}function T(n,t,{context:r,direction:o,distance:i,elevation:l}){if(null==t)return B(l,r);const{view:u,elevationInfo:s,measurementSR:a}=r,f=h(t,u,s);if(!a||!c(f,t.spatialReference,E,a))return;const[m,d]=E,p=null!=i?e(i,"meters"):void 0,g=S(o),R=C(l,r),y=e=>{const n=new w([m,d],a,p,R,e);return null==p||null==e||null==R&&r.hasZ?n:new j(n.closestTo(f))};if(null==g)return y(void 0);const x=()=>{if(null!=n&&null!=t)return S(U(n,t))};switch(r.directionMode){case I.Absolute:return y(g);case I.Relative:{const e=x();if(null==e)return;return y(e+g)}case I.RelativeBilateral:{const e=x();if(null==e)return;return v([y(e+g),y(e-g)])}}}function V(e){return"geodesic"===e.context.mode?P(null,null,e):q(e)}function k(e,n,t){const{context:r,x:o,y:i,distance:l,direction:u,elevation:s}=t;return"geodesic"===r.mode?P(n,e,t):null!=o||null!=i?q(t):z([b(e,l,r),A(e,n,u,r),B(s,r)])}function q({x:e,y:n,elevation:t,context:r}){J.x=e?.value??0,J.y=n?.value??0,J.spatialReference=r.spatialReference;const o=G(J,r,F);return new d(null!=e&&null!=o?o[0]:void 0,null!=n&&null!=o?o[1]:void 0,C(t,r))}function z(e){let n;for(const t of e)t&&(n=n?.intersect(t)??t);return n}function G(e,n,t=y()){const{view:r,elevationInfo:o,measurementSR:l,origin:u,mode:s}=n;if(h(e,r,o,t),c(t,e.spatialReference,t,l))return"geodesic"!==s&&i(t,t,u),t}function W(e,n,t,r){const{view:o,measurementSR:i,spatialReference:s,origin:a,mode:f}=t;if("geodesic"===f?l(H,e):u(H,e,a),c(H,i,H,s))return x(H,o,n,t,r)}function C(e,n){return D(e,n)?.value??void 0}function D(n,{view:r,origin:i,elevationInfo:l,hasZ:u,measurementSR:s}){if(null==n||!u)return;const c=o(s);if(null==c)return;const[a,f]=i,d=e(n,c),p="3d"===r?.type?m(r,a,f,d,s,l):d;return null!=p?t(p,c):void 0}const E=y(),F=y(),H=y(),J=f(0,0,0,s.WGS84);export{W as constraintSpaceToPoint,Z as getConstraintContext,P as getGeodesicConstraint,V as getPointConstraint,k as getPolylineOrPolygonConstraint,z as intersectAll,G as pointToConstraintSpace};