@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 1.55 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{getMetersPerUnitForSR as t,inchesPerMeter as e}from"../../../../../core/unitUtils.js";import{AAggregateSpatialIndex as i}from"./AAggregateSpatialIndex.js";import{GridCell as s}from"./GridCell.js";const l=96;function o(i,s){return t(i)*e*l/s}class n extends i{constructor(t){super(t),this._cells=new Map,this._pixelsPerMapUnit=o(t.spatialReference,t.scale)}put(t){for(const e of this._cells.values()){const i=t.get(e.id);i?i.merge(e):t.set(e.id,e.clone())}}putBounded(t,e,i){const s=[e.xmin,e.ymin,e.xmax,e.ymax],[l,o,n,r]=s,c=Math.floor(l*this._pixelsPerMapUnit/this._options.cellSize),p=Math.floor(o*this._pixelsPerMapUnit/this._options.cellSize),a=Math.ceil(n*this._pixelsPerMapUnit/this._options.cellSize),h=Math.ceil(r*this._pixelsPerMapUnit/this._options.cellSize);for(let _=p;_<=h;_++)for(let e=c;e<=a;e++){const i=`${e}.${_}`,s=this._cells.get(i);if(!s)continue;const l=t.get(s.id);l?s&&!t.has(s.id)&&l.merge(s):t.set(s.id,s.clone())}}_insert(t,e,i,s){const l=e*this._pixelsPerMapUnit,o=i*this._pixelsPerMapUnit,n=Math.floor(l/this._options.cellSize),r=Math.floor(o/this._options.cellSize);this._getCellOrCreate(n,r).insert(t,s,e,i)}_getCellOrCreate(t,e){const i=s.createId(t,e);let l=this._cells.get(i);if(!l){const o=1*this._options.cellSize/this._pixelsPerMapUnit;l=s.create(t,e,this._options.fields,o),this._cells.set(i,l)}return l}}export{n as GridSpatialIndex,o as pixelsPerMapUnit};