UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.93 kB
import e from"../../../../../core/Error.js";import{parseTransform as t,parseFieldType as s}from"../../../../../rest/query/operations/pbfFeatureServiceParser.js";const r=268435455;class n{constructor(){this.fieldMap=new Map,this.fields=[],this.hasFeatures=!1,this.exceededTransferLimit=!1,this.fieldCount=0,this.featureCount=0,this.objectIdFieldIndex=0,this.vertexCount=0,this.offsets={attributes:new Array,geometry:new Array},this.centroid=new Array}hasField(e){return this.fieldMap.has(e)}isDateField(e){return(null!=e&&this.fieldMap.get(e)?.isDate)??!1}getFieldIndex(e){return null!=e?this.fieldMap.get(e)?.index:void 0}}function a(e){const t=1,r=2,n=e.asUnsafe(),a=n.getLength(),i=n.pos()+a,o={name:"",isDate:!1};for(;n.pos()<i&&n.next();)switch(n.tag()){case t:o.name=n.getString();break;case r:"esriFieldTypeDate"===s(n.getEnum())&&(o.isDate=!0);break;default:n.skip()}return o}function i(e){return e.toLowerCase().trim()}function o(s,o,f=!1){const c=1,d=3,l=9,u=12,g=13,p=15,h=s.asUnsafe(),m=h.pos(),b=new n;let w=0,k=0;const x=1,y=2,I=4,F=3;let L=null,A=null,C=null,S=!1;for(;h.next();)switch(h.tag()){case c:L=h.getString();break;case d:A=h.getString();break;case u:C=h.processMessage(t);break;case l:if(b.exceededTransferLimit=h.getBool(),b.exceededTransferLimit){b.offsets.geometry=f?new Float64Array(8e3):new Int32Array(8e3),b.centroid=f?new Float64Array(16e3):new Int32Array(16e3);for(let e=0;e<b.centroid.length;e++)b.centroid[e]=r}break;case g:{const e=a(s),t=e.name,r=i(e.name),n={fieldName:t,index:w++,isDate:e.isDate};b.fields.push(n),b.fieldMap.set(e.name,n),b.fieldMap.set(r,n);break}case p:{const e=h.getLength(),t=h.pos()+e;if(!b.exceededTransferLimit){const e=b.offsets.geometry,t=b.centroid;e.push(0),t.push(r),t.push(r)}!S&&b.exceededTransferLimit&&(S=!0,b.offsets.attributes=f?new Float64Array(8e3*w):new Uint32Array(8e3*w));let s=k*w;for(;h.pos()<t&&h.next();)switch(h.tag()){case x:{if(S)b.offsets.attributes[s++]=h.pos();else{b.offsets.attributes.push(h.pos())}const e=h.getLength();h.skipLen(e);break}case y:if(o){const e=h.getLength(),t=h.pos()+e;for(;h.pos()<t&&h.next();)switch(h.tag()){case F:{h.getUInt32();const e=h.getSInt64(),t=h.getSInt64();b.centroid[2*k]=e,b.centroid[2*k+1]=t;break}default:h.skip()}}else{b.offsets.geometry[k]=h.pos();const e=h.getLength();b.vertexCount+=e,h.skipLen(e)}break;case I:{const e=h.getLength(),t=h.pos()+e;for(;h.pos()<t&&h.next();)switch(h.tag()){case F:{h.getUInt32();const e=h.getSInt64(),t=h.getSInt64();b.centroid[2*k]=e,b.centroid[2*k+1]=t;break}default:h.skip()}break}default:h.skip()}k++,b.hasFeatures=!0;break}default:h.skip()}const M=L||A;if(!M)throw new e("FeatureSet has no objectId or globalId field name");return b.featureCount=k,b.fieldCount=w,b.objectIdFieldIndex=b.getFieldIndex(M),b.transform=C,b.displayIds=new Uint32Array(b.featureCount),b.groupIds=new Uint16Array(b.featureCount),h.move(m),b}export{n as FeatureSetHeader,o as parseHeader};