UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 4.17 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import e from"../../Color.js";import{createUniqueColors as a}from"../../core/colorUtils.js";import r from"../../core/Error.js";import t from"../../renderers/HeatmapRenderer.js";import i from"../../renderers/support/AuthoringInfo.js";import n from"../../renderers/support/HeatmapColorStop.js";import{gaussianBlurRadiusPxToKernelDensityRadiusPt as o}from"../../renderers/support/heatmapUtils.js";import{processRegenerateParams as s,getRendererToUpdate as m,getStyleType as l}from"./support/regenerateUtils.js";import{verifyBasicFieldValidity as p,getBasemapInfo as d}from"./support/utils.js";import f from"../statistics/heatmapStatistics.js";import{getFieldsList as u}from"../support/utils.js";import{LayerType as c,createLayerAdapter as h,getLayerTypeLabels as w}from"../support/adapters/support/layerUtils.js";import{cloneScheme as y,getSchemes as g}from"../symbology/heatmap.js";const b=.01,R=[0,.04];async function v(e){if(!e?.layer||!e.view)throw new r("heatmap-renderer:missing-parameters","'layer' and 'view' parameters are required");const a={...e,layer:e.layer,view:e.view};a.radius??=null==a.blurRadius?18:o(a.blurRadius),a.minRatio??=.01,a.maxRatio??=1,a.fadeRatio??=.2,a.fadeToTransparent??=!0;const t=[c.CSVLayer,c.FeatureLayer,c.GeoJSONLayer,c.KnowledgeGraphSublayer,c.OGCFeatureLayer,c.OrientedImageryLayer,c.ParquetLayer,c.StreamLayer,c.WFSLayer],i=h(a.layer,t);if(!i)throw new r("heatmap-renderer:invalid-parameters","'layer' must be one of these types: "+w(t).join(", "));a.layer=i;const n=null!=a.signal?{signal:a.signal}:null;await i.load(n);const s=await u({field:a.field}),m=p(i,s,"heatmap-renderer:invalid-parameters");if(m)throw m;return a}async function I(e){const a="regenerate-heatmap-renderer";await s(e,a);const t=await m(e);if("heatmap"!==l(t))throw new r(`${a}:invalid-parameters`,"Renderer is invalid");const{layer:i,filter:n,view:o,signal:p}=e,d=await v({layer:i,field:t.field,radius:t.radius,fadeRatio:t.authoringInfo?.fadeRatio,filter:n,view:o,signal:p});return{...e,creatorParameters:d,renderer:t}}async function j(e){let a=e.scheme,r=null,t=null;const i=await d(e.basemap,e.view);if(r=null!=i.basemapId?i.basemapId:null,t=null!=i.basemapTheme?i.basemapTheme:null,a)return{scheme:y(a),basemapId:r,basemapTheme:t};const n=g({basemapTheme:t});return n&&(a=n.primaryScheme,r=n.basemapId,t=n.basemapTheme),{scheme:a,basemapId:r,basemapTheme:t}}async function T(r,o){const{field:s,basemap:m,radius:l,fadeToTransparent:p,heatmapScheme:d,view:f}=o,{scheme:u,basemapId:c,basemapTheme:h}=await j({basemap:m,scheme:d,view:f}),w=u.colors,g=w.length,v=null==r.min,I=v?R:[r.min,r.max];let T;const x=o.fadeRatio??0,L=o.maxRatio??0,U=o.minRatio??0,C=(L-U)/(g-1),D=w[0],E=p?U:b,F=[new n({ratio:0,color:new e([D.r,D.g,D.b,0])}),new n({ratio:b,color:new e([D.r,D.g,D.b,0])}),new n({ratio:E,color:new e([D.r,D.g,D.b,E])})];a(w,g).forEach(((e,a)=>{const r=U+C*a;F.push(new n({ratio:r,color:e}))})),p&&(S(F,x),T=new i({fadeRatio:x}));return{renderer:new t({authoringInfo:T,radius:l,colorStops:F,field:s,minDensity:I[0],maxDensity:I[1]}),statistics:r,defaultValuesUsed:v,scheme:y(u),basemapId:c,basemapTheme:h}}function S(e,a){const r=10*(1-a)+1,t=e.length-3,i=e[2].color.a;e.forEach(((e,n)=>{if(n<=2)return;const{color:o}=e,s=(n-3)/t;o.a=0===a?1:Math.min(Math.max(s*r+s+i,i),1)}))}async function x(e){const a=await v(e);return T(a.statistics??await f({layer:a.layer,field:a.field,radius:a.radius,view:a.view,filter:a.filter,signal:a.signal}),a)}async function L(e){const{creatorParameters:a,renderer:r}=await I(e),t=await f({layer:a.layer,field:a.field,radius:a.radius,view:a.view,filter:a.filter,signal:a.signal}),i=null==t.min?R:[t.min,t.max];return r.minDensity=i[0],r.maxDensity=i[1],{renderer:U({renderer:r,fadeRatio:a.fadeRatio})}}function U(e){const{fadeRatio:a,renderer:r}=e,t=r.clone(),n=a??(t?.authoringInfo?.fadeRatio||0);return S(t.colorStops,n),t.authoringInfo?t.authoringInfo.fadeRatio=n:t.authoringInfo=new i({fadeRatio:n}),t}export{x as createRenderer,L as regenerateRenderer,U as updateRenderer};