UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) • 14.4 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{rad2deg as e}from"../../core/mathUtils.js";import{throwIfAborted as t}from"../../core/promiseUtils.js";import{createArea as n,createLength as r}from"../../core/quantity.js";import{formatArea as a,formatLength as o}from"../../core/quantityFormatUtils.js";import{set as i,determinant as c}from"../../core/libs/gl-matrix-2/math/mat3.js";import{create as s}from"../../core/libs/gl-matrix-2/factories/mat3f64.js";import{zeros as l,fromValues as u}from"../../core/libs/gl-matrix-2/factories/vec3f64.js";import{distance as f}from"../../core/libs/gl-matrix-2/math/vec2.js";import{set as m,cross as p,sub as h}from"../../core/libs/gl-matrix-2/math/vec3.js";import{isSupported as y,geodesicLengths as g,geodesicAreas as w}from"../../geometry/geodesicUtils.js";import x from"../../geometry/Point.js";import v from"../../geometry/Polygon.js";import R from"../../geometry/Polyline.js";import{projectAsync as d,project as M}from"../../geometry/projectionUtils.js";import P from"../../geometry/SpatialReference.js";import{e as z}from"../../chunks/areaOperator.js";import{l as j,e as b}from"../../chunks/geodeticAreaOperator.js";import{l as E,e as S}from"../../chunks/geodeticDensifyOperator.js";import{l as L,e as O}from"../../chunks/geodeticLengthOperator.js";import{e as W}from"../../chunks/lengthOperator.js";import{e as I}from"../../chunks/simplifyOperator.js";import{imageToWorldPanoramic as q,imageToWorld as G}from"../../layers/orientedImagery/transformations/imageToWorld.js";import{getImageToWorldPanoramicProperties as k,getUpdateElevationProps as A,convertSphereVertexToPixelLocation as D,getImageToWorldProperties as U,scaleWithFactor as B}from"../../layers/orientedImagery/transformations/utils.js";import{worldToImagePanoramic as H,worldToImage as F}from"../../layers/orientedImagery/transformations/worldToImage.js";const T=1e5,V="meters",C="square-meters";function J(e,t){let n=180*Math.atan2(-e.y+t.y,e.x-t.x)/Math.PI;return n<0&&(n+=180),n*Math.PI/180}function K(e,t){let n=180*Math.atan2(-e.y+t.y,e.x-t.x)/Math.PI;return n<0&&(n+=180),n*Math.PI/180}function N(e,t,n){if(!e?.length||!t?.length||!n)return;const[r,a]=e,[,o]=t,i=o-a;return[r+i*Math.cos(n),a+i*Math.sin(n)]}async function Q(e,t,n){if(await E(),y(e)){const e=g([t],V)[0];return{area:w([n],C)[0],perimeter:e}}const r=P.WGS84,a=M(t,r),o=M(n,r);let i=S(o,T);if(i=i?I(i):null,!i)return null;const c=g([a],V)[0];return{area:w([i],C)[0],perimeter:c}}function X(e,t,n=1){const r=Re(e,!1);if(!r?.length)return;return 20*f([r[0].x,r[0].y],[r.at(-1).x,r.at(-1).y])*n/t}async function Y(e){await L();const t=e.spatialReference;if(t.isGeographic){if(y(t))return g([e],V)[0];const n=M(e,P.WGS84);return g([n],V)[0]}return t.isWebMercator?O(e,{unit:V}):W(e,{unit:V})}function Z(e){if(!e?.length)throw new Error("Invalid deviations array");const[t,n,r]=[0,1,2].map(t=>e.map(e=>e[t]).filter(e=>null!==e)).map(e=>e.length?be(e):0);return[t,n,r]}function $(e,t){const n=I(t);if(!n)return null;const r=W(e,{unit:V});return{area:z(n,{unit:C}),perimeter:r}}function _(e,t){return[(e[1][0]-e[0][0])/t,(e[1][1]-e[0][1])/t,(e[1][2]-e[0][2])/t]}async function ee(e,t){await Promise.all([j(),E(),L()]);let n=S(t,T);if(n=n?I(n):null,!n)return null;const r=O(e,{unit:V});return{area:b(n,{unit:C}),perimeter:r}}async function te(e,n,r){if(!n||!e)throw new Error("Missing required parameters");const a=await G(e,n);t(r);const o=a.clone();o.z?o.z+=20:o.z=20;const{averageElevation:i,cameraPitch:c,cameraRoll:s,farDistance:l,...u}=n;return F(o,u)}async function ne(e,n,r,a){const{attributes:o}=r,{location:i}=o,{updateElevationProps:c,...s}=n;if(!e||!n)throw new Error("Missing parameters");let l=i.clone();l.spatialReference.isGeographic&&(l=await d(l,P.WebMercator));const u=await q(e,{...s,cameraLocation:l},c);t(a);const f=u.clone();return f.z?f.z+=20:f.z=20,H(f,s)}function re(e,t,n,r,a=0,o=1,i){const{averageElevation:c,cameraPitch:s,cameraRoll:l,farDistance:u,...m}=r;if(a>=5||o<=.1){return{value:e*Oe(r.cameraLocation.spatialReference)}}const p=new x({x:t.x,y:t.y,z:t.z?t.z+e:e,spatialReference:r.cameraLocation.spatialReference}),h=F(p,m),y=f([n[0].x,n[0].y],[h.x,h.y]),g=n.at(0),w=n.at(-1);if(!g||!w)return null;const v=f([g.x,g.y],[w.x,w.y])*e/y;return re(v,t,n,r,a+1,Math.abs(e-v))}function ae(e,t,n,r,a=0,o=1,i){const{averageElevation:c,horizontalFieldOfView:s,verticalFieldOfView:l,farDistance:u,...m}=r;if(a>=5||o<=.1){return{value:e*Oe(r.cameraLocation.spatialReference)}}const p=new x({x:t.x,y:t.y,z:t.z?t.z+e:e,spatialReference:r.cameraLocation.spatialReference}),h=H(p,m),y=f([n[0].x,n[0].y],[h.x,h.y]),g=n.at(0),w=n.at(-1);if(!g||!w)return null;const v=f([g.x,g.y],[w.x,w.y])*e/y;return ae(v,t,n,r,a+1,Math.abs(e-v))}async function oe(e,t,n){return e.spatialReference&&!t.spatialReference.equals(e.spatialReference)&&(t=await d(t,e.spatialReference)),new R({paths:[[[e.x,e.y,e.z??0],[t.x,t.y,t.z??0]]],spatialReference:n})}function ie(e){return 1/Math.cos(Math.PI/2-2*Math.atan(Math.exp(-1*e/6378137)))}function ce(e,t){return Math.sqrt((Math.sqrt((e[0][0]-e[1][0])**2+(e[0][1]-e[1][1])**2)/t)**2+(e[0][2]-e[1][2])**2)}function se(e,t){return Math.sqrt((e[0][0]-e[1][0])**2+(e[0][1]-e[1][1])**2)/t}function le(t){return e(Math.atan((t[1][2]-t[0][2])/Math.sqrt((t[1][0]-t[0][0])**2+(t[1][1]-t[0][1])**2)))}function ue(t){let n=90-e(Math.atan2(t[1][1]-t[0][1],t[1][0]-t[0][0]));return n<0&&(n+=360),n}function fe(e,t){return new x({x:(e.pointOnA[0]+e.pointOnB[0])/2,y:(e.pointOnA[1]+e.pointOnB[1])/2,z:(e.pointOnA[2]+e.pointOnB[2])/2,spatialReference:t})}async function me(e){if(2===e?.length){const t=[];let n=1;const[r,a]=e,o=r.camera.spatialReference,{measurePoints:i}=r;for(let e=0;e<i.length;e++){const i=await oe(r.camera,r.measurePoints[e],o),c=await oe(a.camera,a.measurePoints[e],o),s=await Fe(i,c);if(!s)return null;const l=fe(s,o);l.spatialReference.isWebMercator&&(n=ie(l.y)),t.push([l.x,l.y,l.z??0])}if(t?.length>1){return{distance:ce(t,n),horizontalDistance:se(t,n),verticalDistance:Math.abs(t[0][2]-t[1][2]),slope:le(t),aspect:ue(t)}}}return null}async function pe(e){const t=e[0].camera.spatialReference;if(2!==e?.length)return null;const[n,r]=e,{camera:a,measurePoints:o}=n,{camera:i,measurePoints:c}=r,s=await oe(a,o[0],t),l=await oe(i,c[0],t),u=await Fe(s,l);return u?fe(u,t)??null:null}async function he(e,t){if(!e?.length)return null;const n=[],r=e[0],a=e[1],o=r.camera.spatialReference,{measurePoints:i}=r;for(let u=0;u<i.length;u++){const e=await oe(r.camera,r.measurePoints[u],o),t=await oe(a.camera,a.measurePoints[u],o),i=await Fe(e,t);if(!i)return null;const c=fe(i,o);n.push([c.x,c.y,c.z??0])}if(n?.length<2)return null;const c=new R({paths:[n],spatialReference:t}),s=new v({rings:[n],spatialReference:t});if(t.isGeographic){const e=await Q(t,c,s);return e?.area??null}if(t.isWebMercator){const e=await ee(c,s);return e?.area??null}const l=$(c,s);return l?.area??null}function ye(e,t){if(!e)return null;return{camera:t.geometry.clone(),measurePoints:Array.isArray(e)?e:[e]}}async function ge(e,t){const{updateElevationProps:n,...r}=t;return await G(e,r,n)}async function we(e,t){const{updateElevationProps:n,...r}=t;return q(e,r,n)}function xe(e){navigator.clipboard.writeText(e).catch(e=>{throw e})}function ve(e){const t=e.map(e=>[e.x,e.y]),n=e[0].spatialReference;return new R({paths:[t],spatialReference:n})}function Re(e,t){return e.map(e=>({x:t?.5+e[0]:e[0],y:t?.5-e[1]:e[1]}))}function de(e,t,n,a,i){const c="measurement"===e?t:n;if(i&&c)return o(a,r(c,V),i,3)||null}function Me(e,t){const{cameraPitch:n,cameraRoll:r,cameraLocation:a}=e,{x:o,y:i,z:c,spatialReference:s}=a;if(t.every(e=>0===e)||!t||!t.length||!s)throw new Error("Invalid parameters");const[l,u,,f,m]=t,p=[-f,0,f],h=[-m,0,m],y=[-l,0,l],g=[-u,0,u],w=[];for(const x of p)for(const t of h)for(const a of y)for(const l of y)for(const u of g){const f={...e};f.cameraPitch=n+x,f.cameraRoll=r+t,f.cameraLocation={x:o+a,y:i+l,z:c?c+u:0,spatialReference:{wkid:s.wkid}},w.push(f)}return w}function Pe(e,t){const{cameraHeading:n,cameraLocation:r}=e,{x:a,y:o,z:i,spatialReference:c}=r;if(!t||t.every(e=>0===e)||!t.length||!c)throw new Error("Invalid parameters");const[s,l,u]=t,f=u>0?[-u,0,u]:[],m=s>0?[-s,0,s]:[],p=l>0?[-l,0,l]:[],h=[];for(const y of f)for(const t of m)for(const r of m)for(const s of p){const l={...e};l.cameraHeading=n+y,l.cameraLocation={x:a+t,y:o+r,z:i?i+s:0,spatialReference:{wkid:c.wkid}},h.push(l)}return h}function ze(e,t,n,a,i){const c="measurement"===e?t:be(n);if(i&&c)return o(a,r(c,V),i,3)||null}function je(e,t,r,o,i){const c="measurement"===e?t:r;if(i&&c)return a(o,n(c,C),i,3)||null}function be(e){return Math.sqrt(e.reduce((e,t)=>e+t**2,0))}function Ee(e,t,n){if(!e||!t)return;const{elevationSample:r,attributes:a}=e,{elevationSource:o,cameraHeight:i}=a,c=U(a,t[0],t[1]);let s=c.cameraLocation;return(s.spatialReference.isGeographic?d(s,P.WebMercator):Promise.resolve(s)).then(e=>(s=e,A(s.spatialReference,s.z??0,i,{elevationSample:r,elevationSource:o,extent:n}))).then(t=>("elevationSample"in t&&(e.elevationSample=t.elevationSample),{...c,cameraLocation:s,updateElevationProps:t}))}function Se(e,t,n){if(!e||!t)return;const{elevationSample:r,attributes:a}=e,{elevationSource:o,cameraHeight:i}=a,c=k(a,t[0],t[1]);let s=c.cameraLocation;return(s.spatialReference.isGeographic?d(s,P.WebMercator):Promise.resolve(s)).then(e=>(s=e,A(s.spatialReference,s.z??0,i,{elevationSample:r,elevationSource:o,extent:n}))).then(t=>("elevationSample"in t&&(e.elevationSample=t.elevationSample),{...c,cameraLocation:s,updateElevationProps:t}))}function Le(e,t,n){if("default"===t)return e;const r={x:e[0],y:e[1],z:e[2]},a=D(r,n[0],n[1]);return[a.x,a.y]}function Oe(e){return e.metersPerUnit}function We(e,t,n,r){let a=[];return a="panoramic"===t?e.map(([e,t,a])=>{const{x:o,y:i}=D({x:e,y:t,z:a},n[0],n[1],r);return[o-.5,-.5-i]}):e.map(([e,t])=>[e-.5,-.5-t]),a}function Ie(e,t,n){return e.map(e=>D({x:e[0],y:e[1],z:e[2]},t[0],t[1],n))}async function qe(e,n,r,a=!1,o=!1,i){if(!e||!n||e.length<2)return null;const c=Re(e,a);if(!c||c.length<2)return null;const[s,l]=[c[0],c.at(-1)];if(!l)return null;const u=[s],m=await G(s,n);t(i);const p=m.clone();p.z?p.z+=20:p.z=20;const{averageElevation:h,cameraPitch:y,cameraRoll:g,farDistance:w,...x}=n,v=F(p,x),R=f([s.x,s.y],[v.x,v.y]),d=J(s,v);if(!d)return;const M=N([s.x,s.y],[l.x,l.y],d);if(!M?.length)return;u.push({x:M[0],y:M[1]});const P=20*f([u[0].x,u[0].y],[u[1].x,u[1].y])*Oe(n.cameraLocation.spatialReference)/R;if(!o)return P;const z=re(P,m,u,n,0,1);return z?.value}async function Ge(e,n,r,a,o=!1,i=!1,c){const{attributes:s}=a,{location:l}=s,{updateElevationProps:u,...m}=n;if(!e||!n||e.length<2)throw new Error("Invalid parameters");const p=Re(e,o),[h,y]=[p[0],p.at(-1)],g=[h];let w=l.clone();w.spatialReference.isGeographic&&(w=await d(w,P.WebMercator));const x=await q(h,{...m,cameraLocation:w},u);t(c);const v=x.clone();v.z?v.z+=20:v.z=20;const R=H(v,m),M=f([h.x,h.y],[R.x,R.y]),z=J(h,R);if(!z)return;const j=N([h.x,h.y],[y.x,y.y],z);if(!j?.length)return;g.push({x:j[0],y:j[1]});const b=20*f([g[0].x,g[0].y],[g[1].x,g[1].y])*Oe(n.cameraLocation.spatialReference)/M;if(!i)return b;const E=ae(b,x,g,n,0,1);return E?.value}async function ke(e,t,n){const{updateElevationProps:r,...a}=t,{updateElevationProps:o,...i}=n,c=await G(e,a,r);return F(c,i)}async function Ae(e,t,n){const{updateElevationProps:r,...a}=t,{updateElevationProps:o,...i}=n,c=await q(e,a,r);return H(c,i)}async function De(e,t,n=!1){if(e.length<3)return null;const r=Re(e,n),a=await ge(r,t),o=a.map(({x:e,y:t})=>[e,t]);e.push(e[0]),o.push(o[0]);const i=a[0].spatialReference,c=new R({paths:[o],spatialReference:i}),s=new v({rings:[o],spatialReference:i});return i.isGeographic?Q(i,c,s):i.isWebMercator?ee(c,s):$(c,s)}async function Ue(e,n,r=!1,a){if(e.length<3)return null;const o=Re(e,r),i=await we(o,n);t(a);const c=i.map(({x:e,y:t})=>[e,t]);e.push(e[0]),c.push(c[0]);const s=i[0].spatialReference,l=new R({paths:[c],spatialReference:s}),u=new v({rings:[c],spatialReference:s});return s.isGeographic?Q(s,l,u):s.isWebMercator?ee(l,u):$(l,u)}async function Be(e,t,n=!1){const r=Re(e,n);return Y(ve(await ge(r,t)))}async function He(e,n,r=!1,a){const o=Re(e,r),i=await we(o,n);t(a);return Y(ve(i))}async function Fe(e,t){const n=s(),r=e.paths[0][0],a=t.paths[0][0];let o,l;e.spatialReference.isWGS84||e.spatialReference.isWebMercator?(await L(),o=O(e),l=O(t)):(o=W(e),l=W(t));const u=_(e.paths[0],o),f=_(t.paths[0],l),m=Te(u,f),[p,h,y]=u,[g,w,x]=f.map(e=>-e),[v,R,d]=m,[M,P,z]=[a[0]-r[0],a[1]-r[1],a[2]-r[2]];i(n,p,g,v,h,w,R,y,x,d);const j=c(n);if(0===j)return null;i(n,M,g,v,P,w,R,z,x,d);const b=c(n);i(n,p,M,v,h,P,R,y,z,d);const E=c(n);i(n,p,g,M,h,w,P,y,x,z);const S=b/j,I=E/j,q=c(n)/j;return{distance:Math.abs(q/Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2])),pointOnA:Ve(r,S,u),pointOnB:Ve(a,I,f)}}function Te(e,t){const n=l(),r=m(l(),e[0],e[1],e[2]),a=m(l(),t[0],t[1],t[2]),o=p(n,r,a);return[o[0],o[1],o[2]]}function Ve(e,t,n){return[e[0]+t*n[0],e[1]+t*n[1],e[2]+t*n[2]]}function Ce(e,t){const n=u(e[0],e[1],e[2]),r=u(t[0],t[1],t[2]);return h(l(),n,r)}function Je(e,t,n){const r=B(e,t,n);return[r[0],r[1],r[2]]}export{J as calculateAngle,K as calculateAnglePano,N as calculateCorrectedPixel,X as calculateHeightFromTemporaryDistance,Z as calculateLocationAccuracyFromDeviations,ne as calculateReferenceImagePointPanoramic,te as calculateTempImagePoint,re as computeHeightIteratively,ae as computeHeightIterativelyPanoramic,he as computeTriangulatedAreaMeasurement,me as computeTriangulatedDistanceMeasurement,pe as computeTriangulatedPoint,ye as computeTriangulatedVector,xe as copyToClipboard,Re as formatPixels,Me as generateCombinations,Pe as generateCombinationsPanoramic,je as getConvertedArea,ze as getConvertedDistance,de as getConvertedHeight,Ee as getMeasurementProperties,Se as getMeasurementPropertiesPanoramic,Le as getModeCorrectedPoint,We as getModeCorrectedPoints,Ie as getPixelLocationFromSphereVertices,be as getRootOfSumOfSquaredErrors,Oe as getUnitRateFromSpatialReference,qe as heightMeasurement2D,Ge as heightMeasurementPanoramic,ke as imageToImageTransform,Ae as imageToImageTransformPanoramic,De as pixelAreaMeasurement2D,Ue as pixelAreaMeasurementPanoramic,Be as pixelDistanceMeasurement2D,He as pixelDistanceMeasurementPanoramic,Je as scale,Fe as solveSkewLinesIntersection,Ce as subtract};