cesium中的Billboard Label在旋转地球的时候始终是面向屏幕的,如果想实现Billboard Label贴在地表上,不随视角转动而变化,可以转换思路,用polygon或者rectangle采用图片材质实现。
1、Billboard
实现Billboard贴在地表上比较简单,可以直接转成polygon+ImageMaterialProperty实现。
let p1 = [115.000454, 37.000292];
let p2 = [114.999768, 37.00046];
let p3 = [114.999322, 37.000266];
let p4 = [114.999351, 36.999761];
let p5 = [115.000598, 36.999793];
viewer.entities.add({
polygon: {
hierarchy: Cesium.Cartesian3.fromDegreesArray([p1[0], p1[1], p2[0], p2[1], p3[0], p3[1], p4[0], p4[1], p5[0], p5[1]]),
material: new Cesium.ImageMaterialProperty({
image: `/img.png`
}),
}
});
2、Label
实现Label贴在地表上原理和Billboard一致,但是Label是文字,并不是一张图片,这时候可以用canvas画一张图片作为material的image,画出来的图片也是指向正北方向。
let p1 = [115.000454, 37.000292];
let p2 = [114.999768, 37.00046];
let p3 = [114.999322, 37.000266];
let p4 = [114.999351, 36.999761];
let p5 = [115.000598, 36.999793];
viewer.entities.add({
polygon: {
hierarchy: Cesium.Cartesian3.fromDegreesArray([p1[0], p1[1], p2[0], p2[1], p3[0], p3[1], p4[0], p4[1], p5[0], p5[1]]),
material: new Cesium.ImageMaterialProperty({
image: drawText()
}),
}
});
function drawText(style) {
const text = 'hello world';
var c = document.createElement("canvas");
c.width = 130;
c.height = 30;
var ctx = c.getContext("2d");
ctx.fillStyle = '#f00';
ctx.font = "14 px 微软雅黑";
ctx.textBaseline = 'hanging';
//绘制文本
ctx.fillText(text, 5, 5);
return c;
}
代码下载地址:https://download.csdn.net/download/AllBluefm/88802087