import Style from "ol/style/Style"; import {deepClone} from '@/common/commonFun' import {Cluster, Vector as VectorSource} from 'ol/source.js'; import { Vector as VectorLayer} from 'ol/layer.js'; import {boundingExtent} from 'ol/extent.js'; import { Circle as CircleStyle, Fill, Text, } from 'ol/style.js'; import {unByKey} from 'ol/Observable'; import ImageLayer from 'ol/layer/Image'; import ImageStatic from 'ol/source/ImageStatic'; import XYZLayer from "../../utils/ol-map/XYZLayer"; import GeoJsonLayer from "../../utils/ol-map/GeoJsonLayer"; import eventBus from "@/api/eventBus"; import {VectorStyle} from "../../utils/ol-map/KMap"; import StaticImgLayer from "../../utils/ol-map/StaticImgLayer"; function getColorByVal(val, legendData) { for (let i = 0; i < legendData.level.length; i++) { let [min, max] = legendData.level[i]; if (val >= min && val <= max) { return legendData.colors[i]; } } return undefined; // 如果 val 不在任何区间内,返回 undefined } /** * @description 全景化地图层对象 */ class StaticMapLayers { constructor(map){ this.initStaticMapLayers(map) this.vectorStyle = new VectorStyle() this.layerData = {} this.cacheStyle = {} } initStaticMapLayers(map){ let that = this VE_API.warning.fetchWarningLayer({ k: "static_map", resultType: "json", }).then(({data}) => { for(let key in data){ let item = data[key] if(item.type === "xyz"){ that.layerData[key] = {legend:item.legend, layer:that.addXyzLayer(map, item)} }else if(item.type === "geojson"){ that.layerData[key] = {legend:item.legend, legendData:item.legendData, layer:that.addGeoJsonLayer(map, item, key)} }else if(item.type === "img"){ that.layerData[key] = {legend:item.legend, layer:that.addStaticImgLayer(map, item)} } } // that.autoTest() }) } show(key){ this.hideAll() let layer = this.layerData[key].layer eventBus.emit("alarmList:changeMapLayer", {legendUrl:this.layerData[key].legend}); layer.show() } hideAll(){ for(let key in this.layerData){ let layer = this.layerData[key].layer layer.hide() } } addStaticImgLayer(map, item){ let imgLayer = new StaticImgLayer(item.url, item, 3, map); imgLayer.hide() return imgLayer } addXyzLayer(map, item){ let xyz = new XYZLayer(item.url, item, 3, map); xyz.hide() return xyz } addGeoJsonLayer(map, item, key){ let that = this item["style"] = function(feature){ let val = feature.get(item.legendData.paramKey) let cacheKey = `${key}_${item.legendData.paramKey}_${val}` let style = that.cacheStyle[cacheKey] if(!style){ let color = getColorByVal(val, item.legendData) let fillColor = color let strokeColor = color style = that.vectorStyle.getPolygonStyle(fillColor, strokeColor, 1) that.cacheStyle[cacheKey] = style } return style } let geoJsonLayer = new GeoJsonLayer(item.url, item, 3, map); geoJsonLayer.hide() return geoJsonLayer } autoTest(){ let that = this let keys = [] for(let key in that.layerData){ keys.push(key) } let index = 0 setInterval(() => { that.show(keys[index]) index = (index + 1) % keys.length }, 1000); } } export default StaticMapLayers