12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.25/esri/copyright.txt for details.
- */
- import n from"../rest/support/ClassBreaksDefinition.js";import{createGenerateRendererClassBreaks as e}from"../rest/support/generateRendererUtils.js";const t="<Null>",i="equal-interval",l=1,a=5,o=10,r=/\s*(\+|-)?((\d+(\.\d+)?)|(\.\d+))\s*/gi,u=new Set(["esriFieldTypeInteger","esriFieldTypeSmallInteger","esriFieldTypeSingle","esriFieldTypeDouble"]),s=["min","max","avg","stddev","count","sum","variance","nullcount","median"];function c(n){return null==n||"string"==typeof n&&!n?t:n}function m(n){const e=null!=n.normalizationField||null!=n.normalizationType,t=null!=n.minValue||null!=n.maxValue,i=!!n.sqlExpression&&n.supportsSQLExpression;return!e&&!t&&!i}function f(n){const e=n.returnDistinct?[...new Set(n.values)]:n.values,t=e.filter((n=>null!=n)).length,i={count:t};return n.supportsNullCount&&(i.nullcount=e.length-t),n.percentileParams&&(i.median=p(e,n.percentileParams)),i}function d(n){const{values:e,useSampleStdDev:t,supportsNullCount:i}=n;let l=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY,o=null,r=null,u=null,s=null,c=0;const m=null==n.minValue?-1/0:n.minValue,f=null==n.maxValue?1/0:n.maxValue;for(const p of e)Number.isFinite(p)?p>=m&&p<=f&&(o+=p,l=Math.min(l,p),a=Math.max(a,p),c++):"string"==typeof p&&c++;if(c&&null!=o){r=o/c;let n=0;for(const t of e)Number.isFinite(t)&&t>=m&&t<=f&&(n+=(t-r)**2);s=t?c>1?n/(c-1):0:c>0?n/c:0,u=Math.sqrt(s)}else l=null,a=null;const d={avg:r,count:c,max:a,min:l,stddev:u,sum:o,variance:s};return i&&(d.nullcount=e.length-c),n.percentileParams&&(d.median=p(e,n.percentileParams)),d}function p(n,e){const{fieldType:t,value:i,orderBy:l,isDiscrete:a}=e,o=v(t,"desc"===l);if(0===(n=[...n].filter((n=>null!=n)).sort(((n,e)=>o(n,e)))).length)return null;if(i<=0)return n[0];if(i>=1)return n[n.length-1];const r=(n.length-1)*i,u=Math.floor(r),s=u+1,c=r%1,m=n[u],f=n[s];return s>=n.length||a||"string"==typeof m||"string"==typeof f?m:m*(1-c)+f*c}function v(n,e){const t=e?1:-1,i=h(e),l=b(e);if(!(!!n&&["esriFieldTypeDate","esriFieldTypeString","esriFieldTypeGUID","esriFieldTypeGlobalID",...u].includes(n)))return(n,e)=>"number"==typeof n&&"number"==typeof e?i(n,e):"string"==typeof n&&"string"==typeof e?l(n,e):t;if("esriFieldTypeDate"===n)return(n,e)=>{const l=new Date(n).getTime(),a=new Date(e).getTime();return isNaN(l)||isNaN(a)?t:i(l,a)};if(u.has(n))return(n,e)=>i(n,e);if("esriFieldTypeString"===n)return(n,e)=>l(n,e);if("esriFieldTypeGUID"===n||"esriFieldTypeGlobalID"===n){const n=b(e);return(e,t)=>n(g(e),g(t))}return e?(n,e)=>1:(n,e)=>-1}function b(n){return n?(n,e)=>(n=n?.toUpperCase(),e=e?.toUpperCase(),n>e?-1:n<e?1:0):(n,e)=>(n=n?.toUpperCase(),e=e?.toUpperCase(),n<e?-1:n>e?1:0)}function h(n){return n?(n,e)=>e-n:(n,e)=>n-e}function g(n){return n.substr(24,12)+n.substr(19,4)+n.substr(16,2)+n.substr(14,2)+n.substr(11,2)+n.substr(9,2)+n.substr(6,2)+n.substr(4,2)+n.substr(2,2)+n.substr(0,2)}function V(n,e){let t;for(t in n)s.includes(t)&&(Number.isFinite(n[t])||(n[t]=null));return e?(["avg","stddev","variance"].forEach((e=>{null!=n[e]&&(n[e]=Math.ceil(n[e]))})),n):n}function T(n){const e={};for(let t of n)(null==t||"string"==typeof t&&""===t.trim())&&(t=null),null==e[t]?e[t]={count:1,data:t}:e[t].count++;return{count:e}}function y(n){return"coded-value"!==n?.type?[]:n.codedValues.map((n=>n.code))}function F(n,e,t,i){const l=n.count,a=[];if(t&&e){const n=[],t=y(e[0]);for(const l of t)if(e[1]){const t=y(e[1]);for(const a of t)if(e[2]){const t=y(e[2]);for(const e of t)n.push(`${c(l)}${i}${c(a)}${i}${c(e)}`)}else n.push(`${c(l)}${i}${c(a)}`)}else n.push(l);for(const e of n)l.hasOwnProperty(e)||(l[e]={data:e,count:0})}for(const o in l){const n=l[o];a.push({value:n.data,count:n.count,label:n.label})}return{uniqueValueInfos:a}}function x(n,e,t,i){let l=null;switch(e){case"log":0!==n&&(l=Math.log(n)*Math.LOG10E);break;case"percent-of-total":Number.isFinite(i)&&0!==i&&(l=n/i*100);break;case"field":Number.isFinite(t)&&0!==t&&(l=n/t);break;case"natural-log":n>0&&(l=Math.log(n));break;case"square-root":n>0&&(l=n**.5)}return l}function D(n,t){const i=I({field:t.field,normalizationType:t.normalizationType,normalizationField:t.normalizationField,classificationMethod:t.classificationMethod,standardDeviationInterval:t.standardDeviationInterval,breakCount:t.numClasses||a});return n=z(n,t.minValue,t.maxValue),e({definition:i,values:n,normalizationTotal:t.normalizationTotal})}function z(n,e,t){return e=e??-1/0,t=t??1/0,n.filter((n=>Number.isFinite(n)&&n>=e&&n<=t))}function I(e){const t=e.field,a=e.classificationMethod||i,o=e.normalizationType,r=e.normalizationField,u=new n;return u.classificationField=t,u.breakCount=e.breakCount,u.classificationMethod=a,u.standardDeviationInterval="standard-deviation"===a?e.standardDeviationInterval||l:void 0,u.normalizationType=o,u.normalizationField="field"===o?r:void 0,u}function N(n,e){let t=n.classBreaks;const i=t.length,l=t[0].minValue,a=t[i-1].maxValue,o="standard-deviation"===e,u=r;return t=t.map((n=>{const e=n.label,t={minValue:n.minValue,maxValue:n.maxValue,label:e};if(o&&e){const n=e.match(u).map((n=>+n.trim()));2===n.length?(t.minStdDev=n[0],t.maxStdDev=n[1],n[0]<0&&n[1]>0&&(t.hasAvg=!0)):1===n.length&&(e.includes("<")?(t.minStdDev=null,t.maxStdDev=n[0]):e.includes(">")&&(t.minStdDev=n[0],t.maxStdDev=null))}return t})),{minValue:l,maxValue:a,classBreakInfos:t,normalizationTotal:n.normalizationTotal}}function S(n,e){const{min:t,max:i,intervals:l}=M(n,e),a=l.map(((n,e)=>({minValue:l[e][0],maxValue:l[e][1],count:0})));for(const o of n)if(null!=o&&o>=t&&o<=i){const n=C(l,o);n>-1&&a[n].count++}return{bins:a,minValue:t,maxValue:i,normalizationTotal:e.normalizationTotal}}function M(n,e){const{field:t,classificationMethod:i,standardDeviationInterval:l,normalizationType:a,normalizationField:r,normalizationTotal:u,minValue:s,maxValue:c}=e,f=e.numBins||o;let p=null,v=null,b=null;if((!i||"equal-interval"===i)&&!a){if(null!=s&&null!=c)p=s,v=c;else{const e=d({values:n,minValue:s,maxValue:c,useSampleStdDev:!a,supportsNullCount:m({normalizationType:a,normalizationField:r,minValue:s,maxValue:c})});p=e.min,v=e.max}b=k(p,v,f)}else{const{classBreaks:e}=D(n,{field:t,normalizationType:a,normalizationField:r,normalizationTotal:u,classificationMethod:i,standardDeviationInterval:l,minValue:s,maxValue:c,numClasses:f});p=e[0].minValue,v=e[e.length-1].maxValue,b=e.map((n=>[n.minValue,n.maxValue]))}return{min:p,max:v,intervals:b}}function C(n,e){let t=-1;for(let i=n.length-1;i>=0;i--){if(e>=n[i][0]){t=i;break}}return t}function k(n,e,t){const i=(e-n)/t,l=[];let a,o=n;for(let r=1;r<=t;r++)a=o+i,a=Number(a.toFixed(16)),l.push([o,r===t?e:a]),o=a;return l}export{D as calculateClassBreaks,S as calculateHistogram,p as calculatePercentile,d as calculateStatistics,f as calculateStringStatistics,T as calculateUniqueValuesCount,I as createClassBreaksDefinition,F as createUVResult,v as getAttributeComparator,k as getEqualIntervalBins,x as getNormalizedValue,m as isNullCountSupported,c as processNullValue,V as processSummaryStatisticsResult,N as resolveCBResult,s as statisticTypes};
|