cesium修改TileCoordinatesImageryLayer源码实现随机颜色,点选显示坐标

cesium修改TileCoordinatesImageryLayer源码实现随机颜色,点选显示坐标。

1、修改函数requestImage:实现了随机颜色的瓦片覆盖。

TileCoordinatesImageryProvider.prototype.requestImage = function (
    x,
    y,
    level,
    request
  ) {
    /*随机获取颜色*/
    function getRandomColor() {
        var r = Math.floor(Math.random() * 256);
        var g = Math.floor(Math.random() * 256);
        var b = Math.floor(Math.random() * 256);
        var a=0.3//设置透明度
        return "rgba(" + r + ',' + g + ',' + b + ',' + a +")";
        //return '#' + Math.floor(Math.random() * 0xffffff).toString(16);
     }  

    var canvas = document.createElement("canvas");
    canvas.width = 256;
    canvas.height = 256;
    var context = canvas.getContext("2d");

    var cssColor = this._color.toCssColorString();    
    context.strokeStyle = cssColor;    
    context.lineWidth = 2;
    context.strokeRect(1, 1, 255, 255);
    
    context.fillStyle = getRandomColor();
    context.fillRect(1, 1, 255, 255);

 /*    context.font = "bold 25px Arial";
    context.textAlign = "center";
    context.fillStyle = cssColor;
    context.fillText("L: " + level, 124, 86);
    context.fillText("X: " + x, 124, 136);
    context.fillText("Y: " + y, 124, 186); */

    return canvas;
  };

2、编写函数pickFeatures:实现点选瓦片操作,并在四个角标出经纬度。

TileCoordinatesImageryProvider.prototype.pickFeatures = function (
    x,
    y,
    level,
    longitude,
    latitude
  ) {

    var interval = 180.0 / Math.pow(2, level);
    var lon = (x + 0.5) * interval-180;
    var lat = 90 - (y + 0.5) * interval;
    var step=0.5*interval;

    var labelLevel = 'L:' + level;
    var labelLonMin = 'Lo:'+(lon-step);
    var labelLatMin = 'La:'+(lat-step);
    var labelLonMax = 'Lo:'+(lon+step);
    var labelLatMax = 'La:'+(lat+step);
    

    var canvas = document.createElement("canvas");
    canvas.width = 256;
    canvas.height = 256;
    var context = canvas.getContext("2d");

    //var cssColor = this._color.toCssColorString();

    context.strokeStyle = "#FF0000";//cssColor;
    context.lineWidth = 5;
    context.strokeRect(1, 1, 255, 255);

    context.font = "bold 15px Arial";    
    context.fillStyle = "#000080"//cssColor; 
    context.textAlign = "center";   
    context.fillText(labelLevel, 124, 128);
    context.textAlign = "left";
    context.fillText(labelLonMin, 5, 20);
    context.fillText(labelLatMax, 5, 35);
    
    context.fillText(labelLonMin, 5, 230);
    context.fillText(labelLatMin, 5, 245);

    context.textAlign = "right";
    context.fillText(labelLonMax, 250, 20);
    context.fillText(labelLatMax, 250, 35);
    
    context.fillText(labelLonMax, 250, 230);
    context.fillText(labelLatMin, 250, 245);    
    //console.log(canvas);
      
    var pintest=canvas.toDataURL();
    var imageryLayers = viewer.imageryLayers;
    viewer.entities.removeAll();
    viewer.entities.add({
      name: 'heatmap',
      rectangle: {
          coordinates: Cesium.Rectangle.fromDegrees(lon-step, lat-step, lon+step, lat+step),
          material: new Cesium.ImageMaterialProperty({
              image: pintest,
              transparent: true
          })
  
      }
  });

    return canvas;
  };

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海亲王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值