UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

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