@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.92 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{_ as t}from"../../../../chunks/tslib.es6.js";import e from"../../../../core/Accessor.js";import has from"../../../../core/has.js";import{destroyMaybe as s}from"../../../../core/maybe.js";import{property as i}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/Logger.js";import"../../../../core/RandomLCG.js";import{subclass as r}from"../../../../core/accessorSupport/decorators/subclass.js";import{PooledRBush as n}from"../../../../core/libs/rbush/PooledRBush.js";import{fromRect as o}from"../../../../geometry/support/aaBoundingBox.js";import{getObjectId as a}from"../../../../layers/graphics/dehydratedFeatures.js";let d=class extends e{constructor(t){super(t),this._index=new n(9,has("esri-csp-restrictions")?t=>({minX:t.extent[0],minY:t.extent[1],maxX:t.extent[2],maxY:t.extent[3]}):[".extent[0]",".extent[1]",".extent[2]",".extent[3]"]),this._missing=new Set,this._boundsByFeature=new Map,this.spatialReference=null,this.hasZ=null,this.hasM=null,this.objectIdField=null,this.updating=!1}setup(t){this._addMany(t)}destroy(){this._missing.clear(),this._index=s(this._index),this._boundsByFeature.clear(),this._boundsByFeature=null}update(){this._missing.size>0&&(this._addMany(Array.from(this._missing.values())),this.updating=!1,this._missing.clear())}get updatingRemaining(){return this._missing.size}queryGraphicUIDsInExtent(t,e,s){null!=e&&e.equals(this.spatialReference)&&(u.minX=t[0],u.minY=t[1],u.maxX=t[2],u.maxY=t[3],this.update(),this._index.search(u,(t=>s(t.graphic.uid))))}add(t){this._missing.add(t),this.updating=!0}remove(t){if(this._missing.delete(t))return void(this.updating=this._missing.size>0);if(!t.extent)return;this._index.remove(t);const e=a(t.graphic,this._get("objectIdField"));null!=e&&this._boundsByFeature.delete(e)}_addMany(t){if(0===t.length)return;const e=this._get("objectIdField");for(const s of t){s.computeExtent(this.spatialReference);const t=a(s.graphic,e);null!=t&&this._boundsByFeature.set(t,s.extent)}this._index.load(t)}clear(){this._index.clear(),this._missing.clear(),this._boundsByFeature.clear(),this.updating=!1}forEachInBounds(t,e){u.minX=t[0],u.minY=t[1],u.maxX=t[2],u.maxY=t[3],this.update(),this._index.search(u,(t=>{e(t)}))}getBounds(t,e){this.update();const s=this._boundsByFeature.get(t);return s?o(e,s):null}};t([i({constructOnly:!0})],d.prototype,"spatialReference",void 0),t([i({constructOnly:!0})],d.prototype,"hasZ",void 0),t([i({constructOnly:!0})],d.prototype,"hasM",void 0),t([i({constructOnly:!0})],d.prototype,"objectIdField",void 0),t([i()],d.prototype,"updating",void 0),t([i({readOnly:!0})],d.prototype,"updatingRemaining",null),d=t([r("esri.views.3d.layers.graphics.SpatialIndex2D")],d);const u={minX:0,minY:0,maxX:0,maxY:0};export{d as SpatialIndex2D};