高德地图画渐变线

高德地图画渐变线,思路是将线和颜色均分为多个小线段和小颜色,实现渐变,类似于下图。

 如果需要多段线,自己循环拼一下就可以了,方法返回多个小线段组成的polyline数组。

/*
    * 高德地图画渐变线
    * author: liyun
    * params:
    *   polygonArr线段两点坐标,必传
    *   color线两点间的渐变颜色(只能两个颜色渐变,如需要多个渐变色,就将线段切割为多个小线段,只能传rgb()格式色值,如需要传十六进制色值需要转换下),必传
    * */
function drawLinearGradientPolyline(polygonArr, color) {
      var dis = AMap.GeometryUtil.distance(polygonArr[0], polygonArr[1]);//计算两点件距离
      var granularity = Math.round(dis / 80);//计算粒度,如果想粒度精细些就将80改小,越小越精细

      var x_cz = polygonArr[1][0] - polygonArr[0][0]; //两点间横坐标差
      var y_cz = polygonArr[1][1] - polygonArr[0][1]; //两点间纵坐标差

      var x1 = x_cz / granularity; //分解为多个小点后,两小点间的横坐标差值
      var y1 = y_cz / granularity; //分解为多个小点后,两小点间的纵坐标差值

      //取出rbg颜色值,用于后面计算
      var colorList = [];
      color.forEach(item => {
        colorList.push(item.substring(4, item.length - 1).split(','));
      })

      var r_cz = colorList[1][0] - colorList[0][0]; //两颜色r值差
      var g_cz = colorList[1][1] - colorList[0][1]; //两颜色g值差
      var b_cz = colorList[1][2] - colorList[0][2]; //两颜色b值差

      var r1 = r_cz / granularity; //分解为多个小颜色后,两小颜色r值差
      var g1 = g_cz / granularity; //分解为多个小颜色后,两小颜色g值差
      var b1 = b_cz / granularity; //分解为多个小颜色后,两小颜色b值差

      var polygonArr_detail = [];
      var colorList_detail = [];

      //分解为多个点和多个对应的颜色
      for(var i = 0; i < (granularity + 1); i++) {
        polygonArr_detail.push([
          polygonArr[0][0] + (x1*i),
          polygonArr[0][1] + (y1*i)
        ])
        colorList_detail.push([
          parseInt(Number(colorList[0][0]) + (r1*i)),
          parseInt(Number(colorList[0][1]) + (g1*i)),
          parseInt(Number(colorList[0][2]) + (b1*i))
        ])
      }
      //将颜色值加上rbg()
      var colorList_detail1 = colorList_detail.map(item => {
        return 'rgb(' + item.join(",") + ')';
      })

      var polylineArr = polygonArr_detail.map((item, index) => {//创建线
        var polyline1 = new AMap.Polyline({
          path: [item, polygonArr_detail[index + 1]? polygonArr_detail[index + 1]: item],//线条path
          strokeColor: colorList_detail1[index], //线颜色
          strokeOpacity: 1, //线透明度
          strokeWeight: 8,    //线宽
          isOutLine: true,
          borderWeight: 4,
          outlineColor: '#000000',
          lineCap: 'round'
        })
        return polyline1
      })

      return polylineArr;
}

//调用
var polylineGroup = drawLinearGradientPolyline([[116.403322, 39.920255],
        [116.410703, 39.897555]], ['rgb(255,255,0)', 'rgb(255,0,0)']);

//画在地图图层上,map是地图对象
var mapOverLayer= new AMap.OverlayGroup();
map.mapOverLayer(mapOverLayer);//新建图层,将图层添加到地图上
mapOverLayer.addOverlay(polylineGroup);//将处理好的线添加到图层上
map.setFitView(polylineGroup);//定位到线的位置

注意:只能两个颜色渐变,如需要多个渐变色,就将线段切割为多个小线段,只能传rgb()格式色值,如需要传十六进制色值需要转换下,网上好多方法

### 高德地图API实现路径或区域颜色渐变效果 为了实现在高德地图上展示具有颜色渐变效果的路径或者区域,可以借鉴Leaflet中的做法并尝试找到类似的解决方案适用于高德地图API。虽然高德地图官方文档可能未直接提供关于如何创建带有颜色渐变特性的多边形或多段线的具体实例[^3],但是通过自定义样式以及利用Polyline类来绘制线条时调整其属性是可以达成这一目标。 下面是一个基于Vue框架结合高德地图API用于渲染带颜色变化折线的例子: ```javascript // src/views/Home.vue <template> <div id="container"></div> </template> <script> export default { name: 'Home', mounted() { this.initMap(); }, methods: { initMap() { const map = new AMap.Map('container', { zoom: 10, center: [116.397428, 39.90923], // 设置地图中心点坐标 }); let path = [ [116.39, 39.9], [116.40, 39.91], [116.41, 39.92], [116.42, 39.93] ]; function createGradientLine(path) { var gradientColors = ['#FF0000','#FFFF00','#00FF00']; // 渐变色数组 var polyline; for (var i=0; i<path.length-1;i++){ var colorIndex = Math.floor((i/(path.length-2))*(gradientColors.length-1)); if(i===path.length-2){ colorIndex = gradientColors.length - 1; } var segmentPath = [path[i], path[i+1]]; var line = new AMap.Polyline({ path :segmentPath , strokeColor: gradientColors[colorIndex], strokeWeight: 6, strokeOpacity: 0.9 }); line.setMap(map); } } createGradientLine(path); } } } </script> <style scoped> #container{ width: 100%; height: calc(100vh - 20px); /* 调整容器大小 */ } </style> ``` 此代码片段展示了怎样在一个Vue组件内部初始化一个简单的AMap对象,并且定义了一个`createGradientLine()`函数用来根据给定的一系列地理坐标生成一段由不同颜色组成的连续线路。这里采用了循环遍历的方式为每一对相邻节点之间的连接指定不同的色彩值,从而实现了视觉上的过渡效果。 需要注意的是,在实际开发过程中应当依据具体需求灵活修改参数配置,比如改变颜色序列、调节透明度或是增加更多功能特性等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值