|
@@ -8,21 +8,148 @@ import WKT from "ol/format/WKT.js";
|
|
import ScaleLine from "ol/control/ScaleLine";
|
|
import ScaleLine from "ol/control/ScaleLine";
|
|
import { useRouter } from "vue-router";
|
|
import { useRouter } from "vue-router";
|
|
import eventBus from "@/api/eventBus";
|
|
import eventBus from "@/api/eventBus";
|
|
|
|
+import {VectorStyle} from "@/utils/ol-map/KMap";
|
|
|
|
+import XYZLayer from "@/utils/ol-map/XYZLayer";
|
|
|
|
+import GeoJsonLayer from "@/utils/ol-map/GeoJsonLayer";
|
|
|
|
+import StaticImgLayer from "@/utils/ol-map/StaticImgLayer";
|
|
/**
|
|
/**
|
|
* @description 地图层对象
|
|
* @description 地图层对象
|
|
*/
|
|
*/
|
|
|
|
+
|
|
|
|
+ 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
|
|
|
|
+}
|
|
class HomeMap {
|
|
class HomeMap {
|
|
constructor() {
|
|
constructor() {
|
|
let that = this;
|
|
let that = this;
|
|
let vectorStyle = new KMap.VectorStyle();
|
|
let vectorStyle = new KMap.VectorStyle();
|
|
this.vectorStyle = vectorStyle;
|
|
this.vectorStyle = vectorStyle;
|
|
|
|
+ this.vectorStyle11 = new VectorStyle()
|
|
|
|
+ this.layerData = {}
|
|
}
|
|
}
|
|
|
|
|
|
initMap(location, target) {
|
|
initMap(location, target) {
|
|
let level = 19.2;
|
|
let level = 19.2;
|
|
let coordinate = util.wktCastGeom(location).getFirstCoordinate();
|
|
let coordinate = util.wktCastGeom(location).getFirstCoordinate();
|
|
this.kmap = new KMap.Map(target, level, coordinate[0], coordinate[1], null, 6, 22);
|
|
this.kmap = new KMap.Map(target, level, coordinate[0], coordinate[1], null, 6, 22);
|
|
- eventBus.emit("homeMap:init", this.kmap);
|
|
|
|
|
|
+ this.initStaticMapLayers(this.kmap)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ 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"){
|
|
|
|
+ console.log('that.addStaticImgLayer(map, item)',that.addStaticImgLayer(map, item));
|
|
|
|
+ this.layerData[key] = {legend:item.legend, layer:that.addStaticImgLayer(map, item)}
|
|
|
|
+ console.log('that.layerData',this.layerData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ console.log('that.layerData',that.layerData);
|
|
|
|
+ // 时间轴
|
|
|
|
+ // eventBus.on("weatherTime:changeTime", ({index}) => {
|
|
|
|
+ // this.timeIndex = index
|
|
|
|
+ // this.show(this.layerName)
|
|
|
|
+ // })
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ show(key,isFit = false){
|
|
|
|
+ if (isFit) {
|
|
|
|
+ this.timeIndex = 0
|
|
|
|
+ }
|
|
|
|
+ this.layerName = key
|
|
|
|
+ this.hideAll()
|
|
|
|
+ let keyText = key+this.timeIndex
|
|
|
|
+ let layer = this.layerData[keyText].layer
|
|
|
|
+ // eventBus.emit("alarmList:changeMapLayer", {legendUrl:layer.layer.get("legend"),
|
|
|
|
+ // colors:layer.layer.get("colors"), labels:layer.layer.get("labels")});
|
|
|
|
+ layer.show()
|
|
|
|
+ if(isFit && layer.layer.getExtent){
|
|
|
|
+ let extent = layer.layer.getExtent();
|
|
|
|
+ if(extent && extent[0] != Infinity){
|
|
|
|
+ layer.mapInstance.fit(extent,{padding:[-200,-200,-200,-200]})
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ showSingle(key,isFit = false){
|
|
|
|
+ this.layerName = key
|
|
|
|
+ this.hideAll()
|
|
|
|
+ console.log('this.layerData',this.layerData);
|
|
|
|
+ let layer = this.layerData[key].layer
|
|
|
|
+ console.log('layer',layer);
|
|
|
|
+ // eventBus.emit("alarmList:changeMapLayer", {legendUrl:layer.layer.get("legend"),
|
|
|
|
+ // colors:layer.layer.get("colors"), labels:layer.layer.get("labels")});
|
|
|
|
+ layer.show()
|
|
|
|
+ if(isFit && layer.layer.getExtent){
|
|
|
|
+ let extent = layer.layer.getExtent();
|
|
|
|
+ if(extent && extent[0] != Infinity){
|
|
|
|
+ layer.mapInstance.fit(extent,{padding:[0,0,0,0]})
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ hideAll(){
|
|
|
|
+ for(let key in this.layerData){
|
|
|
|
+ let layer = this.layerData[key].layer
|
|
|
|
+ layer.hide()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ addStaticImgLayer(map, item){
|
|
|
|
+ item["opacity"] = 0.5
|
|
|
|
+ let imgLayer = new StaticImgLayer(item.url, item, 3, map);
|
|
|
|
+ imgLayer.hide()
|
|
|
|
+ if(item.legendData){
|
|
|
|
+ imgLayer.layer.set("colors", item.legendData.colors)
|
|
|
|
+ imgLayer.layer.set("labels", item.legendData.label)
|
|
|
|
+ }
|
|
|
|
+ imgLayer.layer.set("legend", item.legend)
|
|
|
|
+ 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.vectorStyle11.getPolygonStyle(fillColor, strokeColor, 1)
|
|
|
|
+ that.cacheStyle[cacheKey] = style
|
|
|
|
+ }
|
|
|
|
+ return style
|
|
|
|
+ }
|
|
|
|
+ let geoJsonLayer = new GeoJsonLayer(item.url, item, 3, map);
|
|
|
|
+ geoJsonLayer.layer.set("colors", item.legendData.colors)
|
|
|
|
+ geoJsonLayer.layer.set("labels", item.legendData.label)
|
|
|
|
+ geoJsonLayer.hide()
|
|
|
|
+ return geoJsonLayer
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|