天地图Label文字居中

在使用自定义Label的时候,我们有文字居中显示的需求,但是天地图4.0截止2025年3月26日,官方并没有提供api方式;

效果图

核心方法
typescript 复制代码
// 借用canvas获取文字宽度高度
function getTextSize(text: string, font: string) {
	// 创建一个 canvas 元素
	const canvas = document.createElement('canvas');
	// 获取其 2D 绘图上下文
	const context: any = canvas.getContext('2d');
	// 设定字体样式
	context.font = `${font}`;
	// 测量文本宽度和高度
	const metrics = context.measureText(text);
	// 文本宽度和高度
	const width = metrics.width;
	const height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;
	// 释放对 canvas 的引用,让垃圾回收机制可以回收它
	canvas.remove(); 
	return {textWidth: width, textHeight: height};
}
调用
typescript 复制代码
const {textWidth, textHeight} = methods.getTextSize('北京市小店区', 'normal 12px Arial');
const label= new T.Label({
	text: "北京市小店区",
	position: label.getLngLat(),
	/* textWidth/2: 宽度的一半
	   +10 是因为天地图默认样式是padding: 0 10;
	   -(textWidth / 2 + 10): 意思是向左偏移
	*/
	offset: new T.Point(-(textWidth / 2 + 10), -4)
});
// 自定义样式
label.setBackgroundColor('rgba(191, 224, 255, .11)');
label.setBorderColor('rgba(255, 255, 255, .2)');
label.setFontColor('#fff');
label.setFontSize(12);
// 追加到地图
map.addOverLay(label);
相关推荐
木斯佳14 小时前
前端八股文面经大全:26届秋招滴滴校招前端一面面经-事件循环题解析
前端·状态模式
光影少年15 小时前
react状态管理都有哪些及优缺点和应用场景
前端·react.js·前端框架
saber_andlibert16 小时前
TCMalloc底层实现
java·前端·网络
逍遥德16 小时前
如何学编程之01.理论篇.如何通过阅读代码来提高自己的编程能力?
前端·后端·程序人生·重构·软件构建·代码规范
冻感糕人~16 小时前
【珍藏必备】ReAct框架实战指南:从零开始构建AI智能体,让大模型学会思考与行动
java·前端·人工智能·react.js·大模型·就业·大模型学习
程序员agions16 小时前
2026年,“配置工程师“终于死绝了
前端·程序人生
alice--小文子17 小时前
cursor-mcp工具使用
java·服务器·前端
晚霞的不甘17 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
小迷糊的学习记录17 小时前
0.1 + 0.2 不等于 0.3
前端·javascript·面试
梦帮科技18 小时前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json