Cesium性能优化:高效加载billboard图标和label文字标签

目录

性能优化:从一个警告谈起

 关于getImageData方法

Label:回溯Label底层渲染机制

LabelCollection集合与Label标签

LabelCollection:添加Label

Label:构造函数

 Label:_updateClamping实例方法

Billboard:以图片方式进行加载

Label与Billboard:高效加载方案

动态绘制任意长度的文本

Label绘制:以canvas+Billboard形式绘制

代码片段封装


性能优化:从一个警告谈起

        前几天使用Cesium.js加载大量的Label文字标签时,突然发现场景会变得很卡顿,然后打开开发者工具,发现出现了一个从未注意到过的浅黄色警告(如下图所示)。

        起初我并未将这个警告和场景渲染大量Label文字标签时,表现出来的卡顿现象联系到一起,直到客户提出这个问题之后。。。

        为了追根溯源,我将之前所有的代码挪到示例Demo中,尝试进行问题复现,于是就定位到了通过LabelCollection加载Label标签会出现黄色警告这个地方。

         这个警告,即时是在官网sandcastle的示例demo中,也是存在的。于是更加好奇,这个警告的具体含义。

​ Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true.

大致意思是:

Canvas2D:getImageData()方法的复杂回调,在willReadFrequently属性设置为true时,效率更高。

<
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
### 回答1: 你可以使用 Cesium 的 `LabelCollection` 和 `PointPrimitiveCollection` 类来实现文字标签数据的加载。 下面是一个示例,展示了如何在 Cesium加载文字标签数据: ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); // 创建 LabelCollection 实例 var labels = viewer.scene.primitives.add(new Cesium.LabelCollection()); // 创建第一个文字标签 var label1 = labels.add({ text: 'Label 1', position: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), font: '24px sans-serif' }); // 创建第二个文字标签 var label2 = labels.add({ text: 'Label 2', position: Cesium.Cartesian3.fromDegrees(-80.50, 35.14), font: '24px sans-serif' }); // 创建 PointPrimitiveCollection 实例 var points = viewer.scene.primitives.add(new Cesium.PointPrimitiveCollection()); // 创建第一个 var point1 = points.add({ position: Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222), color: Cesium.Color.YELLOW, pixelSize: 10 }); // 创建第二个 var point2 = points.add({ position: Cesium.Cartesian3.fromDegrees(-80.2277778, 25.7888889), color: Cesium.Color.BLUE, pixelSize: 10 }); ``` 在上面的示例中,我们首先创建了一个 `Viewer` 实例,然后创建了一个 `LabelCollection` 和一个 `PointPrimitiveCollection`。接下来,我们使用 `add` 方法在这两个集合中分别添加了两个文字标签和两个。 注意,你还可以使用其他选项(如颜色、大小等)来调整标签和 ### 回答2: 要实现Cesium加载文字标签数据,可以按照以下步骤进行操作: 1. 引入Cesium库:在HTML中引入Cesium库的脚本文件,确保能够正确加载和使用Cesium。 2. 创建Cesium场景:在JavaScript代码中,创建一个Cesium场景对象,用于渲染和显示地球场景。 3. 创建文字标签:使用Cesium中的Entity API,通过创建Entity对象来表示文字标签。可以设置标签的位置、文本内容、样式等属性。 4. 添加文字标签:将创建的文字标签实体对象添加到场景中,使用场景的entities属性进行添加。 5. 创建数据:同样使用Entity API,创建一个Entity对象来表示数据。可以设置的位置、样式、颜色等属性。 6. 添加数据:将创建的数据实体对象添加到场景中,同样使用场景的entities属性进行添加。 7. 设置相机视角:可以通过调整相机的位置和朝向来设置地球场景的视角,确保能够合适地展示文字标签数据。 8. 运行程序:在网页中运行该程序,Cesium会根据设置的文字标签数据渲染地球场景,并显示在相应的位置上。 总结来说,要实现Cesium加载文字标签数据,需要引入Cesium库,在JavaScript中创建场景对象,创建文字标签数据的实体对象,然后将它们添加到场景中,并设置相机视角。最后,在网页中运行程序即可实现加载文字标签数据的效果。 ### 回答3: 要实现Cesium加载文字标签数据,需要按照以下步骤进行操作: 1. 首先,确保你已经在项目中引入了Cesium库文件,并可以正确地加载Cesium地球场景。 2. 创建一个新的Cesium.Entity对象,该对象可以包含要显示在地球上的标签数据。你可以使用Cesium.Cartesian3类型来指定每个数据的位置。 3. 为每个数据添加文本标签。你可以使用Cesium.LabelGraphics对象来定义文本标签的外观和样式。在此对象中,你可以设置文本内容、字体、大小、颜色等属性。 4. 创建数据的图形表示。你可以使用Cesium.PointGraphics对象来定义的外观和样式。在此对象中,你可以设置的大小、颜色、轮廓颜色等属性。 5. 将创建的标签数据的图形表示添加到Entity对象中,使用Cesium的entity.label和entity.point属性分别设置。 6. 最后,将创建的Entity对象添加到Cesium的viewer.entities集合中,以在地球上显示标签数据。 以下是示例代码: ```javascript // 创建一个显示标签数据的Cesium.Entity对象 var entity = new Cesium.Entity({ position: Cesium.Cartesian3.fromDegrees(lon, lat), // 设置数据的经纬度位置 label: { text: '标签内容', // 设置标签的文本内容 font: 'bold 14px sans-serif', fillColor: Cesium.Color.RED, // 设置标签的填充颜色 verticalOrigin: Cesium.VerticalOrigin.BOTTOM // 设置标签的垂直对齐方式 }, point: { pixelSize: 10, // 设置的大小 color: Cesium.Color.YELLOW, // 设置的颜色 outlineColor: Cesium.Color.BLACK, // 设置的轮廓颜色 outlineWidth: 2 // 设置的轮廓宽度 } }); // 将创建的Entity对象添加到Cesium的viewer.entities集合中 viewer.entities.add(entity); ``` 通过以上步骤,你就可以在Cesium地球上成功加载显示文字标签数据了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是席木木啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值