You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
12 lines
4.3 KiB
12 lines
4.3 KiB
// All material copyright Esri, All Rights Reserved, unless otherwise specified. |
|
// See https://js.arcgis.com/4.30/esri/copyright.txt for details. |
|
//>>built |
|
define(["exports","../geometryCursorCollectUtils","./coordsUtils"],function(r,H,x){function B(a,e){if(!a?.length)return null;const b=[],f=[],c=e?[Infinity,-Infinity,Infinity,-Infinity,Infinity,-Infinity]:[Infinity,-Infinity,Infinity,-Infinity];for(let k=0,d=a.length;k<d;k++){const g=y(a[k],e,c);g&&f.push(g)}f.sort((k,d)=>{let g=k[2]-d[2];0===g&&e&&(g=k[4]-d[4]);return g});f.length&&(b[0]=f[0][0],b[1]=f[0][1],e&&(b[2]=f[0][3]),b[0]<c[0]||b[0]>c[1]||b[1]<c[2]||b[1]>c[3]||e&&(b[2]<c[4]||b[2]>c[5]))&& |
|
(b.length=0);if(!b.length)if(a=a[0]&&a[0].length?C(a[0],e):null)b[0]=a[0],b[1]=a[1],e&&2<a.length&&(b[2]=a[2]);else return null;return b}function y(a,e,b){let f=0,c=0,k=0,d=0,g=0;const h=a.length?a[0][0]:0,l=a.length?a[0][1]:0,p=a.length&&e?a[0][2]:0;for(let v=0;v<a.length;v++){var m=a[v],n=a[(v+1)%a.length];const [u,t,w]=m;var q=u-h;const D=t-l,[I,J,K]=n,z=I-h,E=J-l,A=q*E-z*D;d+=A;f+=(q+z)*A;c+=(D+E)*A;e&&2<m.length&&2<n.length&&(m=w-p,n=K-p,q=q*n-z*m,k+=(m+n)*q,g+=q);u<b[0]&&(b[0]=u);u>b[1]&&(b[1]= |
|
u);t<b[2]&&(b[2]=t);t>b[3]&&(b[3]=t);e&&(w<b[4]&&(b[4]=w),w>b[5]&&(b[5]=w))}0<d&&(d*=-1);0<g&&(g*=-1);if(!d)return null;d*=.5;g*=.5;a=[f/(6*d)+h,c/(6*d)+l,d];e&&(b[4]===b[5]||0===g?(a[3]=(b[4]+b[5])/2,a[4]=0):(a[3]=k/(6*g)+p,a[4]=g));return a}function C(a,e){const b=e?[0,0,0]:[0,0],f=e?[0,0,0]:[0,0];let c=0,k=0,d=0,g=0;for(let l=0,p=a.length;l<p-1;l++){var h=a[l];const m=a[l+1];if(h&&m){b[0]=h[0];b[1]=h[1];f[0]=m[0];f[1]=m[1];e&&2<h.length&&2<m.length&&(b[2]=h[2],f[2]=m[2]);const n=x.getLength(b, |
|
f);n&&(c+=n,h=x.getMidpoint(h,m),k+=n*h[0],d+=n*h[1],e&&2<h.length&&(g+=n*h[2]))}}return 0<c?e?[k/c,d/c,g/c]:[k/c,d/c]:a.length?a[0]:null}function F(a){const {hasZ:e,totalSize:b}=a;if(0===b)return null;const f=[],c=[],k=e?[Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY]:[Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY];for(a.reset();a.nextPath();){const d= |
|
y(H.collectPath(a),a.hasZ,k);d&&c.push(d)}c.sort((d,g)=>{let h=d[2]-g[2];0===h&&e&&(h=d[4]-g[4]);return h});c.length&&(f[0]=c[0][0],f[1]=c[0][1],e&&(f[2]=c[0][3]),f[0]<k[0]||f[0]>k[1]||f[1]<k[2]||f[1]>k[3]||e&&(f[2]<k[4]||f[2]>k[5]))&&(f.length=0);if(!f.length)if(a.reset(),a.nextPath(),a=a.pathSize?G(a):null)f[0]=a[0],f[1]=a[1],e&&2<a.length&&(f[2]=a[2]);else return null;return f}function G(a){const {hasZ:e}=a,b=e?[0,0,0]:[0,0],f=e?[0,0,0]:[0,0];let c=0,k=0,d=0,g=0;if(a.nextPoint()){var h=a.x,l=a.y; |
|
let p=a.z;for(;a.nextPoint();){const m=a.x,n=a.y,q=a.z;b[0]=h;b[1]=l;f[0]=m;f[1]=n;e&&(b[2]=p,f[2]=q);if(h=x.getLength(b,f))c+=h,l=x.getMidpoint(b,f),k+=h*l[0],d+=h*l[1],e&&2<l.length&&(g+=h*l[2]);h=m;l=n;p=q}}return 0<c?e?[k/c,d/c,g/c]:[k/c,d/c]:a.pathSize?(a.seekPathStart(),a.nextPoint(),[a.x,a.y]):null}const L=1/3;r.extentCentroid=function(a){return a?a.hasZ?[a.xmax-a.xmin/2,a.ymax-a.ymin/2,a.zmax-a.zmin/2]:[a.xmax-a.xmin/2,a.ymax-a.ymin/2]:null};r.lineCentroid=C;r.lineCentroidCursor=G;r.polygonCentroid= |
|
function(a){return a?B(a.rings,a.hasZ??!1):null};r.ringCentroid=y;r.ringCentroidCursorXY=function(a,e){let b=0,f=0,c=0;a.nextPoint();const k=a.pathSize?a.x:0,d=a.pathSize?a.y:0;for(let l=0;l<a.pathSize;l++){a.seekInPath(l);var g=[a.x,a.y];a.seekInPath((l+1)%a.pathSize);var h=[a.x,a.y];const [p,m]=g;g=p-k;const n=m-d,[q,v]=h;h=q-k;const u=v-d,t=g*u-h*n;c+=t;b+=(g+h)*t;f+=(n+u)*t;p<e[0]&&(e[0]=p);p>e[1]&&(e[1]=p);m<e[2]&&(e[2]=m);m>e[3]&&(e[3]=m)}0<c&&(c*=-1);if(!c)return null;c*=.5;return[b/(6*c)+ |
|
k,f/(6*c)+d,c]};r.ringsCentroid=B;r.ringsCentroidCursor=F;r.weightedAreaCentroid=function(a){let e=0;for(a.reset();a.nextPath();)e+=a.getCurrentRingArea();if(1E-6>e)return(a=F(a))?[a[0],a[1]]:null;const b=[0,0];a.reset();if(!a.nextPath()||!a.nextPoint())return null;const f=[a.x,a.y];for(a.reset();a.nextPath();)a:{let h=void 0;var c=b,k=f,d=a;if(!c||!d||3>d.pathSize)break a;d.nextPoint();var g=d.x;const l=d.y;d.nextPoint();let p=d.x-g,m=d.y-l,n=0,q=0;for(;d.nextPoint();)n=d.x-g,q=d.y-l,h=.5*L*(n*m- |
|
q*p),c[0]+=h*(p+n),c[1]+=h*(m+q),p=n,m=q;d=d.getCurrentRingArea();g=[g,l];g[0]-=k[0];g[1]-=k[1];g[0]*=d;g[1]*=d;c[0]+=g[0];c[1]+=g[1]}b[0]*=1/e;b[1]*=1/e;b[0]+=f[0];b[1]+=f[1];return b};Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})}); |