@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.08 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 e from"../../core/Error.js";import{getScaleForResolution as i}from"../../geometry/support/scaleUtils.js";import t from"../../renderers/visualVariables/SizeVariable.js";import r from"../../renderers/visualVariables/support/SizeStop.js";import a from"../statistics/spatialStatistics.js";import{verifyBinningParams as s}from"../support/binningUtils.js";import{binningCapableLayerTypes as o,featureCapableLayerTypes as n,createLayerAdapter as l,getLayerTypeLabels as p}from"../support/adapters/support/layerUtils.js";const u=[{size:10,width:0},{size:20,width:.5},{size:80,width:1},{size:250,width:2}];async function f(i){const{view:t}=i;if(!(i&&t&&i.layer))throw new e("outline:missing-parameters","'view' and 'layer' parameters are required");i.forBinning&&s(i,"outline");const{layer:r,...a}=i,u=i.forBinning?o:n,f=l(r,u,i.forBinning);if(!f)throw new e("outline:invalid-parameters","'layer' must be one of these types: "+p(u).join(", "));const m={layerAdapter:f,...a,view:t};await t.when();const w=null!=m.signal?{signal:m.signal}:null;if(await f.load(w),"polygon"!==f.geometryType)throw new e("outline:not-supported",`outline is not supported for geometryType: ${f.geometryType}`);return m}function m(e,a){const s=e.avgSize,o=i(1,a.spatialReference),n=u.map((e=>new r({size:e.width,value:Math.round(s/e.size*o)})));n.sort(((e,i)=>e.value-i.value));return{visualVariables:[new t({target:"outline",valueExpression:"$view.scale",stops:n})],opacity:.25}}async function w(i){const{layerAdapter:t,...r}=await f(i),s=-1,o=await t.getSampleFeatures({sampleSize:s,returnGeometry:!0,...r},"json");if(!o?.length)throw new e("outline:insufficient-info","No features are available to calculate statistics");const n=await a({features:o,geometryType:t.geometryType});if(!(n&&"avgSize"in n&&n.avgSize))throw new e("outline:insufficient-info","average polygon size is invalid");return m({...n,avgSize:n.avgSize},r.view)}export{w as default};