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