@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.75 kB
JavaScript
import e from"../../../Graphic.js";import{isSome as r}from"../../../core/maybe.js";import{NATIVE_ARRAY_MAX_SIZE as s}from"../../../core/typedArrayUtil.js";import{WorkerHandle as t}from"../../../core/workers/WorkerHandle.js";import o from"../../../geometry/SpatialReference.js";import a from"../../../layers/support/Field.js";class n{constructor(e){this._controller=e,this._handle=new l((r=>e.schedule(r)))}destroy(){this._handle.destroy()}invoke(s,t){return s.buffer&&0!==s.buffer.byteLength?(s.options.sourceSpatialReference&&s.options.sourceSpatialReference instanceof o&&(s.options={...s.options,sourceSpatialReference:s.options.sourceSpatialReference.toJSON()}),this._handle.invoke(s,t).then((s=>{let t=0,n=0;const l=async c=>{if(s.spatialReference=o.fromJSON(s.spatialReference),s.fields)for(;t<s.fields.length;)if(s.fields[t]=a.fromJSON(s.fields[t]),t++,c.madeProgress())return this._controller.reschedule((e=>l(e)));const p=s.spatialReference;for(;n<s.features.length;){const t=s.features[n];if(++n,t.uid=e.generateUID(),r(t.geometry)&&(t.geometry.spatialReference=p,i(t.geometry),c.madeProgress()))return this._controller.reschedule((e=>l(e)))}return s};return this._controller.schedule((e=>l(e)))}))):Promise.resolve(null)}}function i(e){switch(e.type){case"polyline":e.paths.reduce(((e,r)=>e+r.length),0)<s&&(e.paths=e.hasZ||e.hasM?e.paths.map((e=>e.map((e=>[e[0],e[1],e[2]])))):e.paths.map((e=>e.map((e=>[e[0],e[1]])))));break;case"polygon":e.rings.reduce(((e,r)=>e+r.length),0)<s&&(e.rings=e.hasZ||e.hasM?e.rings.map((e=>e.map((e=>[e[0],e[1],e[2]])))):e.rings.map((e=>e.map((e=>[e[0],e[1]])))))}}class l extends t{constructor(e){super("PBFDecoderWorker","_parseFeatureQuery",{_parseFeatureQuery:e=>[e.buffer]},e)}}export{n as PBFDecoder};