poly-simplify
Version:
Simplify polyline or polygon vertices in JS
4 lines (3 loc) • 16.7 kB
JavaScript
!function(t){"use strict";function e(t){return function(t){let e=[{type:"M",values:t[0].values}],n=e[0];for(let a=1,l=t.length;a<l;a++){let l=t[a],{type:r,values:s}=l,h=s.length,i=n.values,p=i.length,[o,u]=[s[h-2],s[h-1]],[f,c]=[i[p-2],i[p-1]];switch(r){case"H":n={type:"L",values:[s[0],c]};break;case"V":n={type:"L",values:[f,s[0]]};break;case"z":case"Z":n={type:"Z",values:[]};break;case"M":n={type:"M",values:[s[0],s[1]]};break;default:n={type:"L",values:[o,u]}}e.push(n)}return e}(a(function(t,e=!0){const n={77:2,109:2,65:7,97:7,67:6,99:6,72:1,104:1,76:2,108:2,81:4,113:4,83:4,115:4,84:2,116:2,86:1,118:1,90:0,122:0};let a=new Set([...Object.keys(n).map(Number)]);const l=new Set([5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279]);function r(t){return 10===t||13===t||8232===t||8233===t||44===t||32===t||9===t||11===t||12===t||160===t||t>=5760&&l.has(t)>=0}function s(t){return a.has(t)}let h,i=0,p=t.length,o="",u=[],f=-1,c="",y=!1,g=!1,x=0,d=0,m=0,M=!1,v=[];const b=()=>{M&&("M"===o?o="L":"m"===o&&(o="l"),u.push({type:o,values:[]}),f++,d=0,M=!1)},w=(t=!1)=>{(t?x>0:""!==c)&&(e&&-1===f&&(h="Pathdata must start with M command",v.push(h),o="M",u.push({type:o,values:[]}),m=2,d=0,f++),"A"===o||"a"===o?(c=A(),u[f].values.push(...c)):(e&&c[1]&&"."!==c[1]&&"0"===c[0]&&(h="Leading zeros not valid: "+c,v.push(h)),u[f].values.push(+c)),d++,c="",x=0,M=d>=m)},A=()=>{let t=c.length,e=!1;return 3===d&&2===t||4===d&&t>1?(c=[+c[0],+c[1]],e=!0,d++):3===d&&t>=3&&(c=[+c[0],+c[1],+c.substring(2)],e=!0,d+=2),e?c:[+c]},P=()=>{if(e){let t=f>0?u[f]:0,e=t?t.values.length:0;(e&&e<m||e&&e>m||("z"===o||"Z"===o)&&e>0)&&(h=`Pathdata commands in "${o}" (segment index: ${f}) don't match allowed number of values: ${m-e}/${m}`,v.push(h))}};for(;i<p;){let e=t[i],a=t.charCodeAt(i);if(s(a)){""!==c&&(u[f].values.push(+c),d++,c=""),P(),o=e,m=n[a];let t="M"===o||"m"===o;f>0&&("z"===u[f].type||"Z"===u[f].type)&&!t&&(u.push({type:"m",values:[0,0]}),f++),u.push({type:o,values:[]}),f++,g=!1,x=0,d=0,M=!1,i++}else if(r(a))w(),g=!0,y=!1,i++;else{if(i===p-1){c+=e,w(),g=!1,y=!1,P();break}if(!y&&!g&&45===a||!y&&46===a){let t=46===a;w(t),b(),t&&x++}else b();c+=e,y=69===a||101===a,g=!1,i++}}if(P(),u[0].type="M",e&&v.length){if(h="Invalid path data:\n"+v.join("\n"),"log"!==e)throw new Error(h);console.warn(h)}return u}(t),!1))}function n(t){let e=[{x:t[0].values[0],y:t[0].values[1]}];for(let n=1,a=t.length;n<a;n++){let{values:a}=t[n];if(a.length){let t=a.slice(-2);e.push({x:t[0],y:t[1]})}}return e}function a(t,e=!1){let n=t[0].values,a=n[0],l=n[1],r=a,s=l;for(let n=1,h=t.length;n<h;n++){let h=t[n],{type:i,values:p}=h,o=e?i.toLowerCase():i.toUpperCase();if(i!==o)switch(i=o,h.type=i,i){case"a":case"A":p[5]=e?p[5]-a:p[5]+a,p[6]=e?p[6]-l:p[6]+l;break;case"v":case"V":p[0]=e?p[0]-l:p[0]+l;break;case"h":case"H":p[0]=e?p[0]-a:p[0]+a;break;case"m":case"M":e?(p[0]-=a,p[1]-=l):(p[0]+=a,p[1]+=l),r=e?p[0]+a:p[0],s=e?p[1]+l:p[1];break;default:if(p.length)for(let t=0;t<p.length;t++)p[t]=e?p[t]-(t%2?l:a):p[t]+(t%2?l:a)}let u=p.length;switch(i){case"z":case"Z":a=r,l=s;break;case"h":case"H":a=e?a+p[0]:p[0];break;case"v":case"V":l=e?l+p[0]:p[0];break;case"m":case"M":r=p[u-2]+(e?a:0),s=p[u-1]+(e?l:0);default:a=p[u-2]+(e?a:0),l=p[u-1]+(e?l:0)}}return t[0].type="M",t=t.map((t=>({type:t.type,values:t.values.map((t=>+t.toFixed(9)))})))}function l(t,e=-1,n=!1,l=!1){return l&&(t=function(t){let e,n=[{type:"M",values:t[0].values}],a=n[0],l={x:t[0].values[0],y:t[0].values[1]},r=.01;for(let s=1,h=t.length;s<h;s++){let h=t[s],{type:i,values:p}=h,o=p.length?p.slice(-2):[];e={x:o[0],y:o[1]};let u=Math.abs(e.x-l.x),f=Math.abs(e.y-l.y),c=(u+f)/2*r;switch(i){case"L":a=0===f||f<c&&u>c?{type:"H",values:[p[0]]}:0===u||f>c&&u<c?{type:"V",values:[p[1]]}:h;break;case"M":case"Z":case"z":a={type:i,values:o};break;default:a={type:"L",values:o}}l={x:o[0],y:o[1]},n.push(a)}return n}(t)),n&&(t=function(t){return a(t,!0)}(t)),e>-1&&(t=t.map((t=>({type:t.type,values:t.values.map((t=>+t.toFixed(e)))})))),t}function r(t,e=1){let n=e>1,a=!n&&0!==e;"l"===(t=JSON.parse(JSON.stringify(t)))[1].type&&a&&(t[0].type="m");let l="";l=n?`${t[0].type} ${t[0].values.join(" ")}\n`:`${t[0].type}${t[0].values.join(" ")}`;for(let e=1,r=t.length;e<r;e++){let r=t[e-1],s=t[e],{type:h,values:i}=s;if(!a||"A"!==h&&"a"!==h||(i=[i[0],i[1],i[2],`${i[3]}${i[4]}${i[5]}`,i[6]]),h=r.type===s.type&&"m"!==s.type.toLowerCase()&&a||("m"===r.type&&"l"===s.type||"M"===r.type&&"l"===s.type||"M"===r.type&&"L"===s.type)&&a?" ":s.type,a){let t="",e=!1;for(let n=0,a=i.length;n<a;n++){let a=i[n],l=a.toString(),r=l.includes(".")&&Math.abs(a)<1;r&&e&&(l=l.replace(/^0\./,".")),!(n>0)||e&&r||(t+=" "),t+=l,e=r}l+=`${h}${t}`}else l+=n?`${h} ${i.join(" ")}\n`:`${h}${i.join(" ")}`}return a&&(l=l.replace(/ 0\./g," .").replace(/ -/g,"-").replace(/-0\./g,"-.").replace(/Z/g,"z")),l}function s(t){if(!t||!t.length)return[];const a=t=>{let e=[];for(let n=1,a=t.length;n<a;n+=2)e.push({x:t[n-1],y:t[n]});return e};let l=t[0].x||!1;if(l&&t.length>0&&"object"==typeof t[0]&&t[0].constructor!==Object&&(t=>{let e=t.length,n=new Array(e);for(let a=0;a<e;a++)n[a]={x:t[a].x,y:t[a].y}})(t),l)return t;let r="string"==typeof t,s=!1;if(!!r&&(t.startsWith("M")||t.startsWith("m"))){0;let a=e(t),l=function(t){let e=[];try{t.map(((t,e)=>"m"===t.type.toLowerCase()?e:-1)).filter((t=>-1!==t))}catch{console.log("catch",t)}let n=t.map(((t,e)=>"m"===t.type.toLowerCase()?e:-1)).filter((t=>-1!==t));return 1===n.length?[t]:(n.forEach(((a,l)=>{e.push(t.slice(a,n[l+1]))})),e)}(a);s=l.length>1;let r=[];return s?l.forEach((t=>{let e=n(t);r.push(e)})):r=n(a),r}if(!!r&&(t.startsWith("{")||t.startsWith("["))){try{t=JSON.parse(t)}catch{t=JSON.parse(t.replace(/([{,])\s*(\w+)\s*:/g,'$1"$2":'))}r=!1}if(r){if((t=t.trim().split(/,| /).filter(Boolean).map(Number)).filter((t=>isNaN(t))).length)return console.warn("input doesn't contain point data – please, check your input structure for syntax errors"),[]}let h=Array.isArray(t),i=h&&2===t[0].length,p=!i&&h&&Array.isArray(t[0]),o=p&&2===t[0][0].length,u=p&&!o&&t[0].length>2&&!t[0][0].hasOwnProperty("x");if(u||o){let e=[];t.forEach((t=>{let n=u?a(t):t.map((t=>({x:t[0],y:t[1]})));e.push(n)})),t=e}else i&&(t=t.map((t=>({x:t[0],y:t[1]}))));
//!Array.isArray(pts[0]
return!Array.isArray(t[0])&&!t[0].hasOwnProperty("x")&&(t=a(t)),t}function h(t,e){return(e.x-t.x)**2+(e.y-t.y)**2}function i(t){let e=h(t[0],t[1]);for(let n=3,a=t.length;n<a;n++){let a=h(t[n-1],t[n]);if(100/e*Math.abs(e-a)>.1)return!1;e=a}return!0}function p(t,e=null){if(0===t.length)return t;if(e=null===e?function(t,e=24){let n=o(t,e),{width:a,height:l}=f(n),r=(Math.max(a,l)/t.length)**2,s=h(t[0],t[t.length-1]);return s<r}(t):e,!e)return t;let n=0;for(let e=1,a=t.length;e<a;e++){let a=t[e],l=t[n];(a.x<l.x||a.x===l.x&&a.y<l.y)&&(n=e)}return t.slice(n).concat(t.slice(0,n))}function o(t,e=48){if(!Array.isArray(t)||t.length<=e)return t;let n=t.length,a=n/e,l=[];for(let n=0;n<e;n++)l.push(t[Math.floor(n*a)]);let r=l.length;return l[r-1]!==t[n-1]&&(l[r-1]=t[n-1]),l}function u(t,e=!0){let n=0;for(let e=0,a=t.length;a&&e<a;e++){n+=t[e].x*t[e===t.length-1?0:e+1].y*.5-t[e===t.length-1?0:e+1].x*t[e].y*.5}return e?Math.abs(n):n}function f(t){let e=t.map((t=>t.x)),n=t.map((t=>t.y)),a=Math.min(...e),l=Math.max(...e),r=Math.min(...n),s=Math.max(...n);return{x:a,left:a,right:l,y:r,top:r,bottom:s,width:l-a,height:s-r}}function c(t){const e=(t,e,n)=>{const a=(t,e,n,a)=>{let[l,r,s,h]=[t.x,e.x,n.x,a.x],[i,p,o,u]=[t.y,e.y,n.y,a.y],[f,c]=[l-r,s-h],[y,g]=[i-p,o-u],x=f*g-y*c;if(0===x)return null;let d=l*p-i*r,m=s*u-o*h,M=(d*c-f*m)/x,v=(d*g-y*m)/x;return M<Math.min(l,r)||M>Math.max(l,r)||M<Math.min(s,h)||M>Math.max(s,h)||v<Math.min(i,p)||v>Math.max(i,p)||v<Math.min(o,u)||v>Math.max(o,u)?null:{x:M,y:v}},l=(t,e)=>(t.x-e.x)**2+(t.y-e.y)**2,r=t.length;let s=[],h=l(e,n),i=h/1e3;for(let p=0;p<r;p++){let o=t[p],u=t[(p+1)%r];if(u===n)continue;let f=a(e,n,o,u);if(f){const t=l(e,f);t>i&&t<h&&s.push({pt0:e,pt1:n,startPoint:o,intersectionPoint:f,endPoint:u,lengthSq:t})}}return s.sort(((t,e)=>t.lengthSq-e.lengthSq)),s},n=t.length;if(n<3)return t;for(let e=0;e<n;e++)t[e].next=(e+1)%n;const a=[];let l=t[0],r=t[l.next];a.push(l);for(let s=0;s<2*n;s++){const n=e(t,l,r);if(0===n.length)a.push(r),l=r,r=t[r.next];else{const t=n[0];l=t.intersectionPoint,r=t.endPoint,a.push(l)}if(a.length>2&&l.x===a[0].x&&l.y===a[0].y)break}const s=a[0],h=a[a.length-1];return s.x===h.x&&s.y===h.y&&a.pop(),a}function y(t){if(!function(t){const e=(t,e)=>t>=-180&&t<=180&&e>=-90&&e<=90;let n=[t[0],t[Math.floor(t.length/2)],t[t.length-1]];return n.every((t=>e(t.x,t.y)))}(t))return t;const e=t=>t*(Math.PI/180),n=t=>{let n=Math.max(-85.05112878,Math.min(85.05112878,t.y)),a=t.x;return{x:(e(a)+Math.PI)/(2*Math.PI),y:(Math.PI-Math.log(Math.tan(Math.PI/4+e(n)/2)))/(2*Math.PI)}};let a=t.length,l=[];for(let e=0;e<a;e++)l.push(n(t[e]));let r=f(t),s=f(l),h=r.width/s.width,i=s.x*h-r.x,p=s.y*h-r.y;for(let t=0;t<a;t++)l[t].x=l[t].x*h-i,l[t].y=l[t].y*h-p;return l}function g(t,e,n="points",a=!1,s=-1,i=!1,p=!1,u=!1,c=1,y=0,g=0,x=!1,d=0,m=0,M=!1){let v={data:[],ptsArr:[],countOriginal:0,count:0,areaOriginal:0,areaptsSmp:0,areaDiff:0,isPolygon:[]};e=function(t,e=1,n=0,a=0,l=!1,r=0,s=0){if(1===e&&0===r&&0===s&&0===n&&0===a&&!1===l)return t;let h,i,p,o,u=Array.isArray(t[0]),c=u?t:[t],y=u?t.flat():t;return({x:h,y:i,width:p,height:o}=f(y)),c.forEach(((t,u)=>{e=r?r/p:s?s/o:e,s&&o*e>s&&(e=s/o),l&&(n=-h,a=-i);for(let l=0,r=t.length;l<r;l++){let r=t[l];c[u][l]={x:(r.x+n)*e,y:(r.y+a)*e}}})),c}(e,c,y,g,x,d,m);for(let n=0,l=e.length;n<l;n++){let l=t[n],r=e[n],s=l.length;v.countOriginal+=s;let i=r.length;v.count+=i,v.ptsArr.push(r);let p=!1;if(a){let t=o(l,32),{width:e,height:n}=f(t),a=(Math.max(e,n)/l.length)**2;p=h(l[0],l[l.length-1])<a,v.isPolygon.push(p)}}if(s>-1&&s<=3){let t=e.flat(),n=o(t,24),{width:a,height:l}=f(n),r=(a+l)/2;if(r>500)s=0;else{let e=t.length/r,n=r/1e3,a=Math.ceil(1/n).toString().length,l=Math.ceil(e).toString().length,h=Math.ceil((a+l)/2);s=s>-1&&s<h?h:s}}switch(n=n?n.toLowerCase():"points"){case"points":case"pointstring":case"pointsnested":case"json":s>-1&&(v.ptsArr=v.ptsArr.map((t=>t.map((t=>({x:+t.x.toFixed(s),y:+t.y.toFixed(s)})))))),"pointstring"===n?v.data=v.ptsArr.map((t=>t.map((t=>`${t.x} ${t.y}`)).join(" "))):"points"===n?(M||(v.ptsArr=v.ptsArr[0]),v.data=v.ptsArr):"pointsnested"===n?(v.data=v.ptsArr.map((t=>t.map((t=>[t.x,t.y])))),M||(v.data=v.data[0],v.ptsArr=v.ptsArr[0])):"json"===n&&(M||(v.ptsArr=v.ptsArr[0]),v.data=JSON.stringify(v.ptsArr));break;case"pathdata":case"path":let t=[];v.ptsArr.forEach(((e,n)=>{let a=[{type:"M",values:[e[0].x,e[0].y]},...e.slice(1).map((t=>({type:"L",values:[t.x,t.y]})))];v.isPolygon[n]&&a.push({type:"Z",values:[]}),t.push(...a)})),t=l(t,s,i,p),"path"===n?(v.data=[r(t,u?1:0)],M||(v.data=v.data[0])):v.data=t}return v}function x(t){if(t.length<3)return t;let e,n,a=[t[0]],l=t[0],r=t[t.length-1],s=1;for(let r=2,i=t.length;r<i;r++){if(e=t[r-1],n=t[r],e.x===n.x&&e.y===n.y)continue;let p=l.x===e.x,o=l.y===e.y;if(p||o){let t=e.x===n.x,s=e.y===n.y;t&&p||s&&o||a.push(e),r===i-1&&a.push(n),l=e;continue}let u=l.x-n.x,f=l.y-n.y,c=l.x-e.x,y=l.y-e.y,g=Math.abs(u*y-f*c);s=h(e,n)/50,g>s&&(r===i-1?a.push(e,n):a.push(e)),l=e}return l=a[0],l.x===r.x&&l.y===r.y&&a.pop(),a}function d(t,e=.9,n=0,a=0){let l=!1;if("string"==typeof e){l=!0,e=parseFloat(e)}if(t.length<4||(!l&&e)>=1)return t;let r,s=t[0],i=[s],p=e;if(!l){if(p=1-e,!n&&!a){let e=o(t,12);({width:n,height:a}=f(e))}p=(p*((n+a)/2/25))**2,e>.5&&(p/=10)}for(let e=1,n=t.length;e<n;e++){r=t[e],h(s,r)>p&&(i.push(r),s=r)}return s.x!==r.x&&s.y!==r.y&&i.push(r),i}function m(t,e=.9,n=0,a=0){let l=!1;if("string"==typeof e&&(l=!0,e=parseFloat(e)),t.length<4||(!l&&e)>=1)return t;let r=e;if(!l){if(r=1-e,e>.5&&(r/=2),!n&&!a){let e=o(t,12);({width:n,height:a}=f(e))}r=(r*((n+a)/2/100))**2}const s=(t,e,n)=>{let a=e.x,l=e.y,r=n.x-a,s=n.y-l;if(0!==r||0!==s){let e=((t.x-a)*r+(t.y-l)*s)/(r*r+s*s);e>1?(a=n.x,l=n.y):e>0&&(a+=r*e,l+=s*e)}return(t.x-a)**2+(t.y-l)**2};let h=[t[0]],i=[];for(i.push([0,t.length-1]);i.length>0;){let[e,n]=i.pop(),a=r,l=-1;for(let r=e+1;r<n;r++){let h=s(t[r],t[e],t[n]);h>a&&(l=r,a=h)}a>r?(i.push([l,n]),i.push([e,l])):h.push(t[n])}return h}function M(t,e=1,n=0,a=0){let l=!1;if("string"==typeof e&&(l=!0,e=parseFloat(e)),t.length<4||(!l&&e)>=1)return t;let r=function(t){const e=new v;for(let n=0,a=t.length;n<a;n++){let l=0===n?a-1:n-1,r=n,s=n===a-1?0:n+1,h=t[l],i=t[r],p=t[s],o=n>0||n===a-1?i.area?i.area:u([h,i,p]):1/0;i.prev=l,i.index=r,i.next=s,i.area=o,i.heapIndex=n>0?e.push(o,r):0}return e}(t);if(!n&&!a){let e=reducePoints(t,12);({width:n,height:a}=getPolyBBox(e))}let s=e;if(!l){s=((1-e)*((n+a)/2/100))**2}const h=(t,e,n)=>{let a=t[e];if(null===a.prev||null===a.next)return;let l=u([t[a.prev],a,t[a.next]]);a.area=l,void 0!==a.heapIndex?n.update(a.heapIndex,l):a.heapIndex=n.push(l,e)};let i=0,p=t.length;for(;r.size()>0;){const{area:e,index:n}=r.pop(),a=t[n];e&&e<i?a.area=i:i=e,0!==n&&(t[a.prev].next=a.next,h(t,a.prev,r)),n!==p-1&&(t[a.next].prev=a.prev,h(t,a.next,r))}let o=[];for(let e=0,n=t.length;e<n;e++){let a=t[e];(!a.area||0===e||e===n-1||a.area>=s)&&o.push(a)}return o}class v{constructor(){this.heap=[],this.indexMap=new Map}push(t,e){const n={area:t,index:e};this.heap.push(n);const a=this.heap.length-1;return this.indexMap.set(e,a),this.bubbleUp(a),a}pop(){if(0===this.heap.length)return null;const t=this.heap[0],e=this.heap.pop();return this.heap.length>0&&(this.heap[0]=e,this.indexMap.set(e.index,0),this.bubbleDown(0)),this.indexMap.delete(t.index),t}update(t,e){if("number"!=typeof t||t<0||t>=this.heap.length)return;const n=this.heap[t].area;this.heap[t].area=e,e<n?this.bubbleUp(t):this.bubbleDown(t)}size(){return this.heap.length}bubbleUp(t){for(;t>0;){const e=Math.floor((t-1)/2);if(this.heap[e].area<=this.heap[t].area)break;this.swap(t,e),t=e}}bubbleDown(t){for(;;){const e=2*t+1,n=2*t+2;let a=t;if(e<this.heap.length&&this.heap[e].area<this.heap[a].area&&(a=e),n<this.heap.length&&this.heap[n].area<this.heap[a].area&&(a=n),a===t)break;this.swap(t,a),t=a}}swap(t,e){[this.heap[t],this.heap[e]]=[this.heap[e],this.heap[t]],this.indexMap.set(this.heap[t].index,t),this.indexMap.set(this.heap[e].index,e)}}function b(t,e=0){if(t.length<=3||!e||t.length<=e)return t;let n=t,a=Math.ceil(t.length/e),l=n.length;for(let t=0;n.length>e&&t<a;t++){if(n=r(n,e,.5,!0,!1),l===n.length)break;l=n.length}function r(t,e=0,n=.5,a=!0,l=!1){let r,s=function(t){let e=[];for(let n=0;n<t.length;n++){let a=0===n?t.length-1:n-1,l=n,r=n===t.length-1?0:n+1,s=u([t[a],t[l],t[r]]),h=a,i=r;e.push({index:n,area:s,prev:h,next:i})}return e}(t),h=s.length,i=[];if(l){r=s.map((t=>t.area)).reduce(((t,e)=>t+e),0)/h*.25,a=!1}a&&s.sort(((t,e)=>t.area-e.area));let p=t.length-e,o=new Set;p=Math.floor(p*n)+1;let f=0;for(let t=0;t<p;t++){let e=s[t],{index:a,area:h,prev:i,next:p}=e,u=s[i],c=s[p],[y,g]=[u.area,c.area];l?a>0&&h<r&&f<a&&(o.add(a),f=p):(1===n||h<y&&h<g)&&(f=a,a>0&&(o.add(a),f=a))}for(let e=0;e<t.length;e++)o.has(e)||i.push(t[e]);return i}return n.length>e&&(n=r(n,e,1)),n}function w(t,{quality:e=1,RC:n=!0,RDP:a=!0,VW:l=!1,RD:r=!0,mercator:h=!1,unite:v=!1,overrideQuality:w=!1,optimizeStartingPoint:A=!0,maxPoints:P=0,skipPoints:k=!1,outputFormat:S="points",scale:$=1,alignToZero:L=!1,translateX:I=0,translateY:z=0,scaleToWidth:O=0,scaleToHeight:j=0,meta:D=!1,decimals:F=-1,toRelative:C=!1,toShorthands:N=!1,minifyString:Z=!1}={}){try{t=s(t)}catch{return console.warn("invalid input"),t=[{x:0,y:0}]}let R,E=e,W=!1,H=!1;if("string"==typeof e&&(E=parseFloat(e),R=e.replace(E.toString(),"").trim(),R?"v"===R?(P=E,H=!0,e=.8):W=!0:e=E<=1?E:.8),P){const n=(t,e,n)=>Math.min(Math.max(t,e),n);let a=+(t.length/P/100).toFixed(1);e=(e=n(e=Math.abs(1-a),.4,.8))>0&&e<1?e:.8}let J=t[0].length>1,V=J?t:[t],q=[],T=[],U=0,B=[];for(let t=0,e=V.length;t<e;t++){let e=o(V[t],64);B.push(f(e));let n=u(e);U+=n,T.push(n)}for(let t=0,s=V.length;t<s;t++){let s=V[t],u=T[t]/U,f=H?Math.ceil(P*u):0;if(!s.length)return[];let g=s;if(s.length<3){q.push(g);continue}if(k&&!a&&!l&&!r&&H){g=o(s,f),q.push(g);continue}if(w||(e>=1&&(a=!1),e>=.75&&(r=!1),e<.5&&(r=!0)),g=A?p(g):g,n){if(!W&&e>1){q.push(g);continue}g=x(g)}if(v&&(g=c(g)),n){i(g)&&(l=!1,a=!1)}let{width:S,height:$}=B[t];if(r&&g.length>f&&(g=d(g,e,S,$)),a&&g.length>f&&(g=m(g,e,S,$)),l&&g.length>f&&(g=M(g,e,S,$)),H&&g.length>f){(g.length-f)/g.length>.25&&(g=d(g,e,S,$)),g=b(g,f)}h&&(g=y(g)),q.push(g)}let Q=g(V,q,S,D,F,C,N,Z,$,I,z,L,O,j,J);return D?Q:Q.data}"undefined"!=typeof window&&(window.polySimplify=w,window.normalizePointInput=s),t.normalizePointInput=s,t.pathDataToD=r,t.polySimplify=w,t.simplifyRC=x,t.simplifyRD=d,t.simplifyRDP=m}(this["poly-simplify"]=this["poly-simplify"]||{});