You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

339 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="Map_Zhongdianrenyuan_box">
<div class="Map_Zhongdianrenyuan_box_map" id="Map_Zhongdianrenyuan_box_map">
<el-amap ref="map" map-style="amap://styles/d02b66b0a7f190d5a1556a3f59c86518" :center="center" :zoom="zoom"
:zooms="zooms" element-loading-background="rgba(11, 34, 72, 0.8)" @init="init"
:extra-options="{ vectorMapForeign: 'style_zh_cn' }" class="amap-demo">
<el-amap-geojson :geo="changshazhen" :polygon-options="polygonOptions" :draggable="draggable"
@click="JSONclick" />
<el-amap-ellipse :center="circleCenter" :radius="radius" :visible="true" :editable="false" :draggable="false"
@click="ellipseclick" :zIndex="8000" :fillOpacity="0" strokeStyle="dashed" strokeColor="red"/>
<el-amap-ellipse :center="circleCenterTow" :radius="radius" :visible="true" :editable="false" :draggable="false"
@click="ellipseclick" :zIndex="8000":fillOpacity="0" strokeStyle="dashed" strokeColor="red"/>
<!-- -->
<el-amap-marker v-for="(marker, index) in markers" :title="marker.name" :key="marker.id"
:position="marker.position" @click="(e) => { clickArrayMarker(marker, e) }" v-if="radio == 2 || radio == 1">
<div class="markerStyles">
<!-- <div v-if="marker.name" class="marker-Text">{{ marker.name }}</div> -->
<img :src="marker.imgSrc" alt="">
</div>
</el-amap-marker>
<!-- 飞机 -->
<el-amap-info-window v-if="personInfo.visible" anchor="bottom-center" :offset="[0, 0]" :closeWhenClickMap="true"
:position="personInfo.position" :visible.sync="personInfo.visible" :zIndex="900">
<div class="person-popup person-popupShow">
<div class="person-title">
<div class="title">无人机信息</div>
<img src="@/assets/images/dialogbg/close.png" class="mask" @click="markersClosePopup" alt="" />
</div>
<div class="person-main">
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">设备编号:</div>
</div>
<div class="position">{{ "131654656" }}</div>
</div>
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">当前位置:</div>
</div>
<div class="position">{{ "长沙镇XX街XX号" }}</div>
</div>
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">飞行任务:</div>
</div>
<div class="position">{{ "XXXXXXXXXXXXXX" }}</div>
</div>
<div class="btns">
<div @click="guojilook(1)">查看轨迹</div>
<div @click="guojilook(2)">历史任务</div>
<!-- <div @click="watchClick">强制观摩</div>
<div @click="taskClick">任务派发</div> -->
</div>
</div>
</div>
</el-amap-info-window>
<el-amap-info-window v-if="personInfoTow.visible" anchor="bottom-center" :offset="[0, 0]"
:closeWhenClickMap="true" :position="personInfoTow.position" :visible.sync="personInfoTow.visible"
:zIndex="900">
<div class="person-popup person-popupmini">
<div class="person-title">
<div class="title">无人机巡查事件</div>
<img src="@/assets/images/dialogbg/close.png" class="mask" @click="markersClosePopup" alt="" />
</div>
<div class="person-main">
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">事件地点</div>
</div>
<div class="position">{{ "长沙镇XX街XX号" }}</div>
</div>
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">发生时间</div>
</div>
<div class="position">{{ "2024.09.01 15:00:00" }}</div>
</div>
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">事件照片</div>
</div>
<div class="position">
<img src="@/assets/images/jiankong.jpg" alt="">
</div>
</div>
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">是否处理</div>
</div>
<div class="position">{{ "已处理" }}</div>
</div>
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">处理时间</div>
</div>
<div class="position">{{ "2024.09.01 15:20:00" }}</div>
</div>
</div>
</div>
</el-amap-info-window>
</el-amap>
</div>
<!-- 图层展示 -->
<div>
<ZhanshiTubiao showType="地空协同" @markersradio="markersradio"></ZhanshiTubiao>
</div>
<leftrightEcahts></leftrightEcahts>
<righttEcahts></righttEcahts>
<MapWrenjidialog ref="MapWrenjidialog"></MapWrenjidialog>
<MapWrenjiLishidialog ref="MapWrenjiLishidialog"></MapWrenjiLishidialog>
</div>
</template>
<script>
import changshazhen from "@/assets/mapjson/Chaangshazhen/changshazhen.geojson"
// 线路
import roadline1 from "@/assets/mapjson/Chaangshazhen/road-line.geojson"
//
import roadline2 from "@/assets/mapjson/Chaangshazhen/road-line2.geojson"
// 点
import roadpoint from "@/assets/mapjson/Chaangshazhen/road-point.geojson"
// 点
import roadpoint2 from "@/assets/mapjson/Chaangshazhen/road-point2.geojson"
// 人员分布图标
import ZhanshiTubiao from "@/views/components/ZhanshiTubiao/index.vue"
import MapWrenjidialog from "@/views/components/MapWrenjidialog/index.vue"
import MapWrenjiLishidialog from "@/views/components/MapWrenjiLishidialog/index.vue"
// 左右两边图
import leftrightEcahts from "@/views/Map/Map_Dikong/leftrightEcahts/index.vue"
import righttEcahts from "@/views/Map/Map_Dikong/righttEcahts/index.vue"
export default {
name: "map-view",
components: { ZhanshiTubiao, leftrightEcahts, righttEcahts, MapWrenjidialog, MapWrenjiLishidialog },
data() {
return {
zoom: 11.8,
zooms: [3, 20],
center: [121.298563, 32.451807],
map: null,
draggable: false,
visible: true,
changshazhen: changshazhen,
roadline1: roadline1,
roadline2: roadline2,
roadpoint: roadpoint,
roadpoint2: roadpoint2,
circleCenter: [121.211641, 32.4569487],
circleCenterTow: [121.338284, 32.388852],
radius: [1800, 700],
// 面图层样式
polygonOptions: {
strokeColor: '#00C5EC',
fillColor: '#00AEFF'
},
// 线图层样式
polyline: {
path: roadline1,
editable: false,
visible: true,
draggable: false
},
// 人员点
markers: [
{
position: [121.183697866903292, 32.460227941215508],
id: 1,
name: "飞机",
content: '<i class="el-icon-user-solid bendiren"></i>',
imgSrc: require("@/assets/images/icon/weurneji.png")
},
{
position: [121.235712627230569, 32.447218823220901],
id: 2,
name: "对讲",
content: '<i class="el-icon-user-solid bendiren"></i>',
imgSrc: require("@/assets/images/icon/xuncha.png")
},
{
position: [121.318413448767714, 32.411908360092688],
id: 3,
name: "飞机",
content: '<i class="el-icon-user-solid bendiren"></i>',
imgSrc: require("@/assets/images/icon/weurneji.png")
},
{
position: [121.359751265879749, 32.38683020264299],
id: 4,
name: "对讲",
content: '<i class="el-icon-user-solid bendiren"></i>',
imgSrc: require("@/assets/images/icon/xuncha.png")
},
],
// 选项
radio: 1,
personInfo: {
position: [],
info: {},
visible: false,
},
personInfoTow: {
position: [],
info: {},
visible: false,
}
}
},
mounted() {
},
unmounted() {
},
methods: {
ellipseclick() {
},
getMap() {
// bmap vue component
console.log('$refs: ', this.$refs.map.$$getInstance())
},
init(map) {
this.map = map;
// o.setMapStyle('amap://styles/darkblue')
map.setMapStyle("amap://styles/d02b66b0a7f190d5a1556a3f59c86518");
console.log(this.map.getCenter())
console.log(this.$refs.map.$$getInstance())
},
// 地图点击事件
click() {
alert('click map')
},
// 面图层样式
JSONclick: (e) => {
console.log('click event: ', e);
},
JSONclick2: (e) => {
console.log('click event2: ', e);
},
JSONclick3: (e) => {
console.log('click event3: ', e);
},
//mark点
clickArrayMarker(e) {
console.log(e);
if (e.name == "飞机") {
this.personInfo.visible = true
this.personInfo.position = e.position
this.personInfo.info = e.info
}
if (e.name == "对讲") {
this.personInfoTow.visible = true
this.personInfoTow.position = e.position
this.personInfoTow.info = e.info
}
},
guojilook(type) {
if (type == 1) {
this.$refs.MapWrenjidialog.open("person")
}
if (type == 2) {
this.$refs.MapWrenjiLishidialog.open("person")
}
},
markersClosePopup() {
this.personInfo.visible = false;
this.personInfoTow.visible = false;
},
// 切换人员
markersradio(type) {
console.log(type);
this.radio = type
}
},
};
</script>
<style scoped lang='scss'>
.Map_Zhongdianrenyuan_box {
width: 100%;
height: 100%;
background-color: #fff;
position: relative;
.Map_Zhongdianrenyuan_box_map {
width: 100%;
height: 100%;
}
}
::v-deep {
.bendiren {
color: greenyellow;
font-size: 26px;
}
.waidi {
color: goldenrod;
font-size: 26px;
}
}
::v-deep .person-popupmini {
min-height: 270px;
.position {
img {
width: 150px
}
}
}
</style>