mapbox-gl自定义图层:画圆

mapbox-gl的自定义图层(Custom Layer),是在地图的基础上,以webgl的形式进行勾画,mapbox-gl本身提供了画圆的接口,且是以像素的单位进行勾画的,参见公众号文章:mapbox-gl开发:画圆的一些问题,下边介绍一种使用自定义图层画圆的形式。

mapbox-gl自定义图层的使用中,需要将经纬度坐标转换成墨卡托的形式进行使用,参见公众号文章:mapbox-gl开发:自定义图层CustomLayer,在实际的开发中,是在地图上画一个正方形,使用webgl的shader进行半径控制,显示指定区域的颜色。
关键代码实现:

//模拟一个中心点、半径等信息,这里固定半径,可根据自己需求修改
      let centerors = mapboxgl.MercatorCoordinate.fromLngLat({
                        lng: 110.004,
                        lat: 21.239
                    }, 0);
                    this.centpoint = [centerors.x + 0.0015, centerors.y + 0.0015];

      //拼接正方形
                    this.buffer = gl.createBuffer();
                    gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
                    gl.bufferData(
                        gl.ARRAY_BUFFER,
                        new Float32Array([
                            centerors.x,
                            centerors.y,
                            centerors.z,
                            centerors.x + 0.003,
                            centerors.y,
                            centerors.z,
                            centerors.x + 0.003,
                            centerors.y + 0.003,
                            centerors.z,
                            centerors.x + 0.003,
                            centerors.y + 0.003,
                            centerors.z,
                            centerors.x,
                            centerors.y,
                            centerors.z,
                            centerors.x,
                            centerors.y + 0.003,
                            centerors.z,
                        ]),
                        gl.STATIC_DRAW
                    );

webgl fragmentshader关键代码:

//根据当前绘制坐标的位置,到中心点的距离,在距离以外的颜色透明
float circletest(vec2 uv, vec2 center, float radius)

        {

           float r = length(uv - center);
           if(r<0.0015)
           {
               return 1.0;
           }else
           {
               return 0.0;
           } 
        }

实现效果:
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值