UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) • 6.38 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import e from"../../../Color.js";import{getColorLuminance as t}from"../../../core/colorUtils.js";import{round as l,numDigits as i,percentChange as o}from"../../../renderers/support/numberUtils.js";import{updateReferenceSizeSymbol as r}from"../../../smartMapping/renderers/support/referenceSizeUtils.js";import{updateSpikeSymbol as s}from"../../../smartMapping/renderers/support/spikeUtils.js";import{isDarkMode as n}from"../../../support/modeUtils.js";import a from"../../../symbols/SimpleLineSymbol.js";import u from"../../../symbols/SimpleMarkerSymbol.js";import{applyCIMSymbolColor as m}from"../../../symbols/support/cimSymbolUtils.js";import{getCIMSymbolPreviewSize as c}from"../../../symbols/support/previewCIMSymbol.js";import{isSymbol3D as p}from"../../../symbols/support/typeUtils.js";import{isVolumetricSymbol as f,getSymbolOutlineSize as y}from"../../../symbols/support/utils.js";import{getAuthoringInfoVisualVariableByTheme as b,getSymbolForFlowRenderer as d,createStopLabel as h}from"./utils.js";const w=30,S=12,g=24,v=[255,255,255],z=[200,200,200],k=[128,128,128],j=20,x=5;function V(e){return"esri.symbols.SimpleMarkerSymbol"===e.declaredClass}function I(e){return"esri.symbols.PictureMarkerSymbol"===e.declaredClass}function M(e){return"esri.symbols.SimpleLineSymbol"===e.declaredClass}function C(e){return"esri.symbols.TextSymbol"===e.declaredClass}function U(e,t){const l=e.length-1;return e.map((e,i)=>h(e,i,l,t))}async function L(e,t,i,o,r,s,n){const a=t.legendOptions,u=a?.customValues,m=n||await E(e,i),p=t.stops,d=!!m,h=!!u,w=null!=t.minSize&&null!=t.maxSize,S=p&&p.length>1,v=!!t.target;if(!d||!h&&!(w||S&&!v))return;const z=f(m);let k=!1,j=null,x=null;j=z&&!S?l([t.minDataValue,t.maxDataValue]):u??await H(t,m,o,r?.type);const V=e?.authoringInfo,I="univariate-color-size"===V?.type,M=I&&"above-and-below"===V?.univariateTheme,C=!!b(e,"reference-size"),L=!!b(e,"spike");if(!j&&S&&(j=p.map(e=>e.value),k=p.some(e=>!!e.label),"flow"===e.type&&(j=l(j)),k&&(x=p.map(e=>e.label))),z&&null!=j&&j?.length>2&&!M&&(j=[j[0],j[j.length-1]]),!j)return null;I&&5!==j?.length&&(j=O({minSize:j[0],maxSize:j[j.length-1]}));const T=z?D(e,j):null,P=y(m),q=k?null:U(j,s),B=await Promise.all(j.map(async(l,i)=>{let s=z?T[i]:await F(t,m,l,o,r?.type),n=s;C&&(s*=g/t.maxSize||1,n=g);const a=G(m,s,e,i);L&&"cim"===a.type&&(n=await c(a));return{value:l,symbol:a,label:k?x[i]:q[i],size:n,outlineSize:P}}));return B.reverse()}function D(e,t){const l=e?.authoringInfo,i="univariate-color-size"===l?.type;let o=[S,w];if(i){const e=t[0],l=t[t.length-1],i=S,r=w;o=t.map(t=>i+(t-e)/(l-e)*(r-i))}return i&&"below"===l?.univariateTheme&&o.reverse(),o}function T(e,t){const l=e.classBreakInfos,i=l.length,o=i<2||!(t>=2)?l[0].symbol.clone():l[i-1].symbol.clone(),r=e.visualVariables?.some(e=>"color"===e.type);return r&&(o.type.includes("3d")?q(o):B(o)),o}async function E(l,i){if("flow"===l.type)return d(l,i);if("pie-chart"===l.type)return new u({color:null,outline:l.outline?.width?l.outline:new a});let o=null,m=null;if("simple"===l.type)o=l.symbol;else if("class-breaks"===l.type){const e=l.classBreakInfos;o=e&&e[0]&&e[0].symbol,m=e.length>1}else if("unique-value"===l.type){const e=l.uniqueValueInfos;o=e?.[0]?.symbol,m=null!=e&&e.length>1}if(!o||P(o))return null;if(o=o.clone(),i||m)if(o.type.includes("3d"))q(o);else if(b(l,"reference-size")&&"cim"===o.type)r(o,{color:i??("class-breaks"!==l.type?new e(z):null)});else if(b(l,"spike")&&"cim"===o.type){const l=new e(z),r=new e(k),a="CIMPointSymbol"===o.data.symbol?.type?o.data.symbol:null,u=!!a?.symbolLayers?.find(({type:e})=>"CIMSolidStroke"===e)?.colorLocked;let m,c=i??void 0;if(c){const e=t(c),i=n();(!i&&e>225||i&&e<25)&&(c=l,m=u?r:l)}else c=l,m=u?r:l;s(o,{color:c,strokeColor:m})}else B(o);return o}function P(e){return p(e)?e.symbolLayers?.some(e=>"fill"===e?.type)??!1:e?.type.includes("fill")??!1}function q(e){"line-3d"===e.type?e.symbolLayers.forEach(e=>{e.material={color:k}}):e.symbolLayers.forEach(e=>{"icon"!==e.type||e.resource?.href?e.material={color:z}:(e.material={color:v},e.outline={color:k,size:1.5})})}function B(t){const l=n();if("cim"===t.type)m(t,new e(z));else if(t.type.includes("line"))t.color=k;else if(t.color=l?k:v,"simple-marker"===t.type)if(t.outline){const e=t.outline?.color?.toHex();"#ffffff"===e&&(t.outline.color=k)}else t.outline={color:k,width:1.5}}async function H(e,t,i,o){const r=(await import("../../../renderers/visualVariables/support/visualVariableUtils.js")).getSizeRangeAtScale(e,i,o),s=r&&O(r);if(!r||!s)return;let n=s.map(t=>R(t,e,r));n=l(n);for(let l=1;l<n.length-1;l++){const r=await A(e,t,n[l],n[l-1],i,o);r&&(n[l]=r[0],s[l]=r[1])}return n}function O(e){const t=e.minSize,l=e.maxSize,i=x,o=(l-t)/(i-1),r=[];for(let s=0;s<i;s++)r.push(t+o*s);return r}function R(e,t,l){const i=l.minSize,o=l.maxSize,r=t.minDataValue,s=t.maxDataValue;let n;if(e<=i)n=r;else if(e>=o)n=s;else{n=(e-i)/(o-i)*(s-r)+r}return n}async function A(e,t,r,s,n,a){const u=await F(e,t,r,n,a),m=await F(e,t,s,n,a),c=i(r),p=c.fractional,f=j;let y=c.integer,b=null,d=null;r>0&&r<1&&(b=10**p,y=i(r*=b).integer);for(let i=y-1;i>=0;i--){const s=10**i;let c=Math.floor(r/s)*s,p=Math.ceil(r/s)*s;null!=b&&(c/=b,p/=b);let y=(c+p)/2;[,y]=l([c,y,p],{indexes:[1]});const h=await F(e,t,c,n,a),w=await F(e,t,p,n,a),S=await F(e,t,y,n,a),g=o(u,h,m,null),v=o(u,w,m,null),z=o(u,S,m,null);let k=g.previous<=f,j=v.previous<=f;if(k&&j&&(g.previous<=v.previous?(k=!0,j=!1):(j=!0,k=!1)),k?d=[c,h]:j?d=[p,w]:z.previous<=f&&(d=[y,S]),d)break}return d}async function F(e,t,l,i,o){const{getSize:r}=await import("../../../renderers/visualVariables/support/visualVariableUtils.js");return r(e,l,{scale:i,view:o,shape:"simple-marker"===t.type?t.style:null})}function G(e,t,l,i){"univariate-color-size"===l?.authoringInfo?.type&&"above-and-below"===l?.authoringInfo?.univariateTheme&&"class-breaks"===l.type&&(e=T(l,i));const o=e.clone();if(p(o))f(o)||o.symbolLayers.forEach(e=>{"fill"!==e.type&&(e.size=t)});else if(V(o))o.size=t;else if(I(o)){const e=o.width,l=o.height;o.height=t,o.width=t*(e/l)}else M(o)?o.width=t:C(o)?o.font&&(o.font.size=t):"cim"===o.type&&b(l,"reference-size")?r(o,{innerDotSize:t,outerRingSize:g}):"cim"===o.type&&b(l,"spike")&&s(o,{defaultHeight:t,primitiveOverrides:null});return o}export{L as getRampStops,w as realWorldMaxSize,S as realWorldMinSize};