arcgis-js-api 与 ts 优雅结合使用 (工厂模式+策略模式)

博客围绕ArcGIS与TS开发展开,提到ArcGIS由TS开发,但打包情况不佳,需用esri - loader加载,作者思考能否有更优雅的方式,还提及策略类、工厂类以及使用ESRI对象(ArcGIS提供的TS)。

众所周知, arcgis都是ts开发出来的, 打包出来的东西, 却是一言难尽. 必须得用esri-loader加载. 那么. 有没有办法优雅一点呢? 刚学了3天ts, 和arcgis的我放肆的想到!

策略类

enum FactoryStrategy {
    IntegratedMeshLayer = 'esri/layers/IntegratedMeshLayer',
    Map = 'esri/Map',
    SceneView = 'esri/views/SceneView',
    WebScene = 'esri/WebScene'
}
export default FactoryStrategy;

工厂类

import esriLoader from 'esri-loader';
import FactoryStrategy from '../enum/FactoryStrategy';
let map: Map<string, any> = new Map();
export default class FactoryUtils {
    get<T>(name: FactoryStrategy, options: {}): T {
        let newClass = map.get(name);
        return new newClass(options)
    }

    static init() {
        return new Promise((resolve, reject) => {
            let arr: [] = []
            for (let key in FactoryStrategy) {
                // @ts-ignore
                arr.push(FactoryStrategy[key])
            }
            esriLoader.loadModules(arr).then((arr1) => {
                for (let i = 0; i < arr.length; i++) {
                    map.set(arr[i], arr1[i]);
                }
                resolve()
            })
        })
    }
}

使用 (ESRI对象是arcgis提供的ts)

Factory.init().then(() => {
            this.webScene = this.factory.get<ESRI.WebScene>(FactoryStrategy.WebScene, {
                portalItem: {
                    id: "95d51825f62b4b738a3a12d5e518dea3"
                }
            });
            this.map = this.factory.get<ESRI.Map>(FactoryStrategy.Map, mapProperties);
            this.scene = this.factory.get<ESRI.SceneView>(FactoryStrategy.SceneView, {
                container: container,
                map: this.webScene,
                qualityProfile: "high"
            });
            this.scene.on('resize', e => {
                console.log(e, " 复位size")
            })
            this.map.allLayers.on('change', e => {
                console.log(e, ' e')
            })
        })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值