UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 5.54 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import e from"../../core/Error.js";import{findAssociatedFeatureService as a}from"../../layers/support/associatedFeatureServiceUtils.js";import{getLayerModuleType as r}from"../../layers/support/fetchService.js";import{LayerLoadContext as t}from"../../layers/support/LayerLoadContext.js";import{sceneServiceLayerTypeToClassName as s}from"../../layers/support/layerUtils.js";import{layerLookupMap as n}from"../../layers/support/lazyLayerLoader.js";import c from"../PortalItem.js";import{getFirstLayerOrTable as o,getNumLayersAndTables as i,preprocessFSItemData as u,getLayerOrTable as l,layerTypeToLayerModuleType as m,populateSceneServiceItemData as y}from"./loadUtils.js";import{hasTypeKeyword as f}from"./portalItemUtils.js";async function p(e){let{portalItem:a}=e;!a||a instanceof c||(a=new c(a));const r=await d(a);return new(0,r.constructor)({portalItem:a,...r.properties})}async function d(e){await e.load();const a=new t;return w(await L(e,a))}async function L(a,r){switch(a.type){case"3DTiles Service":return a.typeKeywords.includes("3DObject")?C():T();case"CSV":return G();case"Feature Collection":return v(a);case"Feature Service":return S(a,r);case"Feed":return D();case"GeoJson":return j();case"Group Layer":return O();case"Image Service":return I(a,r);case"KML":return P();case"Knowledge Graph Layer":return F();case"Map Service":return N(a,r);case"Media Layer":return V();case"Scene Service":return h(a,r);case"Stream Service":return M();case"Vector Tile Service":return g();case"WCS":return b();case"WFS":return K();case"WMS":return W();case"WMTS":return U();default:throw new e("portal:unknown-item-type","Unknown item type '${type}'",{type:a.type})}}async function w(e){const a=e.className,r=n[a];return{constructor:await r(),properties:e.properties}}async function N(e,a){return await x(e,a)?{className:"TileLayer"}:{className:"MapImageLayer"}}async function S(e,a){const r=await J(e,a);if("object"==typeof r){const{sourceJSON:e,className:a}=r,t={sourceJSON:e};return null!=r.id&&(t.layerId=r.id),{className:a||"FeatureLayer",properties:t}}return{className:"GroupLayer"}}async function h(e,r){const t=await J(e,r,(async()=>{try{if(!e.url)return[];const{serverUrl:t}=await a(e.url,{sceneLayerItem:e}),s=await r.fetchServiceMetadata(t);return s?.tables??[]}catch{return[]}}));if("object"==typeof t){const a={};let n;if(null!=t.id?(a.layerId=t.id,n=`${e.url}/layers/${t.id}`):n=e.url,e.typeKeywords?.length)for(const r of Object.keys(s))if(e.typeKeywords.includes(r))return{className:s[r]};const c=await r.fetchServiceMetadata(n,{customParameters:await r.fetchCustomParameters(e,(e=>o(e)?.customParameters))});return{className:s[c?.layerType]||"SceneLayer",properties:a}}if(!1===t){const a=await r.fetchServiceMetadata(e.url);if("Voxel"===a?.layerType)return{className:"VoxelLayer"}}return{className:"GroupLayer"}}async function v(e){await e.load();const a=f(e,"Map Notes"),r=f(e,"Markup");if(a||r)return{className:"MapNotesLayer"};if(f(e,"Route Layer"))return{className:"RouteLayer"};const t=await e.fetchData();return 1===i(t)?{className:"FeatureLayer"}:{className:"GroupLayer"}}async function I(e,a){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 t=await a.fetchItemData(e),s=t?.layerType;if("ArcGISTiledImageServiceLayer"===s)return{className:"ImageryTileLayer"};if("ArcGISImageServiceLayer"===s)return{className:"ImageryLayer"};const n=await a.fetchServiceMetadata(e.url,{customParameters:await a.fetchCustomParameters(e)}),c=n.cacheType?.toLowerCase(),o=n.capabilities?.toLowerCase().includes("tilesonly"),i=n.tileInfo?.format?.toLowerCase()??"",u=null==c&&["jpg","jpeg","png","png8","png24","png32","mixed"].includes(i);return"map"===c||u||o?{className:"ImageryTileLayer"}:{className:"ImageryLayer"}}function M(){return{className:"StreamLayer"}}function g(){return{className:"VectorTileLayer"}}function j(){return{className:"GeoJSONLayer"}}function T(){return{className:"IntegratedMesh3DTilesLayer"}}function C(){return{className:"UnsupportedLayer"}}function G(){return{className:"CSVLayer"}}function P(){return{className:"KMLLayer"}}function F(){return{className:"KnowledgeGraphLayer"}}function b(){return{className:"WCSLayer"}}function K(){return{className:"WFSLayer"}}function W(){return{className:"WMSLayer"}}function U(){return{className:"WMTSLayer"}}function D(){return{className:"StreamLayer"}}function O(){return{className:"GroupLayer"}}function V(){return{className:"MediaLayer"}}async function x(e,a){const{tileInfo:r}=await a.fetchServiceMetadata(e.url,{customParameters:await a.fetchCustomParameters(e)});return r}async function J(e,a,t){const{url:s,type:n}=e,c="Feature Service"===n;if(!s)return{};if(/\/\d+$/.test(s)){if(c){const t=await a.fetchServiceMetadata(s,{customParameters:await a.fetchCustomParameters(e,(e=>o(e)?.customParameters))});return{id:t.id,className:r(t.type),sourceJSON:t}}return{}}await e.load();let f=await a.fetchItemData(e);if(c){const e=await u(f,s,a),r=k(e);if("object"==typeof r){const a=l(e,r.id);r.className=m(a?.layerType)}return r}"Scene Service"===n&&(f=await y(e,f,a));if(i(f)>0)return k(f);const p=await a.fetchServiceMetadata(s);return t&&(p.tables=await t()),k(p)}function k(e){return 1===i(e)&&{id:o(e)?.id}}export{p as fromItem,L as selectLayerClassPath};