Cesium笔记 canvas定制billboard

devtools/2024/9/29 15:19:02/

Cesium 中label时,想要设置text的背景图片时,label没有backgroundimage属性。

如果使用label+billboard 的方式设置,会存在文本长短不一时,图片不能自适应等问题。

const showLabelFun = (dataMcInfo, backgroundcolor) => {var c = document.createElement('canvas')var settings = {canvas: c,canvasWidth: getTextWidth(dataMcInfo, "12px 'Microsoft Yahei'") + 20, //canvas的宽度canvasHeight: 36, //canvas的高度drawStartX: 10, //绘制字符串起始x坐标 距离左侧drawStartY: 22, //绘制字符串起始y坐标 距离顶部font: "12px 'Microsoft Yahei'", //文字样式text: dataMcInfo, //需要绘制的文本color: '#ffffff', //"#000000", //文字的颜色backgroundColor: backgroundcolor, //"#ffffff"//背景颜色innerGlowColor: '#00ff96'}function getTextWidth(text, font) {var canvas = document.createElement('canvas')var context = canvas.getContext('2d')context.font = fontvar metrics = context.measureText(text)return metrics.width}//绘制带有圆角的背景CanvasRenderingContext2D.prototype.roundRect = function (x, y, width, height, radius, fill, stroke) {if (typeof stroke == 'undefined') {stroke = false}if (typeof radius === 'undefined') {radius = 5}this.beginPath()this.moveTo(x + radius, y)this.lineTo(x + width - radius, y)this.quadraticCurveTo(x + width, y, x + width, y + radius)this.lineTo(x + width, y + height - radius)this.quadraticCurveTo(x + width, y + height, x + width - radius, y + height)this.lineTo(x + radius, y + height)this.quadraticCurveTo(x, y + height, x, y + height - radius)this.lineTo(x, y + radius)this.quadraticCurveTo(x, y, x + radius, y)this.fillStyle = settings.backgroundColorthis.closePath()if (stroke) {this.stroke()}if (fill) {this.fill()}}//获取2d的上线文开始设置相关属性var canvas = settings.canvascanvas.width = settings.canvasWidthcanvas.height = settings.canvasHeightvar ctx = canvas.getContext('2d')//绘制带有圆角的背景ctx.roundRect(0, 0, canvas.width, canvas.height, 15, true)//填充文字ctx.font = settings.fontctx.fillStyle = settings.colorctx.fillText(settings.text, settings.drawStartX, settings.drawStartY)//ctx.fillText('速度:30 km/h', settings.drawStartX, settings.drawStartY + 20)return canvas.toDataURL()//下载图片测试查看//var src = canvas.toDataURL();// var a = document.createElement('a');// var event = new MouseEvent('click');// a.download = (new Date()).getTime() + ".jpg"; // 指定下载图片的名称// a.href = src;// a.dispatchEvent(event); // 触发超链接的点击事件
}

使用

 viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(lng, lat, alt), //坐标billboard: {image: showLabelFun(projectName, color),pixelOffset: new Cesium.Cartesian2(0, -50),disableDepthTestDistance: Number.POSITIVE_INFINITY //被建筑物遮挡问题}})

http://www.ppmy.cn/devtools/118747.html

相关文章

基于Next.js和TailwindCss的TailwindCss

最近在研究 Next.js 和 TailwindCss ,这两天没事的时候就搞了一个 c。 目前工具部署在 Vercel ,欢迎各位体验(能提出意见更好嘿嘿) 体验地址: https://icon.999872.xyz/ 图片预览 👇

IOS-IPA签名工具 request_post 任意文件读取复现

0x01 产品描述: 苹果手机中的IPA是指iOS应用程序(iPhone应用程序)的安装包文件,其文件扩展名为.ipa。IPA文件是经过编译的、已签名的应用程序文件,可以在iOS设备上安装和运行。通常,开发者通过Xcode等开发工…

alpine安装docker踩坑记

文章目录 前言错误场景正确操作最后 前言 你好,我是醉墨居士,最近使用alpine操作系统上docker遇到了一些错误,尝试解决之后就准备输出一篇博客,帮助有需要的后人能够少踩坑,因为淋过雨所以想给别人撑伞 错误场景 我…

MATLAB编写的RSSI在三维空间上的定位程序,锚点数量无限制(可自定义),带中文注释

文章目录 程序说明功能概述环境设置结果可视化函数定义运行结果程序获取 程序说明 功能概述 该程序实现了在三维空间中通过接收信号强度指示(RSSI)进行定位的功能。利用多个锚节点的信号强度测量,估计未知点的位置。该程序适用于无线定位应…

《深度学习》卷积神经网络 使用最优模型、调整学习率 用法解析及案例实现

目录 一、使用最优模型 1、什么是最优模型 2、如实使用最优模型 1)读取参数方法 2)调用完整模型方法 3)实例 完整代码: 打印结果: 二、调整学习率 1、什么是调整学习率 2、目的 3、调整学习率的方法 1&am…

前端文件上传全过程

特别说明:ui框架使用的是蚂蚁的antd 这里主要是学习前端上传接口的传递参数包括前端上传之前对于代码的整理 一、第一步将前端页面画出来 源代码: /** 费用管理 - IT费用管理 - 费用数据上传 */ import { useState } from "react"; import {…

《AI设计类工具系列之一——FigJam AI》

一.简介 官网:FigJam AI | Figma FigJam AI是Figma为其协作白板服务FigJam最新推出的AI套件,该工具旨在通过生成式AI技术,帮助设计师和团队协作减少在准备协作项目时所需的时间,从而更专注于创意和设计本身。 二.功能介绍 1. 生成模板 即时生成模板:用户只需输入简单的…

一文上手Kafka【下】

一、kafka集群概述 1.1 集群的概念 在 Kafka当中,集群可以通俗地理解为一群协同工作的 “小伙伴”。你可以理解为现在有一个快递分发中心,这个分发中心就像是 Kafka 集群。 这个快递分发中心里有很多的工作人员,每个工作人员都可以接收包裹&#xff08…