Cesium加载带有背景图(包含多个背景图,图标和文字并排)的billboard

思路:如果是简单的背景加文字,背景图会把文字挡住,又或者是背景图要有图标加文字,这时需要用canvas将背景图,图标和文字合并成一张图片,加载billboard的时候直接加载合成之后的图片即可。

let canvas = document.createElement("canvas");
canvas.width = 100;
canvas.height = 30;
let context = canvas.getContext("2d");
context.rect(0, 0, canvas.width, canvas.height);
let bgImg = new Image();
bgImg.src = require("../img/bg.png"); // 背景图的url
bgImg.crossOrigin = "Anonymous";
bgImg.onload = () => {
  context.drawImage(bgImg, 0, 0, 100, 30);
  let img = new Image();
  img.src = require("../img/icon.png"); // 需要合进去的图片url
  img.crossOrigin = "Anonymous";
  img.onload = () => {
    // 在这里加入文字标签
    context.fillStyle = '#ffffff'; // 设置文字的填充颜色
    context.font = 'italic 15px Georgia'; // 设置文字的填充样式
    context.fillText("文本内容", 10, 20);
    context.drawImage(img, 0, 0, 16, 16);

    let base64 = canvas.toDataURL("image/png");
    this.viewer.entities.add({
      position: Cesium.Cartesian3.fromDegrees(Number(lng), Number(lat), 0),
      billboard: {
        image: base64,
        heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
        verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
        disableDepthTestDistance: Number.POSITIVE_INFINITY,
        pixelOffset: new Cesium.Cartesian3(0, 0), //偏移量
      }
    });
  };
}

 

posted @ 2024-07-29 12:00  我的webgis之路  阅读(2)  评论(0编辑  收藏  举报