@deck.gl/arcgis
Version:
Use deck.gl as a custom ArcGIS API for JavaScript layer
50 lines • 2.18 kB
JavaScript
// deck.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
import createDeckProps from "./deck-props.js";
import createDeckLayer from "./deck-layer.js";
import createDeckLayerView2D from "./deck-layer-view-2d.js";
import createDeckRenderer from "./deck-renderer.js";
import { loadModules as esriLoaderLoadModules } from 'esri-loader';
let arcGIS;
export async function loadArcGISModules(modules, loadScriptOptions) {
const namespace = Array.isArray(modules) ? null : modules;
await loadArcGISModule(namespace, loadScriptOptions);
if (Array.isArray(modules)) {
return esriLoaderLoadModules(modules, loadScriptOptions).then(array => {
return { ...arcGIS, modules: array };
});
}
return arcGIS;
}
async function loadArcGISModule(esri, loadScriptOptions) {
if (arcGIS) {
// Already loaded
return arcGIS;
}
if (esri) {
// Using user-provided dependencies
// Right now this object has to be manually assembled - let @arcgis/webpack-plugin handle this?
const Layer = esri.layers.Layer;
const Accessor = esri.core.Accessor;
const BaseLayerViewGL2D = esri.views['2d'].layers.BaseLayerViewGL2D;
const externalRenderers = esri.views['3d'].externalRenderers;
return initialize(Layer, Accessor, BaseLayerViewGL2D, externalRenderers);
}
const [Layer, Accessor, BaseLayerViewGL2D, externalRenderers] = await esriLoaderLoadModules([
'esri/layers/Layer',
'esri/core/Accessor',
'esri/views/2d/layers/BaseLayerViewGL2D',
'esri/views/3d/externalRenderers'
], loadScriptOptions);
return initialize(Layer, Accessor, BaseLayerViewGL2D, externalRenderers);
}
function initialize(Layer, Accessor, BaseLayerViewGL2D, externalRenderers) {
const DeckProps = createDeckProps(Accessor);
const DeckLayerView2D = createDeckLayerView2D(BaseLayerViewGL2D);
const DeckLayer = createDeckLayer(DeckProps, Layer, DeckLayerView2D);
const DeckRenderer = createDeckRenderer(DeckProps, externalRenderers);
arcGIS = { DeckLayer, DeckRenderer };
return arcGIS;
}
//# sourceMappingURL=load-modules.js.map