百度离线地图示例之十五:实现雷达打点动态水波纹效果

前言介绍:

主要是基于v3.0的API版本进行的离线,纯内网可操作,基本上实现了现有90%以上的功能点,能兼容jpg和png格式的瓦片图层,实现了原生和基于Vue两个版本(包含常用的55个示例),文末有个人微信二维码,有不完善的地方,可加微信一起探讨交流,实现的功能点概要如下:

地图示例:

地图展示
同时加载两个地图
设置地图最大及最
小级别移动地图
缩放地图
拖拽地图
设置地图显示范围
获取地图显示范围
测距

地图控件:

工具条、比例尺控件 地图类型
缩略图控件
添加版权控件
添加自定义控件

覆盖物示例:

添加/删除覆盖物
折线上添加方向箭头
添加动画标注点
设置点的新图标
设置点是否可拖拽 设置线、面可编辑
设置覆盖物的显示与隐藏
文本标注
带文字标签的覆盖物
获取覆盖物的信息
添加多个标注点
从多个点删除指定点
加载闪烁点
加载海量点 添加弧线
画椭圆
添加自定义覆盖物
点聚合
添加/删除地面叠加层
热力图功能示例
矢量图
添加自定义控件

信息窗口示例:

纯文本的信息窗口
添加复杂内容的信息窗口
给多个点添加信息窗口
获取信息窗口的信息

右键菜单示例:

给地图添加右键菜单
给覆盖物添加右键菜单

鼠标操作示例

设置地图默认的鼠标样式
鼠标滚轮缩放地图
鼠标拖拽地图
鼠标测距
单击获取点击的经纬度
鼠标绘制工具

添加层示例:

添加清华校园微观图
自定义网格

事件示例

图块加载完毕
地图单击事件
给覆盖物注册事件
传递事件参数
为多个点注册单击事件
注销事件

除了离线了官方API外,还对一些操作工具类进行了离线(总计11个工具),比如:

Heatmap

作用:热力图

SearchInfoWindow

作用:百度地图样式”的信息窗口工具。该工具为用户提供带搜索框的信息窗口,该窗口内容可自由定制多种风格。同时,用户可以将信息窗口标题以短信方式发送到手机上。

MarkerClusterer

作用:多标注聚合器。此工具解决加载大量点要素到地图上造成缓慢,且产生覆盖现象的问题。

RectangleZoom

作用:区域缩放工具。此工具将根据用户拖拽绘制的矩形区域大小对地图进行放大或缩小操作。

TextIconOverlay

作用:自定义覆盖物工具。用户可以使用该工具在地图上添加文字和图标样式的覆盖物。

LuShu

作用:路书,轨迹运动工具。此工具用以实现marker沿路线运动,并有暂停等功能。

GeoUtils

作用:几何运算工具。此工具提供判断点与矩形、 圆形、多边形线、多边形面的关系,并提供计算折线长度和多边形的面积的公式。

DistanceTool

作用:测距。

DrawingManager

作用:矢量图绘制。

代码示例实现:

html引用示例代码如下:

1、百度地图离线API下载地址
2、百度地图离线工具类集合下载地址

可以看出全部是离线引用,当然哪些工具类可以在组件内用的时候再引用也可以

要求实现动态效果:
在这里插入图片描述

代码如下,在index引用:

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
	<style type="text/css">
		body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
    </style>
  <!-- 百度地图3.0 离线API Begin -->
	<script type="text/javascript" src="offlineApi/map3.0_init.js"></script>
  	<script type="text/javascript" src="offlineApi/map3.0.js"></script>
  	<script type="text/javascript" src="offlineApi/jquery-3.3.1.min.js"></script>
	<!-- 绘制逻辑 -->
	<script src="offlineApi/val.js"></script>
   <!-- 百度地图3.0 End -->
	<title>雷达打点水波纹</title>
</head>
<body>
	<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
	// 百度地图API功能
	var map = new BMap.Map("allmap");
	var point = new BMap.Point(116.404, 39.915);
	var pointList = [];
	map.centerAndZoom(point, 4);
	map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放
</script>

vue组件内容:

<template>
  <div ref="map" class="map">    
  </div>
</template>

<script>
import {RadarOverlay} from './Radar';
export default {
  data() {
    return {

    }
  },
  mounted() {
    this.initMap()
  },
  methods: {
    initMap() {
      // eslint-disable-next-line no-undef
      const map = new BMap.Map(this.$refs.map);
      // eslint-disable-next-line no-undef
      map.centerAndZoom(new BMap.Point(116.404, 39.915), 15);
      // eslint-disable-next-line no-undef
      const point = new BMap.Point(116.404, 39.915);     
      map.enableScrollWheelZoom(true);
      // 添加自定义覆盖物   
      const radar = new RadarOverlay(point, 40);    
      map.addOverlay(radar);
      // eslint-disable-next-line no-undef
      var point1=new BMap.Point(116.404, 39.915),
      // eslint-disable-next-line no-undef
        point2=new BMap.Point(116.434, 39.925),
        // eslint-disable-next-line no-undef
        point3=new BMap.Point(116.454, 39.945);
      var points = [point1,point2, point3];
      // eslint-disable-next-line no-undef
      var curve = new BMapLib.CurveLine(points, {strokeColor:"blue", strokeWeight:3, strokeOpacity:0.5}); //创建弧线对象
      map.addOverlay(curve); //添加到地图中
    }
  }
}
</script>

雷达水波纹绘制类:

// eslint-disable-next-line no-undef
export class RadarOverlay extends BMap.Overlay {
  constructor(point, size) {
    super();
    this.point = point;
    this.size = size;
  }

  initialize(map) {
    this._map = map;
    const template = `<div class="radar-box">
        <div class="radar">
          <div class="ripple"></div>
          <div class="ripple"></div>
          <div class="ripple"></div>
        </div>
      </div>`;
    const divFragment = document.createRange().createContextualFragment(template);
    const div = divFragment.querySelectorAll('.radar-box')[0];
    map.getPanes().markerPane.appendChild(div);
    this._div = div;
    return div;
  }

  draw() {
    // 根据地理坐标转换为像素坐标,并设置给容器
    const position = this._map.pointToOverlayPixel(this.point);
    this._div.style.left = `${position.x - this.size / 2}px`;
    this._div.style.top = `${position.y - this.size / 2}px`;
  }
}

上一篇:百度离线地图示例之十四:动态运行轨迹实现(附源码)
下一篇:待续
系列文章后续一直有进行更新,有不完善的地方,可加微信一起交流:
在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

longerJue

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值