UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 2.48 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{getFeatureIdInfoFieldNames as e}from"../../../../../layers/graphics/data/FeatureIdInfo.js";import t from"../../../../../layers/support/FieldsIndex.js";import{parseField as s,parseTransform as r}from"../../../../../rest/query/operations/pbfFeatureServiceParser.js";const n=268435455;class o{constructor(){this.hasFeatures=!1,this.exceededTransferLimit=!1,this.fieldCount=0,this.featureCount=0,this.idFieldIndices=[],this.vertexCount=0,this.offsets={attributes:new Array,geometry:new Array},this.centroid=new Array}}function a(a,i,c,f=!1){const d=9,u=12,p=13,g=15,l=a.asUnsafe(),h=l.pos(),y=new o;let m=0,w=0;const k=1,x=2,I=4,b=3;let A=null,L=!1;const F=[];for(;l.next();)switch(l.tag()){case u:A=l.processMessage(r);break;case d:if(y.exceededTransferLimit=l.getBool(),y.exceededTransferLimit){y.offsets.geometry=f?new Float64Array(8e3):new Int32Array(8e3),y.centroid=f?new Float64Array(16e3):new Int32Array(16e3);for(let e=0;e<y.centroid.length;e++)y.centroid[e]=n}break;case p:{const e=l.processMessage(s);e.index=m++,F.push(e);break}case g:{const e=l.getLength(),t=l.pos()+e;if(!y.exceededTransferLimit){const e=y.offsets.geometry,t=y.centroid;e.push(0),t.push(n),t.push(n)}!L&&y.exceededTransferLimit&&(L=!0,y.offsets.attributes=f?new Float64Array(8e3*m):new Uint32Array(8e3*m));let s=w*m;for(;l.pos()<t&&l.next();)switch(l.tag()){case k:{if(L)y.offsets.attributes[s++]=l.pos();else{y.offsets.attributes.push(l.pos())}const e=l.getLength();l.skipLen(e);break}case x:if(i){const e=l.getLength(),t=l.pos()+e;for(;l.pos()<t&&l.next();)switch(l.tag()){case b:{l.getUInt32();const e=l.getSInt64(),t=l.getSInt64();y.centroid[2*w]=e,y.centroid[2*w+1]=t;break}default:l.skip()}}else{y.offsets.geometry[w]=l.pos();const e=l.getLength();y.vertexCount+=e,l.skipLen(e)}break;case I:{const e=l.getLength(),t=l.pos()+e;for(;l.pos()<t&&l.next();)switch(l.tag()){case b:{l.getUInt32();const e=l.getSInt64(),t=l.getSInt64();y.centroid[2*w]=e,y.centroid[2*w+1]=t;break}default:l.skip()}break}default:l.skip()}w++,y.hasFeatures=!0;break}default:l.skip()}y.fields=new t(F),y.featureCount=w,y.fieldCount=m;const C=e(c);return y.idFieldIndices=Array.from(C,(e=>y.fields.get(e)?.index)),y.transform=A,y.displayIds=new Uint32Array(y.featureCount),y.groupIds=new Uint16Array(y.featureCount),l.move(h),y}export{o as FeatureSetHeader,a as parseHeader};