@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 8.88 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{throwIfAborted as t}from"../../core/promiseUtils.js";import{formatLength as e,formatArea as r}from"../../core/quantityFormatUtils.js";import{createLength as n,createArea as a}from"../../core/quantityUtils.js";import{distance as o}from"../../core/libs/gl-matrix-2/math/vec2.js";import{geodesicDensify as i,simplify as s,geodesicLength as c,planarLength as u,planarArea as f,geodesicArea as l}from"../../geometry/geometryEngine.js";import m from"../../geometry/Point.js";import p from"../../geometry/Polygon.js";import y from"../../geometry/Polyline.js";import{projectWithZConversion as h,project as x}from"../../geometry/projection.js";import g from"../../geometry/SpatialReference.js";import{isSupported as w,geodesicLengths as R,geodesicAreas as d}from"../../geometry/support/geodesicUtils.js";import{imageToWorld as z,imageToWorldPanoramic as v}from"../../layers/orientedImagery/transformations/imageToWorld.js";import{convertSphereVertexToPixelLocation as M}from"../../layers/orientedImagery/transformations/utils.js";import{worldToImage as P,worldToImagePanoramic as j}from"../../layers/orientedImagery/transformations/worldToImage.js";const E=1e5;function b(t,e){let r=180*Math.atan2(-t.y+e.y,t.x-e.x)/Math.PI;return r<0&&(r+=180),r*Math.PI/180}function I(t,e){let r=180*Math.atan2(-t.y+e.y,t.x-e.x)/Math.PI;return r<0&&(r+=180),r*Math.PI/180}function q(t,e,r){if(!t?.length||!e?.length||!r)return;const[n,a]=t,[,o]=e,i=o-a;return[n+i*Math.cos(r),a+i*Math.sin(r)]}function L(t,e,r){if(w(t)){const t=R([e],"meters")[0];return{area:d([r],"square-meters")[0],perimeter:t}}const n=g.WGS84,a=x(e,n),o=x(r,n);let c=i(o,E);if(c=s(c),!c)return null;const u=R([a],"meters")[0];return{area:d([c],"square-meters")[0],perimeter:u}}async function W(e,r,n,a,o=!1,i){if(r.length<2||!a||!n||!e)return null;const s=N(n,e);if(!s)return null;const c=r.map((t=>[t.x,t.y])),u=c.at(0),f=c.at(-1);if(!u||!f)return null;const l=s.map((t=>_([u,f],t,e,o,!1))),m=await Promise.all(l);t(i);let p=0;for(const t of m){if(!t)return null;const e=Math.abs(t-a);p=Math.max(e,p)}return p}async function G(e,r,n,a,o,i=!1,s){if(r.length<2||!a||!n||!e)throw new Error("Missing parameters");const c=Q(n,e),u=r.map((t=>[t.x,t.y])),f=u.at(0),l=u.at(-1),m=c.map((t=>tt([f,l],t,e,o,i,!1))),p=await Promise.all(m);t(s);let y=0;for(const t of p){if(!t)return 0;const e=Math.abs(t-a);y=Math.max(e,y)}return y}function k(t,e){const r=J(t,!1);if(!r?.length)return;return 20*o([r[0].x,r[0].y],[r.at(-1).x,r.at(-1).y])/e}function D(t){const e=t.spatialReference;if(e.isGeographic){if(w(e))return R([t],"meters")[0];const r=x(t,g.WGS84);return R([r],"meters")[0]}return e.isWebMercator?c(t,"meters"):u(t,"meters")}function U(t,e){const r=s(e);if(!r)return null;const n=u(t,"meters");return{area:f(r,"square-meters"),perimeter:n}}function F(t,e){let r=i(e,E,"meters");if(r=s(r),!r)return null;const n=c(t,"meters");return{area:l(r,"square-meters"),perimeter:n}}async function S(e,r,n){if(!r||!e)throw new Error("Missing required parameters");const a=await z(e,r);t(n);const o=a.clone();o.z?o.z+=20:o.z=20;const{averageElevation:i,cameraPitch:s,cameraRoll:c,farDistance:u,...f}=r;return P(o,f)}async function T(e,r,n,a){const{attributes:o}=n,{location:i}=o,{updateElevationProps:s,...c}=r;if(!e||!r)throw new Error("Missing parameters");let u=i.clone();u.spatialReference.isGeographic&&(u=await h(u,g.WebMercator));const f=await v(e,{...c,cameraLocation:u},s);t(a);const l=f.clone();return l.z?l.z+=20:l.z=20,j(l,c)}function H(t,e,r,n,a=0,i=1,s){const{averageElevation:c,cameraPitch:u,cameraRoll:f,farDistance:l,...p}=n;if(a>=5||i<=.1)return{value:t};const y=new m({x:e.x,y:e.y,z:e.z?e.z+t:t,spatialReference:n.cameraLocation.spatialReference}),h=P(y,p),x=o([r[0].x,r[0].y],[h.x,h.y]),g=r.at(0),w=r.at(-1);if(!g||!w)return null;const R=o([g.x,g.y],[w.x,w.y])*t/x;return H(R,e,r,n,a+1,Math.abs(t-R))}function O(t,e,r,n,a=0,i=1,s){const{averageElevation:c,horizontalFieldOfView:u,verticalFieldOfView:f,farDistance:l,...p}=n;if(a>=5||i<=.1)return{value:t};const y=new m({x:e.x,y:e.y,z:e.z?e.z+t:t,spatialReference:n.cameraLocation.spatialReference}),h=j(y,p),x=o([r[0].x,r[0].y],[h.x,h.y]),g=r.at(0),w=r.at(-1);if(!g||!w)return null;const R=o([g.x,g.y],[w.x,w.y])*t/x;return O(R,e,r,n,a+1,Math.abs(t-R))}async function V(t,e){const{updateElevationProps:r,...n}=e;return await z(t,n,r)}async function A(t,e){const{updateElevationProps:r,...n}=e;return v(t,n,r)}function B(t){navigator.clipboard.writeText(t).catch((t=>{throw t}))}function C(t){const e=t.map((t=>[t.x,t.y])),r=t[0].spatialReference;return new y({paths:[e],spatialReference:r})}function J(t,e){return t.map((t=>({x:e?.5+t[0]:t[0],y:e?.5-t[1]:t[1]})))}function K(t,r,a,o,i){const s="measurement"===t?r:a;if(i&&s)return e(o,n(s,"meters"),i,3)||null}function N(t,e){const{cameraPitch:r,cameraRoll:n,cameraLocation:a}=t,{x:o,y:i,z:s,spatialReference:c}=a;if(e.every((t=>0===t))||!e||!e.length)return null;const[u,f,,l,p]=e,y=[-l,0,l],h=[-p,0,p],x=[-u,0,u],g=[-f,0,f],w=[];for(const R of y)for(const e of h)for(const a of x)for(const u of x)for(const f of g){const l={...t};l.cameraPitch=r+R,l.cameraRoll=n+e,l.cameraLocation=new m({x:o+a,y:i+u,z:s?s+f:0,spatialReference:{wkid:c.wkid}}),w.push(l)}return w}function Q(t,e){const{cameraHeading:r,cameraLocation:n}=t,{x:a,y:o,z:i,spatialReference:s}=n;if(e.every((t=>0===t))||!e||!e.length)throw new Error("Invalid parameters");const[c,u,f]=e,l=f>0?[-f,0,f]:[],p=c>0?[-c,0,c]:[],y=u>0?[-u,0,u]:[],h=[];for(const x of l)for(const e of p)for(const n of p)for(const c of y){const u={...t};u.cameraHeading=r+x,u.cameraLocation=new m({x:a+e,y:o+n,z:i?i+c:0,spatialReference:{wkid:s.wkid}}),h.push(u)}return h}function X(t,r,a,o,i){const s="measurement"===t?r:Z(a);if(i&&s)return e(o,n(s,"meters"),i,3)||null}function Y(t,e,n,o,i){const s="measurement"===t?e:n;if(i&&s)return r(o,a(s,"square-meters"),i,3)||null}function Z(t){return Math.sqrt(t.reduce(((t,e)=>t+e**2),0))}function $(t,e,r){if("default"===e)return t;const n={x:t[0],y:t[1],z:t[2]},a=M(n,r[0],r[1]);return[a.x,a.y]}async function _(e,r,n,a=!1,i=!1,s){if(!e||!r||e.length<2)return null;const c=J(e,a);if(!c||c.length<2)return null;const[u,f]=[c[0],c.at(-1)];if(!f)return null;const l=[u],m=await z(u,r);t(s);const p=m.clone();p.z?p.z+=20:p.z=20;const{averageElevation:y,cameraPitch:h,cameraRoll:x,farDistance:g,...w}=r,R=P(p,w),d=o([u.x,u.y],[R.x,R.y]),v=b(u,R);if(!v)return;const M=q([u.x,u.y],[f.x,f.y],v);if(!M?.length)return;l.push({x:M[0],y:M[1]});const j=20*o([l[0].x,l[0].y],[l[1].x,l[1].y])/d;if(!i)return j;const E=H(j,m,l,r,0,1);return E?.value}async function tt(e,r,n,a,i=!1,s=!1,c){const{attributes:u}=a,{location:f}=u,{updateElevationProps:l,...m}=r;if(!e||!r||e.length<2)throw new Error("Invalid parameters");const p=J(e,i),[y,x]=[p[0],p.at(-1)],w=[y];let R=f.clone();R.spatialReference.isGeographic&&(R=await h(R,g.WebMercator));const d=await v(y,{...m,cameraLocation:R},l);t(c);const z=d.clone();z.z?z.z+=20:z.z=20;const M=j(z,m),P=o([y.x,y.y],[M.x,M.y]),E=b(y,M);if(!E)return;const I=q([y.x,y.y],[x.x,x.y],E);if(!I?.length)return;w.push({x:I[0],y:I[1]});const L=20*o([w[0].x,w[0].y],[w[1].x,w[1].y])/P;if(!s)return L;const W=O(L,d,w,r,0,1);return W?.value}async function et(t,e,r=!1){if(t.length<3)return null;const n=J(t,r),a=await V(n,e),o=a.map((({x:t,y:e})=>[t,e]));t.push(t[0]),o.push(o[0]);const i=a[0].spatialReference,s=new y({paths:[o],spatialReference:i}),c=new p({rings:[o],spatialReference:i});return i.isGeographic?L(i,s,c):i.isWebMercator?F(s,c):U(s,c)}async function rt(e,r,n=!1,a){if(e.length<3)return null;const o=J(e,n),i=await A(o,r);t(a);const s=i.map((({x:t,y:e})=>[t,e]));e.push(e[0]),s.push(s[0]);const c=i[0].spatialReference,u=new y({paths:[s],spatialReference:c}),f=new p({rings:[s],spatialReference:c});return c.isGeographic?L(c,u,f):c.isWebMercator?F(u,f):U(u,f)}async function nt(t,e,r=!1){const n=J(t,r);return D(C(await V(n,e)))}async function at(e,r,n=!1,a){const o=J(e,n),i=await A(o,r);t(a);return D(C(i))}export{b as calculateAngle,I as calculateAnglePano,q as calculateCorrectedPixel,W as calculateHeightAccuracy,G as calculateHeightAccuracyPanoramic,k as calculateHeightFromTemporaryDistance,T as calculateReferenceImagePointPanoramic,S as calculateTempImagePoint,H as computeHeightIteratively,O as computeHeightIterativelyPanoramic,B as copyToClipboard,J as formatPixels,N as generateCombinations,Q as generateCombinationsPanoramic,Y as getConvertedArea,X as getConvertedDistance,K as getConvertedHeight,$ as getModeCorrectedPoint,Z as getRootOfSumOfSquaredErrors,_ as heightMeasurement2D,tt as heightMeasurementPanoramic,et as pixelAreaMeasurement2D,rt as pixelAreaMeasurementPanoramic,nt as pixelDistanceMeasurement2D,at as pixelDistanceMeasurementPanoramic};