我目前正在将 Cesium 用于地图应用程序,并且我需要为我正在绘制的每个项目都有状态指示器(例如,如果我正在绘制的项目是一架飞机,那么我需要有一个燃料状态指标)。我不能使用 Cesium 的绘图工具来执行此操作,因为它们是使用地理位置绘制的,但我需要我的状态指示器简单地位于广告牌附近,而不是随着用户放大和缩小而远离广告牌。
Cesium 的 CZML 文档指出广告牌的“图像”属性可以采用数据 URI,所以我认为处理这个问题的最简单方法是动态创建一个 SVG 路径并将其嵌入到图像属性中,但是当我这样做时这在铯中,它没有出现。例如,我尝试了这样一个简单的测试:
"data:image/svg+xml,<svg viewBox='0 0 40 40' height='25' width='25'
xmlns='http://www.w3.org/2000/svg'><path fill='rgb(91, 183, 91)' d='M2.379,
14.729L5.208,11.899L12.958,19.648L25.877,6.733L28.707,9.561L12.958,25.308Z'
/></svg>"
当那没有出现时,我只尝试了简单的 HTML 和文本值,如下所示:
"data:,Hello%2C%20World!"
和:
"data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E"
但那些也没有出现。如果我将 base64 字符串放在数据 URI 中,以及存储在服务器上的图像的路径,我就能显示一个 png,但我确实需要能够动态绘制自定义图像。我不能使用一组具有各种状态的固定预生成图像作为破解(如果有人想要这些细节,我可以解释为什么:))。
有谁知道我在这里做错了什么,或者是否有另一种方法来完成我需要做的事情?
编辑只是想补充一点,我使用的是 Firefox 版本 29,它通常没有问题显示像这样的非编码嵌入式 SVG。以防万一,这也是我尝试简单 HTML 或文本的原因之一。
Edit2我正在使用来自后端的 CZML 流来绘制我的项目,这是一个简单的测试示例,显示了我试图放置图像信息的位置:
{
"id":"test",
"billboard" : {
"image" : "data:image/svg+xml,<svg viewBox='0 0 40 40' height='25' width='25' xmlns='http://www.w3.org/2000/svg'><path fill='rgb(91, 183, 91)' d='M2.379,
14.729L5.208,11.899L12.958,19.648L25.877,6.733L28.707,9.561L12.958,25.308Z'
/></svg>",
"show" : [ {"boolean" : true} ]
},
"position":{
"cartographicDegrees":[0.0, 0.0, 0.0]
},
"label":{"text":"TEST"},
}
如果我在其中放置一个 base64 png 字符串,或者一个静态图像文件的路径,它就可以正常工作。
谢谢!