UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 4.62 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import e from"../../../request.js";import{urlToObject as t,join as r}from"../../../core/urlUtils.js";import{getJsonType as n}from"../../../geometry/support/jsonUtils.js";import{normalizeCentralMeridian as i}from"../../../geometry/support/normalizeUtils.js";import{srToRESTValue as o}from"../../../geometry/support/spatialReferenceUtils.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 d(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,t,r){const i=e.geometry,a=e.toJSON();delete a.compactGeometryEnabled,delete a.defaultSpatialReferenceEnabled;const s=a;let u,l,y;if(i&&(l=i.spatialReference,y=o(l),s.geometryType=n(i),s.geometry=d(i,e.compactGeometryEnabled),s.inSR=y),a.groupByFieldsForStatistics&&(s.groupByFieldsForStatistics=a.groupByFieldsForStatistics.join(",")),a.objectIds)switch(r?.uniqueIdFields?.length){case void 0:s.objectIds=a.objectIds.join(",");break;case 1:s.uniqueIds=JSON.stringify(a.objectIds),delete s.objectIds;break;default:s.uniqueIds=JSON.stringify(a.objectIds.map((e=>JSON.parse(e)))),delete s.objectIds}if(a.orderByFields&&(s.orderByFields=a.orderByFields.join(",")),!a.outFields||!a.returnDistinctValues&&(t?.returnCountOnly||t?.returnExtentOnly||t?.returnIdsOnly)?delete s.outFields:a.outFields.includes("*")?s.outFields="*":s.outFields=a.outFields.join(","),a.outSR?(s.outSR=o(a.outSR),u=e.outSpatialReference):i&&(a.returnGeometry||a.returnCentroid)&&(s.outSR=s.inSR,u=l),a.returnGeometry&&delete a.returnGeometry,a.outStatistics&&(s.outStatistics=JSON.stringify(a.outStatistics)),a.fullText&&(s.fullText=JSON.stringify(a.fullText)),a.pixelSize&&(s.pixelSize=JSON.stringify(a.pixelSize)),a.quantizationParameters&&(e.defaultSpatialReferenceEnabled&&null!=l&&null!=e.quantizationParameters?.extent&&l.equals(e.quantizationParameters.extent.spatialReference)&&delete a.quantizationParameters.extent.spatialReference,s.quantizationParameters=JSON.stringify(a.quantizationParameters)),a.parameterValues&&(s.parameterValues=JSON.stringify(a.parameterValues)),a.rangeValues&&(s.rangeValues=JSON.stringify(a.rangeValues)),a.dynamicDataSource&&(s.layer=JSON.stringify({source:a.dynamicDataSource}),delete a.dynamicDataSource),a.timeExtent){const e=a.timeExtent,{start:t,end:r}=e;null==t&&null==r||(s.time=t===r?t:`${t??"null"},${r??"null"}`),delete a.timeExtent}return e.defaultSpatialReferenceEnabled&&null!=l&&null!=u&&l.equals(u)&&(s.defaultSR=s.inSR,delete s.inSR,delete s.outSR),s}async function c(e,t,r,n,i){const o=t.timeExtent?.isEmpty?{data:{features:[]}}:await g(e,t,"json",n,void 0,i);return u(t,r,o.data),o}async function f(e,t,r,n,i){if(t.timeExtent?.isEmpty)return{data:r.createFeatureResult()};const o=await m(e,t,n,i),a=o;return a.data=s(o.data,r),a}function m(e,t,r,n){return g(e,t,"pbf",r,void 0,n)}function p(e,t,r,n){return t.timeExtent?.isEmpty?Promise.resolve({data:{objectIds:[]}}):g(e,t,"json",r,{returnIdsOnly:!0},n)}function S(e,t,r,n){return t.timeExtent?.isEmpty?Promise.resolve({data:{count:0}}):g(e,t,"json",r,{returnIdsOnly:!0,returnCountOnly:!0},n)}async function O(e,t,r){if(t.timeExtent?.isEmpty)return{data:{count:0,extent:null}};const n=await g(e,t,"json",r,{returnExtentOnly:!0,returnCountOnly:!0}),i=n.data;if(i.hasOwnProperty("extent"))return n;if(i.features)throw new Error(l);if(i.hasOwnProperty("count"))throw new Error(l);return n}function x(e,t){if(!e.returnIdsOnly||!t.uniqueIdFields)return e;const r={...e,returnUniqueIdsOnly:!0};return delete r.returnIdsOnly,r}async function g(n,o,s,u={},l={},d={}){const c="string"==typeof n?t(n):n,f=o.geometry?[o.geometry]:[],m=await i(f,null,{signal:u.signal}),p=m?.[0];null!=p&&((o=o.clone()).geometry=p);const S=a({...c.query,f:s,...x(l,d),...y(o,l,d)});return e(r(c.path,j(o,l)?"query3d":"query"),{...u,responseType:"pbf"===s?"array-buffer":"json",query:{...S,...u.query}})}function j(e,t){return null!=e.formatOf3DObjects&&!(t.returnCountOnly||t.returnExtentOnly||t.returnIdsOnly)}export{d as encodeGeometry,c as executeQuery,S as executeQueryForCount,O as executeQueryForExtent,p as executeQueryForIds,f as executeQueryPBF,m as executeQueryPBFBuffer,y as queryToQueryStringParameters,g as runQuery};