我希望能够创建一个 div 并给它一个高度、宽度和类。然后将 div 作为广告牌添加到 Cesium 地图。
我可以创建带有图像和标签的广告牌,还找到了有关如何使用 svg 的链接,但我无法弄清楚如何使广告牌包含动态生成的 html。这个项目使用类名将字体图标应用于 div。
有没有办法将 html 插入广告牌?或者还有其他更适合这个的课程吗?我是 Cesium 的新手,愿意接受建议。
我希望能够创建一个 div 并给它一个高度、宽度和类。然后将 div 作为广告牌添加到 Cesium 地图。
我可以创建带有图像和标签的广告牌,还找到了有关如何使用 svg 的链接,但我无法弄清楚如何使广告牌包含动态生成的 html。这个项目使用类名将字体图标应用于 div。
有没有办法将 html 插入广告牌?或者还有其他更适合这个的课程吗?我是 Cesium 的新手,愿意接受建议。
广告牌旨在显示光栅化数据,例如图像。如果您想将 html 呈现给一个,您必须创建一个画布元素,将 dom 元素绘制到它,然后将该画布作为它的图像属性传递给广告牌。
如果您实际上只需要让一个图标/图像可见,然后在用户单击它时显示一些 HTML,那么您应该使用Entity API来创建您的广告牌。当您使用实体 API 时,您会获得额外的属性,例如“描述”。描述可以是静态 HTML 字符串或回调属性,可以根据需要经常更新。当用户选择实体时会显示描述,通常通过鼠标单击,但可以通过viewer.trackedEntity属性以编程方式完成。
var viewer = new Cesium.Viewer('cesiumContainer');
var canvas = document.createElement('canvas');
canvas.width = 300;
canvas.height = 300;
var svgString = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">' +
'<foreignObject width="100%" height="100%">' +
'<div xmlns="http://www.w3.org/1999/xhtml" style="font-size:40px; color: #FF0">' +
'<em>I</em> like' +
'<span style="color:white; text-shadow:0 0 2px blue;">' +
'Cupcakes</span>' +
'</div>' +
'</foreignObject>' +
'</svg>';
var image = new Image();
image.src = 'data:image/svg+xml;base64,' + window.btoa(svgString);
//Need to wait for image to load before proceeding to draw
image.onload = function() {
canvas.getContext('2d').drawImage(image, 0, 0);
viewer.entities.add({
id: 'Cupcake SVG',
position: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),
billboard: {
image: canvas
},
description: '<p>This is a cupcake that can be modified.</p>'
});
};