Layers.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. import Style from "ol/style/Style";
  2. import {deepClone} from '@/common/commonFun'
  3. import {Cluster, Vector as VectorSource} from 'ol/source.js';
  4. import { Vector as VectorLayer} from 'ol/layer.js';
  5. import {boundingExtent} from 'ol/extent.js';
  6. import {
  7. Circle as CircleStyle,
  8. Fill,
  9. Text,
  10. } from 'ol/style.js';
  11. import {unByKey} from 'ol/Observable';
  12. import ImageLayer from 'ol/layer/Image';
  13. import ImageStatic from 'ol/source/ImageStatic';
  14. import XYZLayer from "../../utils/ol-map/XYZLayer";
  15. import GeoJsonLayer from "../../utils/ol-map/GeoJsonLayer";
  16. import eventBus from "@/api/eventBus";
  17. import {VectorStyle} from "../../utils/ol-map/KMap";
  18. import StaticImgLayer from "../../utils/ol-map/StaticImgLayer";
  19. function getColorByVal(val, legendData) {
  20. for (let i = 0; i < legendData.level.length; i++) {
  21. if(legendData.level[i] instanceof Array){
  22. let [min, max] = legendData.level[i];
  23. if (val >= min && val <= max) {
  24. return legendData.colors[i];
  25. }
  26. }else{
  27. if(val === legendData.level[i]){
  28. return legendData.colors[i];
  29. }
  30. }
  31. }
  32. return undefined; // 如果 val 不在任何区间内,返回 undefined
  33. }
  34. /**
  35. * @description 全景化地图层对象
  36. */
  37. class StaticMapLayers {
  38. constructor(map, data){
  39. this.vectorStyle = new VectorStyle()
  40. this.layerData = {}
  41. this.cacheStyle = {}
  42. this.timeIndex = 0
  43. this.layerName = ""
  44. this.initStaticMapLayers(map,data)
  45. }
  46. initStaticMapLayers(map,data){
  47. let that = this
  48. if(data){
  49. that.initStaticMapLayer(map,data)
  50. }else{
  51. VE_API.warning.fetchWarningLayer({
  52. k: "static_map",
  53. resultType: "json",
  54. }).then(({data}) => {
  55. that.initStaticMapLayer(map,data)
  56. // that.autoTest()
  57. // 时间轴
  58. // eventBus.on("weatherTime:changeTime", ({index}) => {
  59. // this.timeIndex = index
  60. // this.show(this.layerName)
  61. // })
  62. })
  63. }
  64. }
  65. initStaticMapLayer(map,data){
  66. for(let key in data){
  67. let item = data[key]
  68. if(item.type === "xyz"){
  69. this.layerData[key] = {legend:item.legend, layer:this.addXyzLayer(map, item)}
  70. }else if(item.type === "geojson"){
  71. this.layerData[key] = {legend:item.legend, legendData:item.legendData, layer:this.addGeoJsonLayer(map, item, key)}
  72. }else if(item.type === "img"){
  73. this.layerData[key] = {legend:item.legend, layer:this.addStaticImgLayer(map, item)}
  74. }
  75. }
  76. }
  77. show(key,isFit = false){
  78. if (isFit) {
  79. this.timeIndex = 0
  80. }
  81. this.layerName = key
  82. this.hideAll()
  83. let keyText = key+this.timeIndex
  84. let layer = this.layerData[keyText].layer
  85. eventBus.emit("alarmList:changeMapLayer", {legendUrl:layer.layer.get("legend"),
  86. colors:layer.layer.get("colors"), labels:layer.layer.get("labels")});
  87. layer.show()
  88. if(isFit && layer.layer.getExtent){
  89. let extent = layer.layer.getExtent();
  90. if(extent && extent[0] != Infinity){
  91. layer.mapInstance.fit(extent,{padding:[-200,-200,-200,-200]})
  92. }
  93. }
  94. }
  95. showSingle(key,isFit = false,hideOther = true){
  96. console.log('layerData', key, this.layerData,);
  97. if(!this.layerData[key]){
  98. return;
  99. }
  100. this.layerName = key
  101. hideOther && this.hideAll()
  102. let layer = this.layerData[key].layer
  103. eventBus.emit("alarmList:changeMapLayer", {legendUrl:layer.layer.get("legend"),
  104. colors:layer.layer.get("colors"), labels:layer.layer.get("labels")});
  105. layer.show()
  106. if(isFit && layer.layer.getExtent){
  107. let extent = layer.layer.getExtent();
  108. if(extent && extent[0] != Infinity){
  109. layer.mapInstance.fit(extent,{padding:layer.layer.get("padding") || [200,400,200,200]})
  110. }
  111. }
  112. }
  113. hideByKey(key){
  114. let layer = this.layerData[key].layer
  115. layer.hide()
  116. }
  117. hideAll(){
  118. for(let key in this.layerData){
  119. this.hideByKey(key)
  120. }
  121. }
  122. removeLayers(map){
  123. for(let key in this.layerData){
  124. let layer = this.layerData[key].layer
  125. map.removeLayer(layer)
  126. }
  127. this.layerData = {}
  128. }
  129. addStaticImgLayer(map, item){
  130. if(!item["opacity"]){
  131. item["opacity"] = 0.5
  132. }
  133. let imgLayer = new StaticImgLayer(item.url, item, 5, map);
  134. imgLayer.hide()
  135. if(item.legendData){
  136. imgLayer.layer.set("colors", item.legendData.colors)
  137. imgLayer.layer.set("labels", item.legendData.label)
  138. }
  139. imgLayer.layer.set("legend", item.legend)
  140. return imgLayer
  141. }
  142. addXyzLayer(map, item){
  143. let xyz = new XYZLayer(item.url, item, 3, map);
  144. xyz.hide()
  145. return xyz
  146. }
  147. addGeoJsonLayer(map, item, key){
  148. let that = this
  149. item["style"] = function(feature){
  150. let val = feature.get(item.legendData.paramKey)
  151. let cacheKey = `${key}_${item.legendData.paramKey}_${val}`
  152. let style = that.cacheStyle[cacheKey]
  153. if(!style){
  154. let color = getColorByVal(val, item.legendData)
  155. let fillColor = color
  156. let strokeColor = color
  157. style = that.vectorStyle.getPolygonStyle(fillColor, "#000000", 1)
  158. that.cacheStyle[cacheKey] = style
  159. }
  160. return style
  161. }
  162. let geoJsonLayer = new GeoJsonLayer(item.url, item, 3, map);
  163. geoJsonLayer.layer.set("colors", item.legendData.colors)
  164. geoJsonLayer.layer.set("labels", item.legendData.label)
  165. geoJsonLayer.hide()
  166. return geoJsonLayer
  167. }
  168. autoTest(){
  169. let that = this
  170. let keys = []
  171. for(let key in that.layerData){
  172. keys.push(key)
  173. }
  174. let index = 0
  175. setTimeout(() => {
  176. that.showSingle("从化地块日温",true)
  177. index = (index + 1) % keys.length
  178. }, 2000);
  179. }
  180. }
  181. export default StaticMapLayers