@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 4.05 kB
JavaScript
import e from"../../core/Error.js";import{sceneServiceLayerTypeToClassName as r}from"../../layers/support/layerUtils.js";import{layerLookupMap as a}from"../../layers/support/lazyLayerLoader.js";import t from"../PortalItem.js";import{getNumLayersAndTables as s,preprocessFSItemData as n,getSubtypeGroupLayerIds as c,getFirstLayerOrTableId as o}from"./layersLoader.js";import{hasTypeKeyword as i}from"./portalItemUtils.js";import{fetchArcGISServiceJSON as u}from"../../support/requestPresets.js";async function l(e){!e.portalItem||e.portalItem instanceof t||(e={...e,portalItem:new t(e.portalItem)});const r=await y(e.portalItem);return new(0,r.constructor)({portalItem:e.portalItem,...r.properties})}async function y(e){await e.load();return p(await m(e))}async function m(r){switch(r.type){case"Map Service":return f(r);case"Feature Service":return L(r);case"Feature Collection":return w(r);case"Scene Service":return N(r);case"Image Service":return d(r);case"Stream Service":return S();case"Vector Tile Service":return I();case"GeoJson":return g();case"CSV":return T();case"KML":return v();case"WFS":return j();case"WMTS":return G();case"WMS":return M();case"Feed":return h();default:throw new e("portal:unknown-item-type","Unknown item type '${type}'",{type:r.type})}}async function p(e){const r=a[e.className];return{constructor:await r(),properties:e.properties}}async function f(e){return await b(e)?{className:"TileLayer"}:{className:"MapImageLayer"}}async function L(e){if(i(e,"Oriented Imagery Layer"))return F(e);const r=await C(e);if("object"==typeof r){const e={};return null!=r.id&&(e.layerId=r.id),{className:r.className||"FeatureLayer",properties:e}}return{className:"GroupLayer"}}async function N(e){const a=await C(e);if("object"==typeof a){const t={};let s;if(null!=a.id?(t.layerId=a.id,s=`${e.url}/layers/${a.id}`):s=e.url,e.typeKeywords?.length)for(const a of Object.keys(r))if(e.typeKeywords.includes(a))return{className:r[a]};const n=await u(s);return{className:r[n?.layerType]||"SceneLayer",properties:t}}if(!1===a){return"Voxel"===(await u(e.url))?.layerType?{className:"VoxelLayer"}:{className:"GroupLayer"}}return{className:"GroupLayer"}}async function w(e){await e.load();const r=i(e,"Map Notes"),a=i(e,"Markup");if(r||a)return{className:"MapNotesLayer"};if(i(e,"Route Layer"))return{className:"RouteLayer"};const t=await e.fetchData();return 1===s(t)?{className:"FeatureLayer"}:{className:"GroupLayer"}}async function d(e){await e.load();const r=e.typeKeywords?.map((e=>e.toLowerCase()))??[];if(r.includes("elevation 3d layer"))return{className:"ElevationLayer"};if(r.includes("tiled imagery"))return{className:"ImageryTileLayer"};const a=(await e.fetchData())?.layerType;if("ArcGISTiledImageServiceLayer"===a)return{className:"ImageryTileLayer"};if("ArcGISImageServiceLayer"===a)return{className:"ImageryLayer"};const t=await u(e.url),s=t.cacheType?.toLowerCase(),n=t.capabilities?.toLowerCase().includes("tilesonly");return"map"===s||n?{className:"ImageryTileLayer"}:{className:"ImageryLayer"}}function S(){return{className:"StreamLayer"}}function I(){return{className:"VectorTileLayer"}}function g(){return{className:"GeoJSONLayer"}}function T(){return{className:"CSVLayer"}}function v(){return{className:"KMLLayer"}}function j(){return{className:"WFSLayer"}}function M(){return{className:"WMSLayer"}}function G(){return{className:"WMTSLayer"}}function h(){return{className:"StreamLayer"}}async function F(e){await e.load();const r=await e.fetchData();return r.coverage?{className:"GroupLayer"}:{className:"OrientedImageryLayer",properties:r}}async function b(e){return(await u(e.url)).tileInfo}async function C(e){const r=e.url;if(!r||r.match(/\/\d+$/))return{};await e.load();const a=await e.fetchData();if("Feature Service"===e.type){const e=V(await n(a,r));if("object"==typeof e){const r=c(a);e.className=null!=e.id&&r.includes(e.id)?"SubtypeGroupLayer":"FeatureLayer"}return e}if(s(a)>0)return V(a);return V(await u(r))}function V(e){return 1===s(e)&&{id:o(e)}}export{l as fromItem,m as selectLayerClassPath};