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

<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>