|
|
|
@ -0,0 +1,280 @@
|
|
|
|
|
<template>
|
|
|
|
|
<div class="map" id="container"></div>
|
|
|
|
|
</template>
|
|
|
|
|
<script>
|
|
|
|
|
import styleJson from "../../../../public/custom_map_config.json";
|
|
|
|
|
import MapLine from "../../../../public/zhenhaiLine.json";
|
|
|
|
|
import MapPoint from "../../../../public/zhenhaiPoint.json";
|
|
|
|
|
export default {
|
|
|
|
|
name: "WarnMap",
|
|
|
|
|
props: {
|
|
|
|
|
company_list: {
|
|
|
|
|
type: Array,
|
|
|
|
|
default: () => [],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
center_point: [121.604192, 29.977299],
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
mounted() {
|
|
|
|
|
// 创建地图
|
|
|
|
|
this.init_map();
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
// 创建地图
|
|
|
|
|
init_map() {
|
|
|
|
|
let BMap = window.BMap;
|
|
|
|
|
let map = new BMap.Map("container", {
|
|
|
|
|
style: {
|
|
|
|
|
styleJson,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
let label = new BMap.Label();
|
|
|
|
|
let that = this;
|
|
|
|
|
map.centerAndZoom(
|
|
|
|
|
new BMap.Point(this.center_point[0], this.center_point[1]),
|
|
|
|
|
13
|
|
|
|
|
); // 创建点坐标
|
|
|
|
|
map.setMinZoom(12); // 初始化地图,设置中心点坐标和地图级别
|
|
|
|
|
map.setMaxZoom(19);
|
|
|
|
|
map.enableScrollWheelZoom(true);
|
|
|
|
|
showPoint();
|
|
|
|
|
for (var i = 0, n = MapLine.features.length; i < n; i++) {
|
|
|
|
|
showBoundaryEx(MapLine.features[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////// 创造边界--多边形 /////////////////
|
|
|
|
|
function showBoundaryEx(city) {
|
|
|
|
|
var paths = [];
|
|
|
|
|
var list = city.geometry.coordinates;
|
|
|
|
|
var polygon = {};
|
|
|
|
|
if (list.length > 1) {
|
|
|
|
|
for (let a = 0; a < list.length; a++) {
|
|
|
|
|
paths = [];
|
|
|
|
|
for (let i = 0; i < list[a][0].length; i++) {
|
|
|
|
|
let lat = list[a][0][i][1],
|
|
|
|
|
lng = list[a][0][i][0];
|
|
|
|
|
paths.push(new BMap.Point(lng, lat));
|
|
|
|
|
}
|
|
|
|
|
polygon = new BMap.Polygon(paths, {
|
|
|
|
|
fillColor: "#3b4c44",
|
|
|
|
|
strokeColor: "#0f1423",
|
|
|
|
|
fillOpacity: 0.6,
|
|
|
|
|
strokeWeight: 1,
|
|
|
|
|
}); //创建多边形
|
|
|
|
|
map.addOverlay(polygon); //增加多边形
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
for (let i = 0; i < list[0].length; i++) {
|
|
|
|
|
let lat = list[0][i][1],
|
|
|
|
|
lng = list[0][i][0];
|
|
|
|
|
paths.push(new BMap.Point(lng, lat));
|
|
|
|
|
}
|
|
|
|
|
polygon = new BMap.Polygon(paths, {
|
|
|
|
|
fillColor: "#3b4c44",
|
|
|
|
|
strokeColor: "#0f1423",
|
|
|
|
|
fillOpacity: 0.6,
|
|
|
|
|
strokeWeight: 1,
|
|
|
|
|
}); //创建多边形
|
|
|
|
|
map.addOverlay(polygon); //增加多边形
|
|
|
|
|
}
|
|
|
|
|
polygon.infowindow = new BMap.InfoWindow();
|
|
|
|
|
polygon.infowindow.name = city.properties.name;
|
|
|
|
|
polygon.addEventListener("mouseover", function () {
|
|
|
|
|
polygon.setFillColor("#ffa500");
|
|
|
|
|
});
|
|
|
|
|
polygon.addEventListener("mouseout", function () {
|
|
|
|
|
map.removeOverlay(label);
|
|
|
|
|
polygon.setFillColor("#3b4c44");
|
|
|
|
|
});
|
|
|
|
|
// 点击多边形区域
|
|
|
|
|
polygon.addEventListener("click", function () {
|
|
|
|
|
if (city.properties.name == "骆驼街道") {
|
|
|
|
|
map.centerAndZoom(new BMap.Point(121.58887, 29.986122), 15);
|
|
|
|
|
} else if (city.properties.name == "招宝山街道") {
|
|
|
|
|
map.centerAndZoom(new BMap.Point(121.713707, 29.95656), 15);
|
|
|
|
|
} else if (city.properties.name == "蛟川街道") {
|
|
|
|
|
map.centerAndZoom(new BMap.Point(121.686105, 29.947339), 15);
|
|
|
|
|
} else if (city.properties.name == "庄市街道") {
|
|
|
|
|
map.centerAndZoom(new BMap.Point(121.627037, 29.925579), 15);
|
|
|
|
|
} else if (city.properties.name == "贵驷街道") {
|
|
|
|
|
map.centerAndZoom(new BMap.Point(121.624142, 29.985606), 15);
|
|
|
|
|
} else if (city.properties.name == "澥浦镇") {
|
|
|
|
|
map.centerAndZoom(new BMap.Point(121.607133, 30.037162), 15);
|
|
|
|
|
} else if (city.properties.name == "九龙湖镇") {
|
|
|
|
|
map.centerAndZoom(new BMap.Point(121.558532, 30.039457), 15);
|
|
|
|
|
}
|
|
|
|
|
// 点位上图
|
|
|
|
|
console.log("that.company_list", that.company_list);
|
|
|
|
|
that.company_list.forEach((item) => {
|
|
|
|
|
var point = new BMap.Point(item.longitude, item.latitude);
|
|
|
|
|
// 打点的同时,判断预警等级,四种等级打四种点
|
|
|
|
|
// 自定义图标
|
|
|
|
|
var myIcon = {};
|
|
|
|
|
// 红色预警等级公司
|
|
|
|
|
if (item.color == "red") {
|
|
|
|
|
myIcon = new BMap.Icon(
|
|
|
|
|
require("@/assets/realtimeWarning/redcity.png"),
|
|
|
|
|
new BMap.Size(40, 60),
|
|
|
|
|
{
|
|
|
|
|
// anchor: new BMap.Size(-100, 25),
|
|
|
|
|
imageOffset: new BMap.Size(0, 0 - 10), // 设置图片偏移
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
// 黄色预警等级公司
|
|
|
|
|
} else if (item.color == "yellow") {
|
|
|
|
|
myIcon = new BMap.Icon(
|
|
|
|
|
require("@/assets/realtimeWarning/yellowcity.png"),
|
|
|
|
|
new BMap.Size(40, 60),
|
|
|
|
|
{
|
|
|
|
|
// anchor: new BMap.Size(-100, 25),
|
|
|
|
|
imageOffset: new BMap.Size(0, 0 - 10), // 设置图片偏移
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
// 绿色预警等级公司
|
|
|
|
|
} else if (item.color == "green") {
|
|
|
|
|
myIcon = new BMap.Icon(
|
|
|
|
|
require("@/assets/realtimeWarning/greencity.png"),
|
|
|
|
|
new BMap.Size(40, 60),
|
|
|
|
|
{
|
|
|
|
|
// anchor: new BMap.Size(-100, 25),
|
|
|
|
|
imageOffset: new BMap.Size(0, 0 - 10), // 设置图片偏移
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
// 蓝色预警等级公司
|
|
|
|
|
} else if (item.color == "blue") {
|
|
|
|
|
myIcon = new BMap.Icon(
|
|
|
|
|
require("@/assets/realtimeWarning/bluecity.png"),
|
|
|
|
|
new BMap.Size(40, 60),
|
|
|
|
|
{
|
|
|
|
|
// anchor: new BMap.Size(-100, 25),
|
|
|
|
|
imageOffset: new BMap.Size(0, 0 - 10), // 设置图片偏移
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var marker = new BMap.Marker(point, { icon: myIcon }); // 创建点位
|
|
|
|
|
map.addOverlay(marker);
|
|
|
|
|
var content = item.companyName;
|
|
|
|
|
var label = new BMap.Label(content, {
|
|
|
|
|
// 创建文本标注
|
|
|
|
|
position: point, // 设置标注的地理位置
|
|
|
|
|
offset: new BMap.Size(-10, -50), // 设置标注的偏移量
|
|
|
|
|
});
|
|
|
|
|
label.setStyle({
|
|
|
|
|
backgroundColor: " rgba(0, 0, 0, 0)",
|
|
|
|
|
border: "0",
|
|
|
|
|
color: "#409EFF",
|
|
|
|
|
fontSize: "16px",
|
|
|
|
|
});
|
|
|
|
|
map.addOverlay(label);
|
|
|
|
|
label.addEventListener("click", function () {
|
|
|
|
|
var label_ponit = new BMap.Label(); // 公司点位
|
|
|
|
|
label_ponit.setStyle({
|
|
|
|
|
color: "blue",
|
|
|
|
|
borderRadius: "5px",
|
|
|
|
|
borderColor: "#ccc",
|
|
|
|
|
padding: "10px",
|
|
|
|
|
fontSize: "16px",
|
|
|
|
|
fontFamily: "微软雅黑",
|
|
|
|
|
transform: "translateX(-50%) translateY(calc(-100% - 10px))",
|
|
|
|
|
});
|
|
|
|
|
// 点位点击转处置弹窗
|
|
|
|
|
label_ponit.setPosition(
|
|
|
|
|
new BMap.Point(item.longitude, item.latitude)
|
|
|
|
|
);
|
|
|
|
|
label_ponit.setOffset(new BMap.Size(130, -10));
|
|
|
|
|
label_ponit.setStyle({
|
|
|
|
|
width: "340px",
|
|
|
|
|
height: "238px",
|
|
|
|
|
background: "url(pbImg/气泡弹窗1.png) no-repeat",
|
|
|
|
|
backgroundSize: "100% 100%",
|
|
|
|
|
border: "0",
|
|
|
|
|
color: "#fff",
|
|
|
|
|
zIndex: 2000000000,
|
|
|
|
|
});
|
|
|
|
|
label_ponit.setContent(`
|
|
|
|
|
<div style='width:100%;display:flex;justify-content: space-between;align-items: center;'> <h4 style='margin:12px;font-size: 14px;color: #FFE6D9;overflow: hidden;text-overflow: ellipsis;white-space: nowrap; '>${item.companyName}</h4><div class='closeBtn' style='background: url(pbImg/关闭.png) no-repeat;width:20px;height:20px;background-size: 100% 100%;margin-right:10px;"'></div></div>
|
|
|
|
|
<div style='margin:0 auto;font-size: 14px;width:316px;height:108px;padding:0 12px;background: rgba(108,128,151,0.20);border: 1px solid rgba(73,84,97,1);'>
|
|
|
|
|
<h4 style='height:33%;opacity: 0.8;margin:0;line-height:38px;font-weight:300;'><span style="color:#D0DEEE;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">一级指标:</span>${item.levelIndexOne}</h4>
|
|
|
|
|
<h4 style='height:33%;opacity: 0.8;margin:0;line-height:38px;font-weight:300;'><span style="color:#D0DEEE;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">预警指标:</span>"${item.levelIndexThree}"异常</h4>
|
|
|
|
|
<h4 style='height:33%;opacity: 0.8;margin:0;line-height:38px;font-weight:300;'><span style="color:#D0DEEE;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">预警时间:</span>${item.alarmTime}</h4>
|
|
|
|
|
<div class='zhuanchuzhiBtn' style='width:80px;height:34px;font-size: 14px;
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
text-align:center;
|
|
|
|
|
line-height:34px;
|
|
|
|
|
background: url(pbImg/2121.png) no-repeat;
|
|
|
|
|
margin-top:20px;
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
letter-spacing: 0;
|
|
|
|
|
margin-left:80px;
|
|
|
|
|
font-weight: 400;'>转处置</div>
|
|
|
|
|
</div>
|
|
|
|
|
`);
|
|
|
|
|
map.addOverlay(label_ponit);
|
|
|
|
|
let btn = document.querySelector(".zhuanchuzhiBtn");
|
|
|
|
|
//console.log(btn, 'btn');
|
|
|
|
|
btn.addEventListener("click", () => {
|
|
|
|
|
//console.log(item, 'item');
|
|
|
|
|
that.$emit("zhuanchuzhi", item);
|
|
|
|
|
});
|
|
|
|
|
let closebtn = document.querySelector(".closeBtn");
|
|
|
|
|
//console.log(btn, 'btn');
|
|
|
|
|
closebtn.addEventListener("click", () => {
|
|
|
|
|
map.removeOverlay(label_ponit);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////// 分区区名 /////////////////
|
|
|
|
|
function showPoint() {
|
|
|
|
|
for (let i = 0; i < MapPoint.features.length; i++) {
|
|
|
|
|
var opts = {
|
|
|
|
|
position: new BMap.Point(
|
|
|
|
|
MapPoint.features[i].geometry.coordinates[0],
|
|
|
|
|
MapPoint.features[i].geometry.coordinates[1]
|
|
|
|
|
), // 指定文本标注所在的地理位置
|
|
|
|
|
offset: new BMap.Size(-30, -30), // 设置文本偏移量
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 创建文本标注对象
|
|
|
|
|
var label1 = new BMap.Label(
|
|
|
|
|
MapPoint.features[i].properties.name,
|
|
|
|
|
opts
|
|
|
|
|
);
|
|
|
|
|
// 自定义文本标注样式
|
|
|
|
|
label1.setStyle({
|
|
|
|
|
color: "orange",
|
|
|
|
|
borderRadius: "5px",
|
|
|
|
|
borderColor: "#ccc",
|
|
|
|
|
padding: "10px",
|
|
|
|
|
fontSize: "16px",
|
|
|
|
|
height: "20px",
|
|
|
|
|
lineHeight: "20px",
|
|
|
|
|
backgroundColor: "rgba(0,0,0,0)",
|
|
|
|
|
border: "0",
|
|
|
|
|
fontFamily: "微软雅黑",
|
|
|
|
|
});
|
|
|
|
|
map.addOverlay(label1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
<style lang="less" scoped>
|
|
|
|
|
.map {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
border: 1px solid #000000;
|
|
|
|
|
}
|
|
|
|
|
// /deep/ .BMap_Marker {
|
|
|
|
|
// z-index: 1000;
|
|
|
|
|
// background: url("../../../../public/pbImg/redcity.png") no-repeat !important;
|
|
|
|
|
// background-size: 100% 100% !important;
|
|
|
|
|
// }
|
|
|
|
|
</style>
|