@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 3.62 kB
JavaScript
import{rad2deg as t}from"../../../core/mathUtils.js";import{create as n}from"../../../geometry/support/aaBoundingRect.js";import{getRingsOrPathsBounds as e}from"../../../geometry/support/boundsUtils.js";import{geometryToCoordinates as o}from"../../../geometry/support/coordsUtils.js";function i(t,n,e,i){if(null==i||t.hasZ||(i=void 0),"point"===t.type)return t.x+=n,t.y+=e,t.hasZ&&null!=i&&(t.z+=i),t;if("multipoint"===t.type){const o=t.points;for(let t=0;t<o.length;t++)o[t]=l(o[t],n,e,i);return t}if("extent"===t.type)return t.xmin+=n,t.xmax+=n,t.ymin+=e,t.ymax+=e,null!=i&&(t.zmin??(t.zmin=0),t.zmin+=i,t.zmax??(t.zmax=0),t.zmax+=i),t;const r=o(t),s="polyline"===t.type?t.paths:t.rings;for(let o=0;o<r.length;o++){const t=r[o];for(let o=0;o<t.length;o++)t[o]=l(t[o],n,e,i)}return"paths"in t?t.paths=s:t.rings=s,t}function r(t,n,e,r,s){const m=t.clone(),a=r.resolution;if("point"===m.type){if(s)i(m,n*a,-e*a);else{const t=r.state.transform,o=r.state.inverseTransform,i=t[0]*m.x+t[2]*m.y+t[4],s=t[1]*m.x+t[3]*m.y+t[5];m.x=o[0]*(i+n)+o[2]*(s+e)+o[4],m.y=o[1]*(i+n)+o[3]*(s+e)+o[5]}return m}if("multipoint"===m.type){if(s)i(m,n*a,-e*a);else{const t=m.points,o=r.state.transform,i=r.state.inverseTransform;for(let r=0;r<t.length;r++){const s=t[r],m=o[0]*s[0]+o[2]*s[1]+o[4],a=o[1]*s[0]+o[3]*s[1]+o[5],l=i[0]*(m+n)+i[2]*(a+e)+i[4],p=i[1]*(m+n)+i[3]*(a+e)+i[5];t[r]=x(s,l,p,void 0)}}return m}if("extent"===m.type){if(s)i(m,n*a,-e*a);else{const t=r.state.transform,o=r.state.inverseTransform,i=t[0]*m.xmin+t[2]*m.ymin+t[4],s=t[1]*m.xmin+t[3]*m.ymin+t[5],a=t[0]*m.xmax+t[2]*m.ymax+t[4],l=t[1]*m.xmax+t[3]*m.ymax+t[5];m.xmin=o[0]*(i+n)+o[2]*(s+e)+o[4],m.ymin=o[1]*(i+n)+o[3]*(s+e)+o[5],m.xmax=o[0]*(a+n)+o[2]*(l+e)+o[4],m.ymax=o[1]*(a+n)+o[3]*(l+e)+o[5]}return m}if(s)i(m,n*a,-e*a);else{const t=o(m),i="polyline"===m.type?m.paths:m.rings,s=r.state.transform,a=r.state.inverseTransform;for(let o=0;o<t.length;o++){const i=t[o];for(let t=0;t<i.length;t++){const o=i[t],r=s[0]*o[0]+s[2]*o[1]+s[4],m=s[1]*o[0]+s[3]*o[1]+s[5],l=a[0]*(r+n)+a[2]*(m+e)+a[4],p=a[1]*(r+n)+a[3]*(m+e)+a[5];i[t]=x(o,l,p,void 0)}}"paths"in m?m.paths=i:m.rings=i}return m}function s(t,i,r,s){if("point"===t.type){const{x:n,y:e}=t,o=s?s[0]:n,m=s?s[1]:e,a=t.clone(),l=(n-o)*i+o,x=(e-m)*r+m;return a.x=l,a.y=x,a}if("multipoint"===t.type){const m=o(t),a=n(),[l,p,y,f]=e(a,[m]),u=s?s[0]:(l+y)/2,c=s?s[1]:(f+p)/2,h=t.clone(),g=h.points;for(let t=0;t<g.length;t++){const n=g[t],[e,o]=n,s=(e-u)*i+u,m=(o-c)*r+c;g[t]=x(n,s,m,void 0)}return h}if("extent"===t.type){const{xmin:n,xmax:e,ymin:o,ymax:m}=t,a=s?s[0]:(n+e)/2,l=s?s[1]:(m+o)/2,x=t.clone();if(x.xmin=(n-a)*i+a,x.ymax=(m-l)*r+l,x.xmax=(e-a)*i+a,x.ymin=(o-l)*r+l,x.xmin>x.xmax){const t=x.xmin,n=x.xmax;x.xmin=n,x.xmax=t}if(x.ymin>x.ymax){const t=x.ymin,n=x.ymax;x.ymin=n,x.ymax=t}return x}const m=o(t),a=n(),[l,p,y,f]=e(a,m),u=s?s[0]:(l+y)/2,c=s?s[1]:(f+p)/2,h=t.clone(),g="polyline"===h.type?h.paths:h.rings;for(let n=0;n<m.length;n++){const t=m[n];for(let e=0;e<t.length;e++){const o=t[e],[s,m]=o,a=(s-u)*i+u,l=(m-c)*r+c;g[n][e]=x(o,a,l,void 0)}}return"paths"in h?h.paths=g:h.rings=g,h}function m(t,n,e,o,i,r){const s=Math.sqrt((e-t)*(e-t)+(o-n)*(o-n));return Math.sqrt((i-t)*(i-t)+(r-n)*(r-n))/s}function a(n,e,o,i=!1){const r=Math.atan2(e.y-o.y,e.x-o.x)-Math.atan2(n.y-o.y,n.x-o.x),s=Math.atan2(Math.sin(r),Math.cos(r));return i?s:t(s)}function l(t,n,e,o){return x(t,t[0]+n,t[1]+e,null!=t[2]&&null!=o?t[2]+o:void 0)}function x(t,n,e,o){const i=[n,e];return t.length>2&&i.push(null!=o?o:t[2]),t.length>3&&i.push(t[3]),i}export{r as cloneMove,a as getRotationAngle,m as getScaleRatio,i as move,s as scale};