百度地图BMapGL通过websocket发送的实时点进行打点,并给每个点添加点击事件

4 篇文章 0 订阅

由于BMapGL没有海量打点的方法、Bmap3.0没有卫星地图,在各种取舍下还是使用了BMapGL进行打点
并且在开发过程中发现百度地图的画线方法Polyline实时的画线是监听不到点击事件的(必须要一条完整的线)所有只能用Marker进行打点


通过websocket实时发送数据

//websocket数据样式 例
data: {
latitude: 36.00
longitude: 116.11
sendTime: 1650006526000
Id: 1
}
type: 2

vue

<template>
  <div class="viewBox">
    <div class="bm-view" id="container"></div>
  </div>
</template>


<script>
//Websocket 的封装和网上分享的封装都大差不差就不展示出来了
import { sendWebsocket, closeWebsocket } from "@/utils/websocket.js";
import { reactive,toRefs,onBeforeMount,onMounted} from 'vue'
import { initMap, setPoint,setMarker} from "../utils/BDmap";
import { ElLoading } from "element-plus";
export default {
    name: 'BDmap',
      setup() {

          onMounted(() => {
          //param是我这边后台需要的id
            openWebsocket(param);
         	Loading();
    		//当地图加载完毕后回调结束Loading
    		 initMap((tilesloaded) => {
        		loadingState.close();
      		});
          })
          
		  function Loading() {
     		loadingState = ElLoading.service({
        	lock: true,
        	text: "正在加载地图",
        	background: "rgba(0, 0, 0, 0.7)",
      		});
		   }
			//Websocket返还的消息
		   function wsMessage(data) {
			    if (data.type === 2) {
        			setMarker([data.data]);
      			}
			}
		   //给Websocket发送消息
		  function openWebsocket(param) {
		  	/**
		  	@param  发送参数 
		  	@wsMessage 返还的参数的方法
		  	@wsError 发生错误的方法
		  	**/
		   sendWebsocket(param, wsMessage, wsError);
		  }
          return {
          }

      }
  };
</script>



BDmap.js

let map
let init = [116.404, 39.925];
let points = [];
let Marker
let opts = {
  width: 200,
  height: 80,
  title: '信息'
};

//初始化地图的方法
export function initMap(callback) {
  map = new BMapGL.Map("container");
  setPoint(init);
  map.addControl(new BMapGL.ScaleControl()); // 添加比例尺控件
  // map.addControl(new BMapGL.OverviewMapControl()); //添加缩略地图控件
  map.enableScrollWheelZoom(true);
  map.setMapType(BMAP_EARTH_MAP);

  map.addEventListener("tilesloaded", function () {
    callback('tilesloaded')
  });
}

//重新定向地图 在项目中有些功能会重复使用
export function setPoint(point) {
  map.centerAndZoom(new BMapGL.Point(point[0], point[1]), 16);
}


//删除点
function removeMaker() {
  let allOverlay = map.getOverlays();
  map.removeOverlay(allOverlay[0]);
}


//进行打点
export function setMarker(mapData) {
//设置一个值超过这个值进行动态删除,以免无限扩大
  let allOverlay = map.getOverlays();
  if (allOverlay.length >= 400) {
    removeMaker()
  }
  // let myIcon = new BMapGL.Icon("/jsdemo/img/car.png", new BMapGL.Size(52, 26));
  let point = new BMapGL.Point(mapData.longitude, mapData.latitude);
  Marker = new BMapGL.Marker(point);
  Marker.id= mapData.id;
  Marker.sendTime = mapData.sendTime;
 //设置监听事件
  Marker.addEventListener('click', function (e) {
    let infoWindow = new BMapGL.InfoWindow(`
    <p>id:${e.currentTarget.id}</p>
    <p>发送时间:${parseTime(e.currentTarget.sendTime)}</p>`, opts);
    map.openInfoWindow(infoWindow, point); // 开启信息窗口
  });
  map.addOverlay(Marker);
}



//例
在这里插入图片描述


以上

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值