UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 4.11 kB
import e from"../../../request.js";import{isSome as t}from"../../../core/maybe.js";import{urlToObject as r,join as n}from"../../../core/urlUtils.js";import{getJsonType as i}from"../../../geometry/support/jsonUtils.js";import{normalizeCentralMeridian as o}from"../../../geometry/support/normalizeUtils.js";import{mapParameters as a}from"../../operations/urlUtils.js";import{parsePBFFeatureQuery as s}from"./pbfQueryUtils.js";import{applyFeatureSetZUnitScaling as u}from"./queryZScale.js";const l="Layer does not support extent calculation.";function m(e,t){if(t&&"extent"===e.type)return`${e.xmin},${e.ymin},${e.xmax},${e.ymax}`;if(t&&"point"===e.type)return`${e.x},${e.y}`;const r=e.toJSON();return delete r.spatialReference,JSON.stringify(r)}function y(e,r){const n=e.geometry,o=e.toJSON();delete o.compactGeometryEnabled,delete o.defaultSpatialReferenceEnabled;const a=o;let s,u,l;if(t(n)&&(u=n.spatialReference,l=n.spatialReference.wkid||JSON.stringify(n.spatialReference),a.geometryType=i(n),a.geometry=m(n,e.compactGeometryEnabled),a.inSR=l),o.groupByFieldsForStatistics&&(a.groupByFieldsForStatistics=o.groupByFieldsForStatistics.join(",")),o.objectIds&&(a.objectIds=o.objectIds.join(",")),o.orderByFields&&(a.orderByFields=o.orderByFields.join(",")),!o.outFields||!o.returnDistinctValues&&(r?.returnCountOnly||r?.returnExtentOnly||r?.returnIdsOnly)?delete a.outFields:o.outFields.includes("*")?a.outFields="*":a.outFields=o.outFields.join(","),o.outSR?(a.outSR=o.outSR.wkid||JSON.stringify(o.outSR),s=e.outSpatialReference):n&&(o.returnGeometry||o.returnCentroid)&&(a.outSR=a.inSR,s=u),o.returnGeometry&&delete o.returnGeometry,o.outStatistics&&(a.outStatistics=JSON.stringify(o.outStatistics)),o.fullText&&(a.fullText=JSON.stringify(o.fullText)),o.pixelSize&&(a.pixelSize=JSON.stringify(o.pixelSize)),o.quantizationParameters&&(e.defaultSpatialReferenceEnabled&&t(u)&&t(e.quantizationParameters)&&t(e.quantizationParameters.extent)&&u.equals(e.quantizationParameters.extent.spatialReference)&&delete o.quantizationParameters.extent.spatialReference,a.quantizationParameters=JSON.stringify(o.quantizationParameters)),o.parameterValues&&(a.parameterValues=JSON.stringify(o.parameterValues)),o.rangeValues&&(a.rangeValues=JSON.stringify(o.rangeValues)),o.dynamicDataSource&&(a.layer=JSON.stringify({source:o.dynamicDataSource}),delete o.dynamicDataSource),o.timeExtent){const e=o.timeExtent,{start:t,end:r}=e;null==t&&null==r||(a.time=t===r?t:`${t??"null"},${r??"null"}`),delete o.timeExtent}return e.defaultSpatialReferenceEnabled&&t(u)&&t(s)&&u.equals(s)&&(a.defaultSR=a.inSR,delete a.inSR,delete a.outSR),a}async function c(e,r,n,i){const o=t(r.timeExtent)&&r.timeExtent.isEmpty?{data:{features:[]}}:await E(e,r,"json",i);return u(r,n,o.data),o}async function f(e,r,n,i){if(t(r.timeExtent)&&r.timeExtent.isEmpty)return{data:n.createFeatureResult()};const o=await d(e,r,i),a=o;return a.data=s(o.data,n),a}function d(e,t,r){return E(e,t,"pbf",r)}function p(e,r,n){return t(r.timeExtent)&&r.timeExtent.isEmpty?Promise.resolve({data:{objectIds:[]}}):E(e,r,"json",n,{returnIdsOnly:!0})}function S(e,r,n){return t(r.timeExtent)&&r.timeExtent.isEmpty?Promise.resolve({data:{count:0}}):E(e,r,"json",n,{returnIdsOnly:!0,returnCountOnly:!0})}function x(e,r,n){return t(r.timeExtent)&&r.timeExtent.isEmpty?Promise.resolve({data:{count:0,extent:null}}):E(e,r,"json",n,{returnExtentOnly:!0,returnCountOnly:!0}).then((e=>{const t=e.data;if(t.hasOwnProperty("extent"))return e;if(t.features)throw new Error(l);if(t.hasOwnProperty("count"))throw new Error(l);return e}))}function E(i,s,u,l={},m={}){const c="string"==typeof i?r(i):i,f=s.geometry?[s.geometry]:[];return l.responseType="pbf"===u?"array-buffer":"json",o(f,null,l).then((r=>{const i=r&&r[0];t(i)&&((s=s.clone()).geometry=i);const o=a({...c.query,f:u,...m,...y(s,m)});return e(n(c.path,"query"),{...l,query:{...o,...l.query}})}))}export{m as encodeGeometry,c as executeQuery,S as executeQueryForCount,x as executeQueryForExtent,p as executeQueryForIds,f as executeQueryPBF,d as executeQueryPBFBuffer,y as queryToQueryStringParameters,E as runQuery};