mineMap 水波动效椭圆定位点实现

目录

1.定义一个CustomLayerInterface来在地图上绘制脉冲点

2.在图层添加到地图时获取获取canvas context

3.每帧渲染时调用

4.处理数据,叠加图层

​5.代码如下

6.画椭圆的函数

 


先放一张图,效果如下,本文主要写橙色定位点下面的水波纹效果的实现,其原理就是利用canvas在地图上叠加一级图层。 

1.定义一个CustomLayerInterface来在地图上绘制脉冲点

2.在图层添加到地图时获取获取canvas context

3.每帧渲染时调用

4.处理数据,叠加图层

5.代码如下

// 水波动效椭圆定位点
canvasMarker(data) {
  const self = this;
  let size = 200;
  // 定义一个CustomLayerInterface来在地图上绘制脉冲点
  let pulsingDot = {
    width: size,
    height: size,
    data: new Uint8Array(size * size * 4),
    // 在图层添加到地图时获取获取canvas context
    onAdd: function () {
      var canvas = document.createElement('canvas');
      canvas.width = this.width;
      canvas.height = this.height;
      this.context = canvas.getContext('2d');
    },
    // 每帧渲染时调用
    render: function () {
      var duration = 1000;
      var t = (performance.now() % duration) / duration;
      var radius = (size / 2) * 0.3;
      var outerRadius = (size / 2) * 0.7 * t + radius;
      var context = this.context;

      // 画外围圆
      context.clearRect(0, 0, this.width, this.height);
      context.beginPath();
      self.ParamEllipse(context, 60, 80, outerRadius, radius); //椭圆
      context.fillStyle = 'rgba(255, 144, 0,' + (1 - t) + ')';
      context.lineWidth = 0;
      context.strokeStyle = 'transparent';
      context.fill();

      // 从canvas中更新图片数据
      this.data = context.getImageData(
          0,
          0,
          this.width,
          this.height
      ).data;
      // 不断地重新绘制地图,导致平滑的动画点
      self.bjMap.triggerRepaint();
      // 返回`true`让映射知道图像已经更新
      return true;
    }
  };
  let jsonDataCanvas = {
    'type': 'FeatureCollection',
    'features': []
  };
  data.forEach(item => {
    jsonDataCanvas.features.push({
      'type': 'Feature',
      'geometry': {
        'type': 'Point',
        'coordinates': item
      }
    })
  });

  self.bjMap.addImage('pulsing-dot', pulsingDot, {
    pixelRatio: 2
  });
  self.bjMap.addSource('points', {
    'type': 'geojson',
    'data': jsonDataCanvas
  });
  self.bjMap.addLayer({
    'id': 'points',
    'type': 'symbol',
    'source': 'points',
    'layout': {
      'icon-image': 'pulsing-dot'
    }
  });
},

6.画椭圆的函数

// 画椭圆
ParamEllipse(context, x, y, a, b) {
  //max是等于1除以长轴值a和b中的较大者
  //i每次循环增加1/max,表示度数的增加
  //这样可以使得每次循环所绘制的路径(弧线)接近1像素
  var step = (a > b) ? 1 / a : 1 / b;
  context.beginPath();
  context.moveTo(x + a, y); //从椭圆的左端点开始绘制
  for (var i = 0; i < 2 * Math.PI; i += step) {
    //参数方程为x = a * cos(i), y = b * sin(i),
    //参数为i,表示度数(弧度)
    context.lineTo(x + a * Math.cos(i), y + b * Math.sin(i));
  }
  context.closePath();
  context.stroke();
},

写的比较潦草,暂时记录到这吧~

又是元(mo)气(yu)满满的一天呢~

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Minemap是一种基于Web的地图开发平台,它提供了丰富的地图展示、交互功能和数据分析能力。Minemap官方文档详细介绍了该平台的各项功能和使用方法。 首先,Minemap官方文档介绍了如何快速开始使用该平台。它提供了一系列的API文档,包括地图展示、地图样式设置、地图交互、数据分析等方面的内容。通过仔细阅读这些文档,开发人员可以快速了解Minemap平台的整体架构和基本操作方法。 其次,Minemap官方文档详细介绍了如何定制地图风格。它提供了丰富的地图样式设置选项,开发人员可以自由选择地图的底图、标注样式、背景颜色等,以满足不同项目和用户的需求。通过仔细阅读这些文档,开发人员可以掌握如何根据具体需求定制地图风格。 此外,Minemap官方文档还介绍了地图数据的可视化和分析功能。开发人员可以通过在地图上添加自定义数据图层,并使用各种数据分析工具,例如热力图、聚类等,实现对地理数据的可视化和深入分析。通过仔细阅读这些文档,开发人员可以学习如何使用Minemap平台提供的数据分析功能,从而更好地理解和使用地理数据。 总之,Minemap官方文档是开发人员使用该地图开发平台的重要参考资料。通过仔细阅读和理解这些文档,开发人员可以深入学习和掌握Minemap平台的各项功能和使用方法,从而更好地开发出符合自己需求的地图应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值