UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 7.04 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import{__decorate as t}from"tslib";import{Clonable as o}from"../../core/Clonable.js";import e from"../../core/Error.js";import{JSONSupportMixin as r,JSONSupport as n}from"../../core/JSONSupport.js";import i from"../../core/Logger.js";import{transformProjective as s,getProjectiveTransform as l}from"../../core/perspectiveUtils.js";import{createScreenPoint as c}from"../../core/screenUtils.js";import{property as a,subclass as u}from"../../core/accessorSupport/decorators.js";import{invert as p}from"../../core/libs/gl-matrix-2/math/mat3.js";import{fromValues as m,create as f}from"../../core/libs/gl-matrix-2/factories/mat3f64.js";import{set as P,lerp as h,rotate as d}from"../../core/libs/gl-matrix-2/math/vec2.js";import{create as y,fromValues as g}from"../../core/libs/gl-matrix-2/factories/vec2f64.js";import w from"../../geometry/Point.js";import j from"../../geometry/Polygon.js";import{projectOrLoad as R}from"../../geometry/projectionUtils.js";import x from"../../geometry/SpatialReference.js";import v from"./ControlPoint.js";import{GeoreferenceBaseMixin as b}from"./GeoreferenceBaseMixin.js";import{reader as S}from"../../core/accessorSupport/decorators/reader.js";import{writer as C}from"../../core/accessorSupport/decorators/writer.js";const N=f(),_=y();let q=class extends n{};t([a({type:Number,json:{write:{isRequired:!0}}})],q.prototype,"x",void 0),t([a({type:Number,json:{write:{isRequired:!0}}})],q.prototype,"y",void 0),q=t([u("esri.layers.support.ControlPointsGeoreference.ControlPointJSONType")],q);let T=class extends(r(b(o))){constructor(t){super(t),this.height=0,this.type="control-points",this.width=0}get controlPoints(){return this._get("controlPoints")??null}set controlPoints(t){this._set("controlPoints",t)}readControlPoints(t,o){const e=x.fromJSON(o.spatialReference),r=m(...o.coefficients,1);return t.map(t=>(P(_,t.x,t.y),s(_,_,r),{sourcePoint:t,mapPoint:new w({x:_[0],y:_[1],spatialReference:e})}))}writeControlPoints(t,o,r,n){if(null==this.transform){const t=new e("web-document-write:invalid-georeference","Invalid 'controlPoints', 'width', 'height' configuration. Make sure the parent media element is loaded i.e. the ImageElement or VideoElement set as 'MediaLayer.source'.",{layer:n?.layer,georeference:this});return void(n?.messages?n.messages.push(t):i.getLogger(this).error(t.name,t.message))}null!=t&&M(t[0])&&(o.controlPoints=t.map(t=>{const o=t.sourcePoint;return{x:o.x,y:o.y}}),o.spatialReference=t[0].mapPoint.spatialReference.toJSON(),o.coefficients=this.transform.slice(0,8))}get coords(){if(null==this.controlPoints)return null;const t=this._updateTransform(N);if(null==t||!M(this.controlPoints[0]))return null;const o=this.controlPoints[0].mapPoint.spatialReference;return Q(t,this.width,this.height,o)}set coords(t){if(null==this.controlPoints||!M(this.controlPoints[0]))return;const o=this.controlPoints[0].mapPoint.spatialReference;if(null==(t=this.projectOrWarn(t,o)))return;const{width:e,height:r}=this,{rings:[[n,i,l,a]]}=t,u=new v({sourcePoint:c(0,r),mapPoint:new w({x:n[0],y:n[1],spatialReference:o})}),p=new v({sourcePoint:c(0,0),mapPoint:new w({x:i[0],y:i[1],spatialReference:o})}),m=new v({sourcePoint:c(e,0),mapPoint:new w({x:l[0],y:l[1],spatialReference:o})}),f=new v({sourcePoint:c(e,r),mapPoint:new w({x:a[0],y:a[1],spatialReference:o})});M(u)&&M(p)&&M(m)&&M(f)&&(W(N,u,p,m,f),this.controlPoints=this.controlPoints.map(({sourcePoint:t})=>(P(_,t.x,t.y),s(_,_,N),{sourcePoint:t,mapPoint:new w({x:_[0],y:_[1],spatialReference:o})})))}get inverseTransform(){return null==this.transform?null:p(f(),this.transform)}get transform(){return this._updateTransform()}toMap(t){if(null==t||null==this.transform||null==this.controlPoints||!M(this.controlPoints[0]))return null;P(_,t.x,t.y);const o=this.controlPoints[0].mapPoint.spatialReference;return s(_,_,this.transform),new w({x:_[0],y:_[1],spatialReference:o})}toSource(t){if(null==t||null==this.inverseTransform||null==this.controlPoints||!M(this.controlPoints[0]))return null;const o=this.controlPoints[0].mapPoint.spatialReference;return t=t.normalize(),null==(t=R(t,o).geometry)?null:(P(_,t.x,t.y),s(_,_,this.inverseTransform),c(_[0],_[1]))}toSourceNormalized(t){const o=this.toSource(t);return null!=o&&(o.x/=this.width,o.y/=this.height),o}_updateTransform(t){const{controlPoints:o,width:e,height:r}=this;if(!(null!=o&&e>0&&r>0))return null;const[n,i,s,l]=o;if(!M(n))return null;const c=n.mapPoint.spatialReference,a=this._projectControlPoint(i,c),u=this._projectControlPoint(s,c),p=this._projectControlPoint(l,c);if(!a.valid||!u.valid||!p.valid)return null;if(!M(a.controlPoint))return null;null==t&&(t=f());let m=null;return m=M(u.controlPoint)&&M(p.controlPoint)?W(t,n,a.controlPoint,u.controlPoint,p.controlPoint):M(u.controlPoint)?B(t,n,a.controlPoint,u.controlPoint):k(t,n,a.controlPoint),m.every(t=>0===t)?null:m}_projectControlPoint(t,o){if(!M(t))return{valid:!0,controlPoint:t};const{sourcePoint:e,mapPoint:r}=t,{geometry:n,pending:s}=R(r,o);return s?{valid:!1,controlPoint:null}:s||n?{valid:!0,controlPoint:new v({sourcePoint:e,mapPoint:n})}:(i.getLogger(this).warn("map point could not be projected to the spatial reference",{georeference:this,controlPoint:t,sourceSpatialReference:r.spatialReference,targetSpatialReference:o}),{valid:!1,controlPoint:null})}};function M(t){return null!=t?.sourcePoint&&null!=t.mapPoint}t([a({type:[v],json:{write:{allowNull:!1,isRequired:!0,target:{controlPoints:{type:[q],isRequired:!0},coefficients:{type:[Number],isRequired:!0},spatialReference:{type:x,isRequired:!0}}}}})],T.prototype,"controlPoints",null),t([S("controlPoints")],T.prototype,"readControlPoints",null),t([C("controlPoints")],T.prototype,"writeControlPoints",null),t([a({clonable:!1})],T.prototype,"coords",null),t([a({type:Number,nonNullable:!0,json:{write:{isRequired:!0}}})],T.prototype,"height",void 0),t([a({readOnly:!0})],T.prototype,"inverseTransform",null),t([a({readOnly:!0})],T.prototype,"transform",null),t([a({type:Number,nonNullable:!0,json:{write:{isRequired:!0}}})],T.prototype,"width",void 0),T=t([u("esri.layers.support.ControlPointsGeoreference")],T);const O=y(),I=y(),J=y(),L=y(),E=y(),G=y(),U=y(),z=y(),A=Math.PI/2;function V(t,o,e){P(t,e.sourcePoint.x,e.sourcePoint.y),P(o,e.mapPoint.x,e.mapPoint.y)}function k(t,o,e){return V(O,E,o),V(I,G,e),d(J,I,O,A),d(L,O,I,A),d(U,G,E,-A),d(z,E,G,-A),K(t,O,I,J,L,E,G,U,z)}function B(t,o,e,r){return V(O,E,o),V(I,G,e),V(J,U,r),h(L,O,I,.5),d(L,J,L,Math.PI),h(z,E,G,.5),d(z,U,z,Math.PI),K(t,O,I,J,L,E,G,U,z)}function W(t,o,e,r,n){return V(O,E,o),V(I,G,e),V(J,U,r),V(L,z,n),K(t,O,I,J,L,E,G,U,z)}const D=new Array(8).fill(0),F=new Array(8).fill(0);function H(t,o,e,r,n){return t[0]=o[0],t[1]=o[1],t[2]=e[0],t[3]=e[1],t[4]=r[0],t[5]=r[1],t[6]=n[0],t[7]=n[1],t}function K(t,o,e,r,n,i,s,c,a){return l(t,H(D,o,e,r,n),H(F,i,s,c,a))}function Q(t,o,e,r){const n=g(0,e),i=g(0,0),l=g(o,0),c=g(o,e);return s(n,n,t),s(i,i,t),s(l,l,t),s(c,c,t),new j({rings:[[n,i,l,c,n]],spatialReference:r})}export{T as default};