UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 6.29 kB
import e from"../../../core/Error.js";import{isSome as t}from"../../../core/maybe.js";import s from"../../../core/pbf.js";import r from"../../../layers/graphics/OptimizedGeometry.js";import{OPTIMIZED_GEOMETRY_TYPES as a}from"./pbfOptimizedFeatureSet.js";const n=["esriFieldTypeSmallInteger","esriFieldTypeInteger","esriFieldTypeSingle","esriFieldTypeDouble","esriFieldTypeString","esriFieldTypeDate","esriFieldTypeOID","esriFieldTypeGeometry","esriFieldTypeBlob","esriFieldTypeRaster","esriFieldTypeGUID","esriFieldTypeGlobalID","esriFieldTypeXML"],o=["sqlTypeBigInt","sqlTypeBinary","sqlTypeBit","sqlTypeChar","sqlTypeDate","sqlTypeDecimal","sqlTypeDouble","sqlTypeFloat","sqlTypeGeometry","sqlTypeGUID","sqlTypeInteger","sqlTypeLongNVarchar","sqlTypeLongVarbinary","sqlTypeLongVarchar","sqlTypeNChar","sqlTypeNVarchar","sqlTypeOther","sqlTypeReal","sqlTypeSmallInt","sqlTypeSqlXml","sqlTypeTime","sqlTypeTimestamp","sqlTypeTimestamp2","sqlTypeTinyInt","sqlTypeVarbinary","sqlTypeVarchar"],i=["upperLeft","lowerLeft"];function c(e){return e>=n.length?null:n[e]}function l(e){return e>=o.length?null:o[e]}function g(e){return e>=i.length?null:i[e]}function p(e,t){return t>=e.geometryTypes.length?null:e.geometryTypes[t]}function u(e,t,s){const r=3,a=e.asUnsafe(),n=t.createPointGeometry(s);for(;a.next();)switch(a.tag()){case r:{const e=a.getUInt32(),s=a.pos()+e;let r=0;for(;a.pos()<s;)t.addCoordinatePoint(n,a.getSInt64(),r++);break}default:a.skip()}return n}function f(e,t,s){const r=2,a=3,n=e.asUnsafe(),o=t.createGeometry(s),i=2+(s.hasZ?1:0)+(s.hasM?1:0);for(;n.next();)switch(n.tag()){case r:{const e=n.getUInt32(),s=n.pos()+e;let r=0;for(;n.pos()<s;)t.addLength(o,n.getUInt32(),r++);break}case a:{const e=n.getUInt32(),s=n.pos()+e;let r=0;for(t.allocateCoordinates(o);n.pos()<s;)t.addCoordinate(o,n.getSInt64(),r),r++,r===i&&(r=0);break}default:n.skip()}return o}function y(e){const t=1,s=2,n=3,o=e.asUnsafe(),i=new r;let c="esriGeometryPoint";for(;o.next();)switch(o.tag()){case s:{const e=o.getUInt32(),t=o.pos()+e;for(;o.pos()<t;)i.lengths.push(o.getUInt32());break}case n:{const e=o.getUInt32(),t=o.pos()+e;for(;o.pos()<t;)i.coords.push(o.getSInt64());break}case t:c=a[o.getEnum()];break;default:o.skip()}return{queryGeometry:i,queryGeometryType:c}}function b(e){const t=1,s=2,r=3,a=4,n=5,o=6,i=7,c=8,l=9,g=e.asUnsafe();for(;g.next();)switch(g.tag()){case t:return g.getString();case s:return g.getFloat();case r:return g.getDouble();case a:return g.getSInt32();case n:return g.getUInt32();case o:return g.getInt64();case i:return g.getUInt64();case c:return g.getSInt64();case l:return g.getBool();default:return g.skip(),null}return null}function k(e){const t=1,s=2,r=3,a=4,n=5,o=6,i=e.asUnsafe(),g={type:c(0)};for(;i.next();)switch(i.tag()){case t:g.name=i.getString();break;case s:g.type=c(i.getEnum());break;case r:g.alias=i.getString();break;case a:g.sqlType=l(i.getEnum());break;case n:i.skip();break;case o:g.defaultValue=i.getString();break;default:i.skip()}return g}function d(e){const t=1,s=2,r={},a=e.asUnsafe();for(;a.next();)switch(a.tag()){case t:r.name=a.getString();break;case s:r.isSystemMaintained=a.getBool();break;default:a.skip()}return r}function m(e,t,s,r){const a=1,n=2,o=4,i=t.createFeature(s);let c=0;for(;e.next();)switch(e.tag()){case a:{const t=r[c++].name;i.attributes[t]=e.processMessage(b);break}case n:i.geometry=e.processMessageWithArgs(f,t,s);break;case o:i.centroid=e.processMessageWithArgs(u,t,s);break;default:e.skip()}return i}function h(e){const t=1,s=2,r=3,a=4,n=[1,1,1,1],o=e.asUnsafe();for(;o.next();)switch(o.tag()){case t:n[0]=o.getDouble();break;case s:n[1]=o.getDouble();break;case a:n[2]=o.getDouble();break;case r:n[3]=o.getDouble();break;default:o.skip()}return n}function T(e){const t=1,s=2,r=3,a=4,n=[0,0,0,0],o=e.asUnsafe();for(;o.next();)switch(o.tag()){case t:n[0]=o.getDouble();break;case s:n[1]=o.getDouble();break;case a:n[2]=o.getDouble();break;case r:n[3]=o.getDouble();break;default:o.skip()}return n}function q(e){const t=1,s=2,r=3,a={originPosition:g(0)},n=e.asUnsafe();for(;n.next();)switch(n.tag()){case t:a.originPosition=g(n.getEnum());break;case s:a.scale=n.processMessage(h);break;case r:a.translate=n.processMessage(T);break;default:n.skip()}return a}function I(e){const t=1,s=2,r=3,a={},n=e.asUnsafe();for(;n.next();)switch(n.tag()){case t:a.shapeAreaFieldName=n.getString();break;case s:a.shapeLengthFieldName=n.getString();break;case r:a.units=n.getString();break;default:n.skip()}return a}function F(e,t){const s=1,r=2,a=3,n=4,o=5,i=t.createSpatialReference();for(;e.next();)switch(e.tag()){case s:i.wkid=e.getUInt32();break;case o:i.wkt=e.getString();break;case r:i.latestWkid=e.getUInt32();break;case a:i.vcsWkid=e.getUInt32();break;case n:i.latestVcsWkid=e.getUInt32();break;default:e.skip()}return i}function U(e,t){const s=1,r=2,a=3,n=4,o=5,i=7,c=8,l=9,g=10,u=11,f=12,y=13,b=15,h=t.createFeatureResult(),T=e.asUnsafe();h.geometryType=p(t,0);let U=!1;for(;T.next();)switch(T.tag()){case s:h.objectIdFieldName=T.getString();break;case a:h.globalIdFieldName=T.getString();break;case n:h.geohashFieldName=T.getString();break;case o:h.geometryProperties=T.processMessage(I);break;case i:h.geometryType=p(t,T.getEnum());break;case c:h.spatialReference=T.processMessageWithArgs(F,t);break;case g:h.hasZ=T.getBool();break;case u:h.hasM=T.getBool();break;case f:h.transform=T.processMessage(q);break;case l:{const e=T.getBool();h.exceededTransferLimit=e;break}case y:t.addField(h,T.processMessage(k));break;case b:U||(t.prepareFeatures(h),U=!0),t.addFeature(h,T.processMessageWithArgs(m,t,h,h.fields));break;case r:h.uniqueIdField=T.processMessage(d);break;default:T.skip()}return t.finishFeatureResult(h),h}function S(e,s){const r=1,a=4,n={};let o=null;for(;e.next();)switch(e.tag()){case a:o=e.processMessageWithArgs(y);break;case r:n.featureResult=e.processMessageWithArgs(U,s);break;default:e.skip()}return t(o)&&n.featureResult&&s.addQueryGeometry(n,o),n}function w(t,r){try{const e=2,a=new s(new Uint8Array(t),new DataView(t)),n={};for(;a.next();)if(a.tag()===e)n.queryResult=a.processMessageWithArgs(S,r);else a.skip();return n}catch(a){throw new e("query:parsing-pbf","Error while parsing FeatureSet PBF payload",{error:a})}}export{w as parseFeatureQuery,c as parseFieldType,q as parseTransform};