目录

实现技术

引用


此方案对于电脑要求有点高,GPU直接就占满了,没想到好的解决方案 ,但功能实现了

实现技术

  • mapv
  • vue-baidu-map
  • 百度地图
  • 引用固定弹框封装插件

引用

index.html

<script src="https://api.map.baidu.com/api?v=3.0&ak=***"></script>
<script src="https://unpkg.com/vue-baidu-map"></script>
<script src="https://mapv.baidu.com/build/mapv.min.js"></script>

 main.js

Vue.use(VueBaiduMap.default, {ak: '***'
})

MyOverlay.vue

<template><bm-overlayref="customOverlay":class="{sample: true, active}"pane="labelPane"@draw="draw"><div><div class="text">{{text}}</div><img v-if="img1!=''" :src="img1" height="13vh" width="13vh" alt="图像" /><img v-if="img2!=''" :src="img2" height="13vh" width="13vh" alt="图像" /></div> </bm-overlay>
</template><script>
export default { props: ['text','img1','img2', 'position', 'active'],watch: {position: { handler () { this.$refs.customOverlay.reload() },deep: true }},methods: {draw ({el, BMap, map}) {const {lng, lat} = this.positionconst pixel = map.pointToOverlayPixel(new BMap.Point(lng, lat))el.style.left = pixel.x +20 + 'px'el.style.top = pixel.y - 30 + 'px'}}
}
</script><style>
.text{padding: 2px;/* text-overflow: ellipsis;overflow: hidden;display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical; */
}
.sample {width: 80px;/* height: 30px; */background: rgba(255,255,255,0.5);overflow: hidden;box-shadow: 0 0 5px #fff;color: #323232;padding: 5px;position: absolute;font-size: 10px;}
</style>

使用

<template><div><div class="table-all-body"><!-- <div id="allmap" style="position:absolute;width: 100%;height: 100%;z-index:0;"></div> --><baidu-map style="width: 100%;height: 100%;z-index:0;" :center="center" :zoom="zoom" @ready="handler":scroll-wheel-zoom="true" :mapClick="false" @moveend="syncCenterAndZoom" @zoomend="syncCenterAndZoom"><!-- 图标+默认跳动+点击跳动 --><bm-marker v-for="item in maps" :key="item.id" :position="{lng: item.longitude, lat: item.latitude}":icon="{url: (item.qualityLevel==1?'static/img/stationAlarm.png':item.qualityLevel==2?'static/img/outLine.png':'static/img/stationNormal.png'), size: {width: 48, height: 48}}":animation="nowStationId==item.id?'BMAP_ANIMATION_BOUNCE':''" @click="clickStation(item)"></bm-marker><!-- 固定弹框内容 --><MyOverlay v-if="nameShow" v-for="item in maps" :key="item.id":position="{lng: item.longitude, lat: item.latitude}" :text="item.name":img1="item.deviceWarn?'static/img/alarm2.png':''" :img2="item.qualityWarn?'static/img/alarm1.png':''"></MyOverlay></baidu-map></div>
</template>
<script>import selectStation from "./children/selectStation"import RealTimeData from "./children/RealTimeData";import MyOverlay from '@/components/common/MyOverlay.vue'export default {components: {selectStation,RealTimeData,MyOverlay,},data() {return {map: "", // 地图bigOrSmall1: 0, //扩大的状态maps: [], // 站点信息数组nowStationId: '',timeId: "", //循环center: {lng: 0,lat: 0},zoom: 3,qianxiData: [],contentShow: false,nameShow: true,};},computed: {},//取消循环beforeDestroy() {clearTimeout(this.timeId);},mounted() {},methods: {handler({BMap,map}) {this.map = mapthis.getTreePath()this.getMapData()this.zoom = 15},draw({el,BMap,map}) {const pixel = map.pointToOverlayPixel(new BMap.Point(map.re.lng, map.re.lat))el.style.left = pixel.x - 60 + 'px'el.style.top = pixel.y - 20 + 'px'},//设置当前点+移动坐标clickStation(item) {this.nowStationId = item.idthis.center.lng = item.longitudethis.center.lat = item.latitude},//移动或缩放时syncCenterAndZoom(e) {let Zoom =  e.target.getZoom()if (this.contentShow) {this.mapvLine()}if (Zoom < 13) {this.nameShow = false} else {this.nameShow = true}},//获取路径getTreePath() {this.center.lng = 114.52785300795644this.center.lat = 38.14758574827796this.nowStationId = '1'},//获取数据getMapData() {this.maps = [{"id": "1","name": "站点名称站点名称站点名称站点名称站点名称","longitude": 114.52785300795644,"latitude": 38.14758574827796,"qualityLevel": 1,"deviceWarn": true,"qualityWarn": true,"upSiste": []},{"id": "2","name": "站点名称2","longitude": 114.54050114953694,"latitude": 38.13759635572114,"qualityLevel": 2,"deviceWarn": true,"qualityWarn": false,"upSiste": [ //上游站点信息{"id": "2-1", //上游站点id"name": "上游站点2-1", //上游站点名称"longitude": 114.52785300795644, //上游经度"latitude": 38.14758574827796 //上游维度}]},{"id": "3","name": "站点名称3","longitude": 114.56579743269792,"latitude": 38.12419932394176,"qualityLevel": 3,"deviceWarn": false,"qualityWarn": false,"upSiste": [ //上游站点信息{"id": "3-1", //上游站点id"name": "上游站点3-1", //上游站点名称"longitude": 114.54050114953694, //上游经度"latitude": 38.13759635572114 //上游维度}]},{"id": "4","name": "站点名称4","longitude": 114.5908781225365,"latitude": 38.12056580319661,"qualityLevel": 3,"deviceWarn": false,"qualityWarn": false,"upSiste": [ //上游站点信息{"id": "3-1", //上游站点id"name": "上游站点3-1", //上游站点名称"longitude": 114.56579743269792, //上游经度"latitude": 38.12419932394176 //上游维度}]},{"id": "5","name": "站点名称5","longitude": 114.6115750814864,"latitude": 38.11613720325717,"qualityLevel": 3,"deviceWarn": true,"qualityWarn": true,"upSiste": [ //上游站点信息{"id": "3-1", //上游站点id"name": "上游站点3-1", //上游站点名称"longitude": 114.5908781225365, //上游经度"latitude": 38.12056580319661 //上游维度}]},{"id": "6","name": "站点名称6","longitude": 114.63838051790414,"latitude": 38.11556941444744,"qualityLevel": 2,"deviceWarn": true,"qualityWarn": false,"upSiste": [ //上游站点信息{"id": "3-1", //上游站点id"name": "上游站点3-1", //上游站点名称"longitude": 114.6115750814864, //上游经度"latitude": 38.11613720325717 //上游维度}]},{"id": "6","name": "站点名称6","longitude": 114.68336765784383,"latitude": 38.10284977850926,"qualityLevel": 1,"deviceWarn": true,"qualityWarn": true,"upSiste": [ //上游站点信息{"id": "3-1", //上游站点id"name": "上游站点3-1", //上游站点名称"longitude": 114.63838051790414, //上游经度"latitude": 38.11556941444744 //上游维度}]}]this.timeData = []this.qianxiData = [] //弧线for (var i in this.maps) {for(var j in this.maps[i].upSiste){if(this.maps[i].upSiste.length!=0){this.curive({lng: this.maps[i].upSiste[j].longitude, lat: this.maps[i].upSiste[j].latitude}, {lng: this.maps[i].longitude, lat: this.maps[i].latitude}, 50)   var item = {geometry: {type: 'LineString',coordinates:[[this.maps[i].upSiste[j].longitude,this.maps[i].upSiste[j].latitude],[this.maps[i].longitude,this.maps[i].latitude]]},count: 100 * Math.random()} this.qianxiData.push(item)}  }}this.mapvLine()},curive(fromPoint, endPoint, n) {var delLng = (endPoint.lng - fromPoint.lng) / n;var delLat = (endPoint.lat - fromPoint.lat) / n;for (var i = 0; i < n; i++) {var pointNLng = fromPoint.lng + delLng * i;var pointNLat = fromPoint.lat + delLat * i;this.timeData.push({geometry: {type: 'Point',coordinates: [pointNLng, pointNLat]},count: 1,time: i});}},//动态河流mapvLine() {var datas = new mapv.DataSet(this.qianxiData)var options1 = {globalCompositeOperation: 'lighter',strokeStyle: 'rgba(64,158,255, 1)',shadowColor: 'rgba(64,158,255, 0.5)',gradient: {0: 'rgba(64,158,255, 1)',1: 'rgba(64,158,255, 1)'},lineWidth: 7,draw: 'intensity'}var mapvLineLayer = new mapv.baiduMapLayer(this.map, datas, options1);var dataSet = new mapv.DataSet(this.timeData);var options = {fillStyle: 'rgba(255, 250, 250, 1)',size: 2,animation: {type: 'time',stepsRange: {start: 0,end: 50},trails: 1,duration: 5,},draw: 'simple'}var mapvTimeLayer = new mapv.baiduMapLayer(this.map, dataSet, options);this.contentShow = true},}}</script><style scoped>.history-img-left {position: absolute;left: 0;right: 0;margin: auto;width: 50px;height: 50px;}.Map {-webkit-box-shadow: 0px 0px 2px 1px rgba(37, 37, 37, 0.39);box-shadow: 0px 0px 2px 1px rgba(37, 37, 37, 0.39);padding-left: 1%;margin-bottom: 1em;position: fixed;top: 15%;margin-left: 1%;width: 55%;height: 45%;background-color: white;}.enlarge {float: right;font-size: 20px;margin-top: -2.5vh;cursor: pointer;}.RadioParam {position: absolute;z-index: 1;right: 10px;margin-top: 10px;}.AroundTheFactory {position: absolute;z-index: 1;border-radius: 10px;right: 10px;margin-top: 10px;}</style>

【vue-baidu-map + mapv】结合实现动态水流动画相关推荐

  1. vue baidu map之获取选中点的经纬度

    需求:在vue项目中通过点击按钮,弹出百度地图的弹框,用户选择地图上的点或者通过搜索关键字选点,点击确认 关闭弹窗 得到经纬度 效果: vue baidu map api链接 : https://da ...

  2. Vue Baidu Map 实现Vue版本地图轨迹回放(App端)

    Vue Baidu Map 地图轨迹回放 Vue Baidu Map 简介 Vue Baidu Map 安装 1.NPM 2.CDN Vue Baidu Map 引用 BmlLushu 引用 BmlL ...

  3. Vue中用 Vue Baidu Map 绘制地图

    1.先贴上官网案例 https://dafrok.github.io/vue-baidu-map/#/zh/guide/painting 官网的东西,没有百度地图开放平台上面的东西齐全,考虑到vue ...

  4. Vue中使用百度地图Vue Baidu Map(vue-baidu-map)

    最近负责的一个vue项目中需要调用百度地图api做标记打点的需求,记录一下: vue-baidu-map 官方地址 一.插件的安装 1.npm 安装 $ npm install vue-baidu-m ...

  5. Vue Baidu Map组件: 点、线、多边形、圆形、撤销、返回

    话不多说,直接上代码: 参考官网代码改编:https://dafrok.github.io/vue-baidu-map/#/zh/guide/painting 效果图 index.vue <te ...

  6. Vue+Vuex+Axios+ECharts 画一个动态更新的中国地图

    一.生成项目及安装插件 # 安装 Vue Cli npm install vue-cli -g# 初始化项目 vue init webpack vue-china-map# 切到目录下 cd vue- ...

  7. 七十三、Vue项目城市详细页的动态路由,Banner布局和公用图片画廊组件拆分

    2020/11/04. 周四.今天又是奋斗的一天. @Author:Runsen 写在前面:我是「Runsen」,热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的.大四弃算法转前端,需要每天的 ...

  8. pyecharts绘制省级地图(Map地图、Geo动态涟漪散点图、Geo动态轨迹图)

    Ⅰ.原始数据 第七次全国人口普查(广东人口数据) 数据来源:广东统计年鉴 城市 人口 广州市 18676605 深圳市 17560061 珠海市 2439585 汕头市 5502031 佛山市 949 ...

  9. 前端Vue中实现超炫酷动态背景(全屏背景+自定义banner+登录/注册页)

    一.文章引导 #mermaid-svg-9sKRaMRBkdCcbAh2 {font-family:"trebuchet ms",verdana,arial,sans-serif; ...

最新文章

  1. 笔记 VRRP基本原理 主备备份 负载均衡
  2. 机器学习(MACHINE LEARNING)MATLAB经济金融领域简单数学模型和分析
  3. 【十大经典排序算法】java实现--冒泡排序(1)
  4. 聊聊互联网实习相关的事儿
  5. 本想试试看,结果却拿到了京东的Offer
  6. margin和padding的区别
  7. 排序算法:希尔排序算法实现及分析
  8. Linux内存管理 brk(),mmap()系统调用源码分析1:基础部分
  9. 基于JAVA+SpringMVC+MYSQL的在线商品拍卖网站
  10. Faster R-CNN源码中RPN的解析(自用)
  11. 港股打新之卖出策略(暗盘和首日)
  12. ELK下Elasticsearch如何关掉服务
  13. 电脑爱好者 2008年第23期(12月上) PDF
  14. 当不知轴承型号时如何寻找轴承故障频率_趣说滚动轴承的故障诊断
  15. wordpress 占有率_降低WordPress网站跳出率的10条提示
  16. 配置telnet远程登录管理二层交换机
  17. 漫谈“中间件”与国产化【转】
  18. 挂yy协议的服务器,yy协议挂机工具免费版
  19. 因果推断——现代统计的思想飞跃
  20. android和Mac共享文件,这可能是 Mac 共享文件最详细的教程了

热门文章

  1. 一篇文章学懂数据结构中的树
  2. 6-2 从shape类派生出一个正n边形 (10 分)
  3. 阿里腾讯微软拥抱低代码,程序员们要“失业”?
  4. ExcelHelper 帮助类-可以直接保存到共享文件夹
  5. 如何搭建智慧连锁店物联网
  6. 多项式对数函数(ln)
  7. 【2022国赛模拟】无损加密——LGV引理、状压DP
  8. java 斗地主_Java实现简单的斗地主游戏
  9. 如何查看电脑激活状态
  10. linux使用dd命令拷贝和恢复镜像