@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.75 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import i from"../../core/Error.js";import{isTimeOnlyField as e,numericTypes as r}from"../../layers/support/fieldUtils.js";import{verifyBasicFieldValidity as s,verifyFieldType as a,verifyFilterValidity as t}from"./support/utils.js";import{verifyBinningParams as o}from"../support/binningUtils.js";import{getNormalizationType as n,getFieldsList as l,isAnyDateField as p,dateTypes as m}from"../support/utils.js";import{defaultSupportedLayerTypes as f,LayerType as d,binningCapableLayerTypes as u,createLayerAdapter as h,getLayerTypeLabels as w}from"../support/adapters/support/layerUtils.js";const c=[...m,"time-only",...r];async function g(r){if(!r?.layer||!(r.field||r.valueExpression||r.sqlExpression))throw new i("histogram:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(r.valueExpression&&!r.sqlExpression&&!r.view)throw new i("histogram:missing-parameters","View is required when 'valueExpression' is specified");r.forBinning&&o(r,"histogram");const{layer:m,...g}=r,v=[...f,d.ImageryLayer],y=r.forBinning?u:v,x=h(m,y,r.forBinning);if(!x)throw new i("histogram:invalid-parameters","'layer' must be one of these types: "+w(y).join(", "));const E={layerAdapter:x,...g};E.normalizationType=n(E);const q=null!=E.signal?{signal:E.signal}:null;await x.load(q);const j=E.valueExpression||E.sqlExpression,z=E.field,B=z?x.getField(z):null,b=!E.classificationMethod||"equal-interval"===E.classificationMethod,A=await l({field:z,normalizationField:E.normalizationField,valueExpression:E.valueExpression}),M=s(x,A,"histogram:invalid-parameters");if(M)throw M;if(B){const r=a(x,B,"histogram:invalid-parameters",c);if(r)throw r;if(p(B)||e(B)){if(E.normalizationType)throw new i("histogram:invalid-parameters","Normalization is not allowed for date fields");if(!b)throw new i("histogram:invalid-parameters","'classificationMethod' other than 'equal-interval' is not allowed for date fields")}}else if(j){if(E.normalizationType)throw new i("histogram:invalid-parameters","Normalization is not allowed when 'valueExpression' or 'sqlExpression' is specified");if(!b)throw new i("histogram:invalid-parameters","'classificationMethod' other than 'equal-interval' is not allowed when 'valueExpression' or 'sqlExpression' is specified")}E.filter&&!E.filter.spatialRelationship&&(E.filter.spatialRelationship="intersects");const F=t(E.filter,"histogram:invalid-parameters");if(F)throw F;return null==E.useQueryAttributeBins&&(E.useQueryAttributeBins=!0),E}async function v(i){const{layerAdapter:e,...r}=await g(i);return e.histogram(r)}export{v as default};