/* COPYRIGHT Esri - https://js.arcgis.com/5.1.2/LICENSE.txt */
import{extentContainsCoords2D as n,extentContainsPoint as t,ringsContainsCoords as e,extentContainsCoords3D as r}from"./contains.js";function o(n,e){return t(n,e)}function i(n,t){const e=n.hasZ&&t.hasZ;let r,o,i;if(n.xmin<=t.xmin){if(r=t.xmin,n.xmax<r)return!1}else if(r=n.xmin,t.xmax<r)return!1;if(n.ymin<=t.ymin){if(o=t.ymin,n.ymax<o)return!1}else if(o=n.ymin,t.ymax<o)return!1;if(e&&t.hasZ)if(n.zmin<=t.zmin){if(i=t.zmin,n.zmax<i)return!1}else if(i=n.zmin,t.zmax<i)return!1;return!0}function f(t,e){const{points:o,hasZ:i}=e,f=i?r:n;for(const n of o)if(f(t,n))return!0;return!1}const s=[0,0],c=[0,0],u=[0,0],m=[0,0],a=[s,c,u,m],l=[[u,s],[s,c],[c,m],[m,u]];function x(n,t){return h(n,t.rings)}function h(t,r){s[0]=t.xmin,s[1]=t.ymax,c[0]=t.xmax,c[1]=t.ymax,u[0]=t.xmin,u[1]=t.ymin,m[0]=t.xmax,m[1]=t.ymin;for(const n of a)if(e(r,n))return!0;for(const e of r){if(!e.length)continue;let r=e[0];if(n(t,r))return!0;for(let o=1;o<e.length;o++){const i=e[o];if(n(t,i)||g(r,i,l))return!0;r=i}}return!1}function y(t,e){s[0]=t.xmin,s[1]=t.ymax,c[0]=t.xmax,c[1]=t.ymax,u[0]=t.xmin,u[1]=t.ymin,m[0]=t.xmax,m[1]=t.ymin;const r=e.paths;for(const o of r){if(!r.length)continue;let e=o[0];if(n(t,e))return!0;for(let r=1;r<o.length;r++){const i=o[r];if(n(t,i)||g(e,i,l))return!0;e=i}}return!1}function g(n,t,e){for(let r=0;r<e.length;r++)if(p(n,t,e[r][0],e[r][1]))return!0;return!1}function p(n,t,e,r,o){const[i,f]=n,[s,c]=t,[u,m]=e,[a,l]=r,x=a-u,h=i-u,y=s-i,g=l-m,p=f-m,z=c-f,G=g*y-x*z;if(0===G)return!1;const M=(x*p-g*h)/G,P=(y*p-z*h)/G;return M>=0&&M<=1&&P>=0&&P<=1&&(o&&(o[0]=i+M*(s-i),o[1]=f+M*(c-f)),!0)}function z(n,t,e){for(const r of t){const t=r.length;for(let o=1;o<t;o++){const t=r[o-1],i=r[o];let f=(i[0]-t[0])*(i[0]-t[0])+(i[1]-t[1])*(i[1]-t[1]);if(0===f)continue;f=Math.sqrt(f);const s=((i[0]-t[0])*(n[1]-t[1])-(i[1]-t[1])*(n[0]-t[0]))/f;if(Math.abs(s)<e){const r=((i[0]-t[0])*(n[0]-t[0])+(i[1]-t[1])*(n[1]-t[1]))/f;if(r>-e&&r<f+e)return!0}}}return!1}function G(n){const t=1e-6,e=n[0],r=n[n.length-1];return Math.abs(e[0]-r[0])<=t&&Math.abs(e[1]-r[1])<=t}function M(n,t){let e=0;for(const r of t){const t=r.length;for(let o=1;o<t;o++){const t=r[o-1],i=r[o];if(t[1]>n[1]==i[1]>n[1])continue;(i[0]-t[0])*(n[1]-t[1])-(i[1]-t[1])*(n[0]-t[0])>0?e++:e--}}return 0!==e}function P(n,t){n.length>1&&!G(n)&&(n=[...n,n[0]]);for(let e=0;e<t.length;e++){const r=t[e],o=r.length;for(const t of r)if(M(t,[n]))return!0;if(G(r))for(const e of n)if(M(e,t))return!0;for(let t=1;t<o;t++){const e=r[t-1],o=r[t];for(let t=0;t<n.length;t++){if(p(e,o,n[t],n[(t+1)%n.length]))return!0}}}return!1}function Z(n){switch(n){case"esriGeometryEnvelope":case"extent":return i;case"esriGeometryMultipoint":case"multipoint":return f;case"esriGeometryPoint":case"point":return o;case"esriGeometryMultiPatch":case"multipatch":case"esriGeometryPolygon":case"polygon":return x;case"esriGeometryPolyline":case"polyline":return y}}export{i as extentIntersectsExtent,f as extentIntersectsMultipoint,o as extentIntersectsPoint,x as extentIntersectsPolygon,y as extentIntersectsPolyline,Z as getFeatureExtentIntersector,z as nearLine,M as pointInPolygon,p as segmentIntersects,P as targetIntersectsPolygon};
