@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.65 kB
JavaScript
import has from"../../../../../../core/has.js";import{isSome as e,unwrap as t}from"../../../../../../core/maybe.js";import r from"../../../../../../core/workers/Connection.js";import{toQuantizationTransform as s}from"../../../../../../geometry/support/quantizationUtils.js";import{convertFromFeatureSet as i,quantizeOptimizedFeatureSet as a}from"../../../../../../layers/graphics/featureConversionUtils.js";import{queryOptimizedFeatureSet as o}from"../../../../../../layers/ogc/ogcFeatureUtils.js";import{executeQueryPBFBuffer as n,executeQuery as c}from"../../../../../../rest/query/operations/query.js";import{FeatureSetReaderJSON as u}from"../../support/FeatureSetReaderJSON.js";import{FeatureSetReaderPBF as m}from"../../support/FeatureSetReaderPBF.js";class p{constructor(e){this.service=e}destroy(){}}function f(e){return Array.isArray(e.source)}function l(e){return"ogc-source"===e?.type}function y(e){const{capabilities:t}=e;return l(e.source)?new q(e):f(e)?new d(e):t.query.supportsFormatPBF&&has("featurelayer-pbf")?new v(e):new F(e)}async function h(e){const t=new r;return await t.open(e,{}),t}class d extends p{constructor(e){super(e),this._portsOpen=h(e.source).then((e=>this.client=e))}destroy(){this.client.close(),this.client=null}async executeQuery(e,t){await this._portsOpen;const r=await this.client.invoke("queryFeatures",e.toJSON(),t);return u.fromFeatureSet(r,this.service)}}class v extends p{async executeQuery(e,t){const{data:r}=await n(this.service.source,e,t),s=!e.quantizationParameters;return m.fromBuffer(r,this.service,s)}}class F extends p{async executeQuery(r,o){const{source:n,capabilities:m,spatialReference:p,objectIdField:f,geometryType:l}=this.service;if(e(r.quantizationParameters)&&!m.query.supportsQuantization){const e=r.clone(),m=s(t(e.quantizationParameters));e.quantizationParameters=null;const{data:l}=await c(n,e,p,o),y=i(l,f);return a(m,y),u.fromOptimizedFeatureSet(y,this.service)}const{data:y}=await c(n,r,this.service.spatialReference,o);return"esriGeometryPoint"===l&&(y.features=y.features?.filter((t=>{if(e(t.geometry)){const e=t.geometry;return Number.isFinite(e.x)&&Number.isFinite(e.y)}return!0}))),u.fromFeatureSet(y,this.service)}}class q extends p{async executeQuery(e,r){const{capabilities:i}=this.service;if(e.quantizationParameters&&!i.query.supportsQuantization){const i=e.clone(),n=s(t(i.quantizationParameters));i.quantizationParameters=null;const c=await o(this.service.source,e,r);return a(n,c),u.fromOptimizedFeatureSet(c,this.service)}const n=await o(this.service.source,e,r);return u.fromOptimizedFeatureSet(n,this.service)}}export{p as SourceAdapter,y as createSourceAdapter};