clusters.js 2.6 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import"../../symbols.js";import e from"../../core/Error.js";import{fetchMessageBundle as n}from"../../intl/messages.js";import t from"../../layers/support/LabelClass.js";import r from"../../layers/support/LabelExpressionInfo.js";import s from"../heuristics/clusterMinSize.js";import{getStatisticInfos as o,getClusterField as a,clusterCountField as i,getClusterFieldHash as l,getPredominantTypeExpression as u}from"../support/clusterUtils.js";import{isClusterCompatibleRenderer as c}from"../../views/2d/layers/support/clusterUtils.js";import m from"../../symbols/TextSymbol.js";async function f(n){const{layer:t,renderer:r,view:s}=n;await Promise.all([t.load(),s.when()]);const o=r||t.renderer;if(!c(o))throw new e("clusters-label-schemes:invalid-parameters","'renderer' is not valid");return{layer:t,renderer:o,view:s}}function p(e,n,t){const r="unique-value"===e.type?e.uniqueValueInfos:[];return u(r,n,t)}function v(e){return`\n $feature["${e}"];\n var value = $feature["${e}"];\n var num = Count(Text(Round(value)));\n var label = When(\n num < 4, Text(value, "#.#"),\n num == 4, Text(value / Pow(10, 3), "#.0k"),\n num <= 6, Text(value / Pow(10, 3), "#k"),\n num == 7, Text(value / Pow(10, 6), "#.0m"),\n num > 7, Text(value / Pow(10, 6), "#m"),\n Text(value, "#,###")\n );\n return label;\n `}function w(e){const n=new m({haloColor:"#373837",haloSize:"1px",color:"#f0f0f0",font:{family:"Noto Sans",size:"12px",weight:"bold"}});return new t({symbol:n,deconflictionStrategy:"none",labelPlacement:"center-center",labelExpressionInfo:new r({expression:e})})}async function y(e){const{renderer:n,view:t,statInfo:r}=e,o=r?.statisticType,u=r?a(r.attributeInfo,o):i,c=w("type"===o?p(n,u,e.noneValueLabel):v(u));return{name:r?`clusters-${o}-${l(u,o)}`:"clusters-count",labelingInfo:[c],clusterMinSize:await s(c.symbol,t),fieldName:u}}function b(e){const n=new Map;for(const t of e)"size"===t.attributeInfo.vvType?n.set(t.statisticHash,t):n.has(t.statisticHash)||n.set(t.statisticHash,t);return[...n.values()]}async function d(e){const[{renderer:t,layer:r,view:s},a]=await Promise.all([f(e),n("esri/smartMapping/t9n/smartMapping")]);if(!t)return null;let i=null;const l=[],u=b(o(r,t,!1));for(const n of u){const e=await y({renderer:t,view:s,statInfo:n,noneValueLabel:a.clusters.predominantNoneValue});"size"===n.attributeInfo.vvType?i=e:l.push(e)}const c=await y({renderer:t,view:s});return i?l.unshift(c):i=c,{primaryScheme:i,secondarySchemes:l}}export{d as getLabelSchemes};