Cesium自定义渐变字体文本01

需求

加载label标签时,UI设计图是渐变色字体时,Cesium加载处理.

思路

  1. 第一种方法: 加载html标签,写好样式后,监听目标位置并实时计算屏幕坐标更新定位,在地球背面时隐藏,并随视角远近控制大小,距离显隐.
  2. 第二种方法: 直接绘制canvas,绘制好字体输出并加载到地球上
    这里记录第二种方法

实现

绘制canvas

创建容器

const canvas = document.createElement('canvas')

计算画布宽高

根据文本内容长度和字体大小计算宽高

const arr = text.split('')
const width = fontSize*arr.length
canvas.width = width
canvas.height = fontSize

设置字体样式

const ctx = canvas.getContext('2d')
ctx.textBaseline = "top"
ctx.font = `${fontSize}px ${fontFamily}`

渐变处理

const textMetrics = ctx.measureText(text)
//计算字体高度,用于渐变处理,此处示例是上下渐变如果是横向渐变则需要获取宽度
const text_height = textMetrics.actualBoundingBoxDescent
const gradient = ctx.createLinearGradient(0, 0, 0, text_height)
colorArr.forEach(item => {
  gradient.addColorStop(item[0], item[1])
})

填充并输出

ctx.fillStyle = gradient
ctx.fillText(text, 0, 0)
let image = new Image()
image.src = canvas.toDataURL("image/png")

绘制canvas完整代码

getLabel(text, fontSize = 20, fontFamily = 'YouSheBiaoTiHei-2', colorArr = [["0", "#EEEEEE"],["1", "#99C2F5"]]) {
    let canvas = document.createElement('canvas')
    const arr = text.split('')
    const width = fontSize*arr.length
    canvas.width = width
    canvas.height = fontSize
    let ctx = canvas.getContext('2d')
    ctx.textBaseline = "top"
    ctx.font = `${fontSize}px ${fontFamily}`
    let textMetrics = ctx.measureText(text)
    let text_height = textMetrics.actualBoundingBoxDescent
    let gradient = ctx.createLinearGradient(0, 0, 0, text_height)
    colorArr.forEach(item => {
      gradient.addColorStop(item[0], item[1])
    })
    ctx.fillStyle = gradient
    ctx.fillText(text, 0, 0)
    let image = new Image()
    image.src = canvas.toDataURL("image/png")
    return image
  }

创建实体

可以用entity或primitive,entity方式

const url = this.getLabel(name)
const entity = viewer.entities.add({
  position: satelliteEntity.position,
  name: name,
  billboard: {
      image: url,
      scale: 0.7,
      distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
          0,3e7
      ),
      pixelOffset: new Cesium.Cartesian2(20, -20)
  }
})

效果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值