@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 1.48 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{throwIfAborted as e}from"../../../../../../core/promiseUtils.js";import{toExtent as t}from"../../../../../../geometry/support/aaBoundingRect.js";import{executeQueryPBFBuffer as r}from"../../../../../../rest/query/operations/query.js";import{Tile as o}from"../Tile.js";import{PBFPointFeatureSetView as s}from"../featureSet/PBFPointFeatureSetView.js";const i=8e3,a=4,n=4;class c{constructor(e,t,r,o,s){this.spatialReference=e,this.url=r,this.objectIdField=o,this.capabilities=s;const{supportsMaxRecordCountFactor:n,maxRecordCount:c}=this.capabilities.query,u=n?a:1,p=(c??i)*u;this._pageSize=Math.min(i,p);const l=t.clone();l.cacheHint=!0,l.resultType="tile",l.outSpatialReference=e,l.returnGeometry=!0,l.returnZ=!0,l.maxRecordCountFactor=u,l.num=this._pageSize,l.outFields=[o],this._baseQuery=l}async fetch(r,s){const{spatialReference:i}=this,a=t(r.extent,i),c=this._baseQuery.clone();c.geometry=a;const u=new Array;let p=0,l=!1,h=1;for(;!l;){const t=[];for(let e=0;e<h;++e)t.push(this._fetchPage(c,p++,s));const r=await Promise.all(t);e(s);for(const e of r){const t=0!==e.featureCount;l||=!e.exceededTransferLimit||!t,t&&u.push(e)}h=Math.min(h+1,n)}return new o(r,u)}async _fetchPage(t,o,i){const a=t.clone();a.start=o*this._pageSize;const n=(await r(this.url,a,{signal:i})).data;return e(i),new s(n)}}export{c as Tile3DFetcher};