@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 2.97 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import i from"../../core/Error.js";import{isTimeOnlyField as s,numericTypes as e}from"../../layers/support/fieldUtils.js";import{verifyBasicFieldValidity as t,verifyFieldType as a,verifyFilterValidity as r}from"./support/utils.js";import{verifyBinningParams as n}from"../support/binningUtils.js";import{getNormalizationType as l,getFieldsList as o,isAnyDateField as m,dateTypes as p}from"../support/utils.js";import{defaultSupportedLayerTypes as f,binningCapableLayerTypes as d,createLayerAdapter as u,getLayerTypeLabels as c}from"../support/adapters/support/layerUtils.js";const w=[...e,...p,"time-only","string"];async function y(p){if(!p?.layer||!(p.field||p.fields?.length||p.valueExpression||p.sqlExpression))throw new i("summary-statistics:missing-parameters","'layer' and 'field', 'fields', 'valueExpression' or 'sqlExpression' parameters are required");if(p.valueExpression&&!p.sqlExpression&&!p.view)throw new i("summary-statistics:missing-parameters","View is required when 'valueExpression' is specified");p.forBinning&&n(p,"summary-statistics");const{layer:y,...h}=p,v=[...f,5],x=p.forBinning?d:v,E=u(y,x,p.forBinning);if(!E)throw new i("summary-statistics:invalid-parameters","'layer' must be one of these types: "+c(x).join(", "));const g={layerAdapter:E,...h};g.normalizationType=l(g);const z=null!=g.signal?{signal:g.signal}:null;await E.load(z);const j=g.normalizationType,q=await o({field:g.field,normalizationField:g.normalizationField,valueExpression:g.valueExpression,fields:g.fields}),V=t(E,q,"summary-statistics:invalid-parameters");if(V)throw V;if(g.fields?.length){const s=g.fields;if(s.length<2)throw new i("summary-statistics:invalid-parameters","'fields' must contain at least 2 fields if specified.");if(j||g.minValue||g.maxValue||g.valueExpression||g.field)throw new i("summary-statistics:invalid-parameters","Normalization, 'field', 'valueExpression', 'minValue' and 'maxValue' are not allowed when 'fields' is specified.");const t=new Set;for(const i of s){const s=E.getField(i),r=a(E,s,"summary-statistics:invalid-parameters",e);if(r)throw r;t.add(s.type)}if(t.size>1)throw new i("summary-statistics:invalid-parameters","All fields must be of the same type when 'fields' is specified.")}else{if((g.valueExpression||g.sqlExpression)&&j)throw new i("summary-statistics:invalid-parameters","Normalization is not allowed when 'valueExpression' or 'sqlExpression' is specified");if(g.field){const e=E.getField(g.field),t=a(E,e,"summary-statistics:invalid-parameters",w);if(t)throw t;if((m(e)||s(e))&&j)throw new i("summary-statistics:invalid-parameters","Normalization is not allowed for date fields")}}g.filter&&!g.filter.spatialRelationship&&(g.filter.spatialRelationship="intersects");const F=r(g.filter,"summary-statistics:invalid-parameters");if(F)throw F;return g}async function h(i){const{layerAdapter:s,...e}=await y(i);return s.summaryStatistics(e)}export{h as default};