@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.34 kB
JavaScript
import{Point as e}from"../../../../geometry/support/TileClipper.js";var t;!function(e){e[e.moveTo=1]="moveTo",e[e.lineTo=2]="lineTo",e[e.close=7]="close"}(t||(t={}));class s{constructor(e,t){this.values={},this._geometry=void 0,this._pbfGeometry=null;const s=t.keys,o=t.values,r=e.asUnsafe();for(;r.next();)switch(r.tag()){case 1:this.id=r.getUInt64();break;case 2:{const e=r.getMessage().asUnsafe(),t=this.values;for(;!e.empty();){const r=e.getUInt32(),a=e.getUInt32();t[s[r]]=o[a]}e.release();break}case 3:this.type=r.getUInt32();break;case 4:this._pbfGeometry=r.getMessage();break;default:r.skip()}}getGeometry(s){if(void 0!==this._geometry)return this._geometry;if(!this._pbfGeometry)return null;const o=this._pbfGeometry.asUnsafe();let r,a;this._pbfGeometry=null,s?s.reset(this.type):r=[];let n,i=t.moveTo,l=0,c=0,h=0;for(;!o.empty();){if(0===l){const e=o.getUInt32();i=7&e,l=e>>3}switch(l--,i){case t.moveTo:c+=o.getSInt32(),h+=o.getSInt32(),s?s.moveTo(c,h):r&&(a&&r.push(a),a=[],a.push(new e(c,h)));break;case t.lineTo:c+=o.getSInt32(),h+=o.getSInt32(),s?s.lineTo(c,h):a&&a.push(new e(c,h));break;case t.close:s?s.close():a&&!a[0].equals(c,h)&&a.push(a[0].clone());break;default:throw o.release(),new Error("Invalid path operation")}}return s?n=s.result():r&&(a&&r.push(a),n=r),o.release(),this._geometry=n,n}}export{s as default};