天地图icon图标与标注文字重合导致被遮盖问题

项目中使用到了天地图,需要标注点icon当做文本标注的文字的背景,首先想到的就是将icon用图片代替,在将标注文字移动到图片上
在这里插入图片描述
拉胯,完全不是想要的效果,去官网看看文本标注的相关api—http://lbs.tianditu.gov.cn/api/js4.0/class.html,看到有对应的api设置,狂喜
在这里插入图片描述

this.map.addOverLay(marker1);
let label = new this.T.Label({
				text: `<span>${item.name}<span>`,
						//点坐标位置
						position: marker1.getLngLat()
						// offset: new this.T.Point(3, -30)
});
label.setBackgroundColor('rgba(255, 255, 255, 0)');
label.setBorderColor('rgba(255, 255, 255, 0)');
label.setFontSize(16);
label.setZindex(999)
label.setFontColor('#fff');
this.map.addOverLay(label);

高兴太早,没卵用
接下来的思路就是将图片跟文字放在画布上,然后将canvas转换成Base格式的图片返回给icon
直接贴代码
canvas

// 将文字图片放在一起转化成Img 在转化为base64
//由于要保证图片加载完成 用到img.onliad方法(异步) 所以采用回调方式返回

export default function (imgUrl, text, index) {
	// console.log('>>>imgUrl, text, index)', imgUrl, text, index);
	return new Promise((resove, reject) => {
		let idName = 'canvas' + index;
		// let imgDom = `<canvas id="test" width="500" height="400"></canvas>`;
		let imgDom = document.createElement('canvas');
		imgDom.setAttribute('id', idName);
		// imgDom.width = '100';
		//宽:由最基础的110+超出五个字的文字拼接长度 高:40
		imgDom.width = (text.length > 4 ? (text.length - 3) * 16 : 0) + 110;
		imgDom.height = '40';
		//画布
		document.body.appendChild(imgDom);
		let canvas = document.getElementById(idName);
		// 画笔
		let ctx = canvas.getContext('2d');
		let img = new Image();
		img.src = imgUrl;

		img.onload = function () {
			// 方法一
			// let ptrn = ctx.createPattern(img, 'no-repeat');
			// ctx.fillStyle = ptrn;
			// ctx.fillRect(0, 0, text.length * 16 + 100, 40);

			// 方法二
			// ctx.drawImage(this, 0, 0, 100, 40);
			ctx.fillStyle = 'rgb(255,255,255)';
			ctx.drawImage(img, 0, 0, (text.length > 4 ? (text.length - 3) * 16 : 0) + 110, 40);

			// 添加文字
			ctx.font = '18px Arial';
			ctx.fillStyle = 'rgb(255,255,255)';
			ctx.fillText(text, 40, 30);
			let img64 = canvas.toDataURL('image/jpeg', 0.5); // toDataUrl可以接收2个参数,参数一:图片类型,参数二: 图片质量0-1(不传默认为0.92)
			document.body.removeChild(canvas);
			resove(img64);
		};
	});
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值