派生自 wuyushui/SewerAndRainNetwork

YANGDL
2021-01-09 da21171cc9b248ad9c7f062e41f039eceb910c23
src/components/helpers/BasemapHelper.js
@@ -1,58 +1,133 @@
/* eslint-disable no-debugger */
import AjaxUtils from '@/utils/AjaxUtils'
/**
 * 底图管理助手,负责底图创建及开关
 */
function BasemapHelper(map, L) {
    this.map = map
    this.L = L
class BasemapHelper {
  constructor (options) {
    this.map = options.map
    this.L = options.L
    this.basemapList = []
    this.basemapMap = new Map()
    this.basemapLayerGroup = options.L.layerGroup().addTo(options.map)
  }
    /**
     * 该方法负责各种底图加载到地图上
     * @param map
     * @param defBasemapName 初始化完成后,默认显示的图层
     */
    this.initBasemap = (map, defBasemapName) => {
        console.log(map, defBasemapName)
        // todo 创建完以后,把图层都放到basemapList对象保存起来,方便其他接口调用
    initBasemap = (mapConfig, isIntranet) => {
      if (isIntranet) { // 内网
        this._getToken(mapConfig) // 获取token后,并按配置加载地图
      } else { // 外网
        this._createBasemapByConfig(mapConfig)
      }
        return null
      return this.basemapMap
    }
    /**
     * 获取所有的底图列表
     * @returns {null} 结构:[{名称, 图层引用}]
     */
    this.getBasemapList = (map) => {
        console.log(map)
        return null
    getBasemapList = () => {
      return this.basemapList
    }
    /**
     * 通过名称获取底图对象
     * @param map 结构:[{名称, 图层引用}]
     * @param name 名称
     * @param code 名称
     */
    this.getBasemap = (map, name) => {
        console.log(map, name)
    getBasemap = (map, code) => {
      return this.basemapMap.get(code)
    }
    /**
     * 显示某个图层
     * @param map 地图对象
     * @param layer 待显示图层引用
     * @param isHideOthers 是否先关闭其他图层,默认是true
     */
    this.showBasemap = (map, layer, isHideOthers) => {
        console.log(map, layer, isHideOthers)
    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 map 地图对象
     * @param layer 待关闭图层引用
     */
    this.hideBasemap = (map, layer) => {
        console.log(map, 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)
        }
      }
    }
}