outline.js 1.7 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.24/esri/copyright.txt for details.
  4. */
  5. import e from"../../core/Error.js";import{isSome as t}from"../../core/maybe.js";import{getScaleForResolution as i}from"../../geometry/support/scaleUtils.js";import r from"../../renderers/visualVariables/SizeVariable.js";import a from"../statistics/spatialStatistics.js";import{createLayerAdapter as s,featureCapableLayerTypes as o,getLayerTypeLabels as n}from"../support/adapters/support/layerUtils.js";const l=[{size:10,width:0},{size:20,width:.5},{size:80,width:1},{size:250,width:2}];async function p(i){const{view:r}=i;if(!(i&&r&&i.layer))throw new e("outline:missing-parameters","'view' and 'layer' parameters are required");const{layer:a,...l}=i,p=s(a,o),u={layerAdapter:p,...l};if(!p)throw new e("outline:invalid-parameters","'layer' must be one of these types: "+n(o).join(", "));await r.when();const m=t(u.signal)?{signal:u.signal}:null;if(await p.load(m),"polygon"!==p.geometryType)throw new e("outline:not-supported",`outline is not supported for geometryType: ${p.geometryType}`);return u}function u(e,t){const a=e.avgSize,s=i(1,t.spatialReference),o=l.map((e=>({size:e.width,value:Math.round(a/e.size*s)})));o.sort(((e,t)=>e.value-t.value));return{visualVariables:[new r({target:"outline",valueExpression:"$view.scale",stops:o})],opacity:.25}}async function m(t){const{layerAdapter:i,...r}=await p(t),s=-1,o=await i.getSampleFeatures({sampleSize:s,returnGeometry:!0,...r}),n=await a({features:o,geometryType:i.geometryType});if(!("avgSize"in n)||!n.avgSize)throw new e("outline:insufficient-info","average polygon size is invalid");return u(n,r.view)}export{m as default};