vue整合高德地图

在这里插入图片描述
1 注册高德开放平台 获取key
2 下载高德地图包 npm install vue-amap --save
3 在main.js添加代码

import VueAMap from 'vue-amap'
Vue.use(VueAMap)
VueAMap.initAMapApiLoader({
  key:'你获取到的步骤1的key',
  plugin:['AMap.Autocomplete','AMap.PlaceSearch','AMap.Scale','AMap.OverView','AMap.ToolBar','AMap.MapType','AMap.PolyEditor','AMap.CircleEditor','MarkerClusterer'],
  v:'1.4.4'
})

4详细地图

<template>
    <div id="app">
        <div class="mapContent">
            <el-amap vid="amap" :zoom="zoom" :center="center" :zoomEnable="true" :events="mapEvents">
                <el-amap-marker v-for="(marker,index) in markers" :key="index" :position="marker.position" :icon="icon" :events="marker.events"></el-amap-marker>
                <el-amap-info-window :position="currentWindow.position"
                                     :content="currentWindow.content"
                                     :visible="currentWindow.visible"
                                     :events="currentWindow.events">
                </el-amap-info-window>
            </el-amap>
            <!-- 设置marker点 -->
            <searchForm :message="ownSearch" class="searchPosition" ref="searchForm" style="margin-top:4%"></searchForm>
             <div class="searchBtn" @click="getDevicePosition()" style="top:14%">搜索</div>
             <!-- 设置弹窗 -->
              <el-dialog :visible.sync="showAddPlc">
                <div class="mapmsgName">详细信息</div>
                <div class="mapMsgDetail" style="padding-top: 24px;">
                    <div class="mapDataShow">编号:<span>{{clickId}}</span></div>
                    <div class="mapDataShow">名称:<span>{{clickName}}</span></div>
                </div>
                <div class="mapMsgDetail">
                    <div class="mapDataShow">类型:<span>{{clickType}}</span></div>
                </div>
                <div class="mapMsgDetail">
                    <div class="mapDataShow">经度:<span>{{clickLng}}</span></div>
                    <div class="mapDataShow">纬度:<span>{{clickLat}}</span></div>
                </div>
                <div class="mapEcharts" id="energy" style="padding-top: 24px;"></div>
                <div class="mapEcharts" id="lineLoss"></div>
              </el-dialog>
        </div>
    </div>
</template>
<script>
import VueAMap from 'vue-amap'
import searchForm from '@/components/common/searchForm/searchForm'
import echarts from "echarts"
 let amapManager = new VueAMap.AMapManager();
export default {
    components:{searchForm},
    data(){
        return{
            ownSearch:['ifTqUp','ifdeviceUp'],
            zoom:6,
            showAddPlc:false,
            center:[102.61,37.94],
            icon:require('../../../../static/images/map/lhfj@2x.png'),
            amapManager,
            mapEvents: {
                init(o) {
                     o.setMapStyle('amap://styles/darkblue');//自定义的高德地图的样式
               }
            },
            markers:[],
            currentWindow:{
                position:[102.61,37.94],
                id:'',
                content:'',
                events:{},
                visible:false
            },
            msgContent:'',
            clickId:'',
            clickName:'',
            clickType:'',
            clickLng:'',
            clickLat:''

        }
    },
    methods:{
        //获取设备位置
        getDevicePosition(){
                let _this = this
                let body = {};
                _this.markers=[];
                body.districtOfficeId=this.$refs.searchForm.upTqValue
                body.id=''
                body.deviceId=this.$refs.searchForm.upDeviceValue
                _this.$http.post(_this.$api.devicePositionApi.queryPosition, body).then(function (res) {
                    if (res.code === '00000') {
                        let positionArr=[];
                        let needData=res.data;
                        needData.forEach(element => { 
                           let positionData={};
                           positionData.position=element.position.split(','),
                           positionData.events={
                                    click:(e) => {
                                    _this.currentWindow.visible=false;
                                    _this.clickId=element.id,
                                    _this.clickName=element.name,
                                    _this.clickType=_this.getDeviceName(element.type),
                                    //获取点击经纬度
                                    _this.clickLng=e.lnglat.lng,
                                    _this.clickLat=e.lnglat.lat,
                                    _this.showAddPlc=true;
                                    _this.$nextTick(()=>{
                                    _this.getDeviceDetail(element.id,_this.$refs.searchForm.upTqValue)
                                    })
                                    },
                                    //鼠标移到marker点显示的弹窗信息
                                    mouseover:(e)=>{
                                    _this.currentWindow.visible=false;
                                    _this.$nextTick(()=>{
                                        _this.currentWindow={
                                            position:[e.lnglat.lng,e.lnglat.lat],
                                            content: '<div class="mapMsg">'
                                                    +'<div class="msgNameDetail">基本信息</div>'
                                                    +'<div class="msgDetail">编号:'+element.id+'</div>'
                                                    +'<div class="msgDetail">名称:'+element.name+'</div>'
                                                    +'<div class="msgDetail">类型:'+_this.getDeviceName(element.type)+'</div>'
                                                    +'<div class="msgDetail">经度:'+e.lnglat.lng+'</div>'
                                                    +'<div class="msgDetail">纬度:'+e.lnglat.lat+'</div>'
                                                    +'</div>',
                                            visible:true,
                                            events:{}
                                        };
                                    _this.currentWindow.visible=true;
                                    })
                                    }
                        }
                           _this.markers.push(positionData);

                       })
                    }
                }).catch(function () {
                    console.log('请求失败')
                })
        },
        getDeviceName(deviceType){
            if(deviceType=='TABLE'||deviceType==3){
                return "电表"
            }else if(deviceType=="TABLE_BOX"||deviceType==2){
                return "表箱";
            }else if(deviceType=="DISTRICT_OFFICE"||deviceType==0){
                return "总表";
            }else if("BRANCH_BOX"==deviceType||deviceType==1){
                return "分支箱"
            }else if("GROUP"==deviceType){
                return "组"
            }
            return '未知';
        },
        //获取点击点的详细信息 并给详细信息弹窗绑定值
        getDeviceDetail(deviceId,monitorId){
                let _this = this
                let body = {};
                body.monitorId=monitorId
                body.deviceId=deviceId
                _this.$http.post(_this.$api.devicePositionApi.queryDeviceData, body).then(function (res) {
                if(res.code=='00000'){
                  let myChart = _this.$echarts.init(document.getElementById('energy'));
                  let myChartLoss = _this.$echarts.init(document.getElementById('lineLoss'));
                  let optionEn = {
                   color:['#228FFE'],
                   title: {
                       text: '当天能耗曲线',
                       textStyle:{
                           fontSize:13,
                           color:'#2BEDE6',
                       }
                   },
                    xAxis: {
                        type: 'category',
                        data: [ '0','4', '8', '12','16','20','24'],
                        "axisLabel":{
                            interval: 0
                        },
                         axisLine:{
                                lineStyle:{
                                    color:'#2BEDE6',
                                }
                         }
                    },
                    yAxis: {
                        type: 'value',
                         axisLine:{
                                lineStyle:{
                                    color:'#2BEDE6',
                                }
                         }
                    },
                   grid:{
                       x:30,
                       y:30,
                       x2:30,
                       y2:20,
                       borderWidth:10
                   },
                    series: [{
                        data: res.data.arrHn,
                        type: 'line',
                        smooth:true,
                        itemStyle: {normal: {  areaStyle: {
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                offset: 0,
                                color: 'rgba(34,143,254,0.7)'
                            }, {
                                offset: 1,
                                color: 'rgba(34,143,254,0)'
                            }])
                        },
                        }},
                    }]
                };
                let optionLine = {
                    color:['#FF4D4D'],
                    title: {
                        text: '当天线损曲线',
                        textStyle:{
                            fontSize:13,
                            color:'#2BEDE6',
                        }
                    },
                    xAxis: {
                        type: 'category',
                        data: [ '0','4', '8', '12','16','20','24'],
                        "axisLabel":{
                            interval: 0
                        },
                        axisLine:{
                                lineStyle:{
                                    color:'#2BEDE6',
                                }
                         }

                    },
                    yAxis: {
                        type: 'value',
                        axisLine:{
                                lineStyle:{
                                    color:'#2BEDE6',
                                }
                         }
                    },
                    grid:{
                        x:30,
                        y:30,
                        x2:30,
                        y2:20,
                        borderWidth:10
                    },
                    series: [{
                        data: res.data.arrXs,
                        type: 'line',
                          smooth:true,
                        itemStyle: {normal: {  areaStyle: {
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                offset: 0,
                                color: 'rgba(255,77,77,0.7)'
                            }, {
                                offset: 1,
                                color: 'rgba(255,77,77,0)'
                            }])
                        },
                        }},
                    }]
                };
                myChart.setOption(optionEn);
                myChartLoss.setOption(optionLine)
                }

                })
        },

    },

}
</script>

<style scoped type='text/css' >
  @import './index.css';
</style>
<style>
.mapMsg{
    background: url(/static/images/map/SB_bg@2x.png) no-repeat;
    background-size: 100% 100%;
    width: 150px;
    height: 200px;
}
.amap-logo img{
    display: none;
}
.amap-info-content{
    background: rgba(255, 255, 255, 0)!important;
    border: none!important;
}
.amap-info-outer, .amap-menu-outer{
    border: none!important;
}
.amap-info-sharp{
    background-image:none!important
}
.mapmsgName{
    font-size: 22px;
    font-family:Source Han Sans CN;
    font-weight:500;
    color:rgba(43,237,230,1);
    line-height:30px;
    box-sizing: border-box;
    padding-left: 18px;
    width: 50%;
    text-align: left;
    position: absolute;
    top: 14px;
}
.msgNameDetail{
        font-size: 22px;
    font-family:Source Han Sans CN;
    font-weight:500;
    color:rgba(43,237,230,1);
    line-height:30px;
    box-sizing: border-box;
    padding-left: 18px;
    width: 100%;
    text-align: left;
}
.msgDetail{
    font-size:10px;
    font-family:Source Han Sans CN;
    font-weight:400;
    color:rgba(255,255,255,1);
    width: 100%;
    box-sizing: border-box;
    padding-left: 18px;
    padding-top: 10px;
}
.mapMsgDetail{
    width: 100%;
    height: 6%;
}
.mapDataShow{
    width: 50%;
    height: 100%;
    float: left;
    color: #2BEDE6;
    text-align: left;
    text-align: left;
    box-sizing: border-box;
    padding-left: 20px;
}
.mapDataShow span{
    color: white;
}
.mapEcharts{
    width: 100%;
    height: 32%;
}
</style>

最终效果图:
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值