/* eslint-disable no-debugger */ import AjaxUtils from '@/utils/AjaxUtils' /** * 底图管理助手,负责底图创建及开关 */ class BasemapHelper { constructor (options) { this.map = options.map this.L = window.L this.basemapList = [] this.basemapMap = new Map() this.basemapLayerGroup = this.L.layerGroup().addTo(options.map) } /** * 该方法负责各种底图加载到地图上 * @param map * @param defBasemapName 初始化完成后,默认显示的图层 */ initBasemap = (mapConfig, isIntranet) => { if (isIntranet) { // 内网 this._getToken(mapConfig) // 获取token后,并按配置加载地图 } else { // 外网 this._createBasemapByConfig(mapConfig) } return this.basemapMap } /** * 获取所有的底图列表 * @returns {null} 结构:[{名称, 图层引用}] */ getBasemapList = () => { return this.basemapList } /** * 通过名称获取底图对象 * @param map 结构:[{名称, 图层引用}] * @param code 名称 */ getBasemap = (map, code) => { return this.basemapMap.get(code) } /** * 显示某个图层 * @param layer 待显示图层引用 * @param isHideOthers 是否先关闭其他图层,默认是true */ showBasemap = (code, showAnnotation, isHideOthers = true) => { const basemap = this.basemapMap.get(code) if (isHideOthers) { this.basemapLayerGroup.clearLayers() } this.basemapLayerGroup.addLayer(basemap.layer) if (showAnnotation) { this.basemapLayerGroup.addLayer(basemap.annotation) } } /** * 隐藏某个图层 * @param layer 待关闭图层引用 */ hideBasemap = (code) => { const basemap = this.basemapMap.get(code) this.map.removeLayer(basemap.layer) this.map.removeLayer(basemap.annotation) } // 公网创建地图部分 _createBasemapByConfig (mapConfig) { const internetBasemaps = mapConfig.mapConfig.InternetBaseMaps for (let i = 0, len = internetBasemaps.length; i < len; ++i) { const basemapConfig = internetBasemaps[i] const basemapLayer = this.L.tileLayer(basemapConfig.map.url, basemapConfig.map.option) const basemapAnnotationLayer = this.L.tileLayer(basemapConfig.annotation.url, basemapConfig.annotation.option) const basemap = { code: basemapConfig.code, name: basemapConfig.name, conf: basemapConfig, layer: basemapLayer, annotation: basemapAnnotationLayer } this.basemapList.push(basemap) this.basemapMap.set(basemapConfig.code, basemap) if (typeof basemapConfig.isAddToMap !== 'undefined' && basemapConfig.isAddToMap) { this.basemapLayerGroup.addLayer(basemapLayer) this.basemapLayerGroup.addLayer(basemapAnnotationLayer) } } } // 内网地图创建部分 // 获取内网地图token,并加载到地图中 _getToken = (mapConfig) => { const params = mapConfig.TokenConfig AjaxUtils.GetDataAsynByUrl(params.url, params.option, (token) => { this._showTDT(token, mapConfig) }) } // 内网地图加载,并加载到地图 _showTDT = (token, mapConfig) => { const intranetBasemaps = mapConfig.mapConfig.IntranetBaseMaps for (let i = 0, len = intranetBasemaps.length; i < len; ++i) { const basemapConfig = intranetBasemaps[i] const basemapLayer = this.L.tileLayer(basemapConfig.map.url, basemapConfig.map.option) const basemapAnnotationLayer = this.L.tileLayer(basemapConfig.annotation.url, basemapConfig.annotation.option) const basemap = { code: basemapConfig.code, name: basemapConfig.name, conf: basemapConfig, layer: basemapLayer, annotation: basemapAnnotationLayer } this.basemapList.push(basemap) this.basemapMap.set(basemapConfig.code, basemap) if (typeof basemapConfig.isAddToMap !== 'undefined' && basemapConfig.isAddToMap) { this.basemapLayerGroup.addLayer(basemapLayer) this.basemapLayerGroup.addLayer(basemapAnnotationLayer) } } } } export default BasemapHelper