cesium 大量标注点位 Primitives与BillboardCollection结合

在处理大量房屋点位时,使用entity导致了渲染卡顿。文章介绍了转向使用Cesium的BillboardCollection来改善性能,BillboardCollection是渲染集合,适合大批量点位显示。通过加载房屋点位数据并逐个添加到BillboardCollection中,实现了高效展示。同时,提供了清除和添加billboard的方法。

在这里插入图片描述

项目中的房屋点位有1000多个,使用entity造成渲染卡顿,经过我的网上翻阅,大多优秀的网友推荐了Primitives的写法
primitiveentity

  • primitive更多的是面向图形开发人员的底层API,暴露最小限度的抽象,更多使用图形学术语,具有更大的灵活性。

  • entity是更高级别的数据驱动API,它使用一致性设计的、高级别对象来管理一组相关性的可视化对象,其底层也是使用的primitive。

Cesium内部为我们提供了几个可渲染的集合像PointPrimitiveCollection、BillboardCollection等等,这里我们就可以用到BillboardCollection
在这里插入图片描述
上代码

 billboards = viewer.scene.primitives.add(new Cesium.BillboardCollection());
 // 加载房屋点位 数据请求
  const getHouse = () => {
   
   
    clearBillboard();
    requestApi.
### Cesium点位标注实现方法 在Cesium中,点位标注功能可以通过多种方式实现。以下是一个完整的示例代码,展示如何在地图上添加点位标注,并结合点击事件进行交互。 #### 示例代码 ```javascript // 初始化viewer对象 let viewer = new Cesium.Viewer('cesiumContainer'); // 定义一个点的坐标 let position = Cesium.Cartesian3.fromDegrees(-122.4175, 37.655, 400); // 添加点位标注 let entity = viewer.entities.add({ position: position, point: { pixelSize: 10, // 点的大小 color: Cesium.Color.RED, // 点的颜色 outlineColor: Cesium.Color.WHITE, // 边框颜色 outlineWidth: 2 // 边框宽度 }, label: { text: '标注点', // 标签文本 font: '16px sans-serif', // 字体样式 fillColor: Cesium.Color.BLACK, // 文本颜色 showBackground: true, // 是否显示背景 backgroundColor: Cesium.Color.WHITE.withAlpha(0.8) // 背景颜色 } }); // 刷新场景以显示实体 viewer.zoomTo(viewer.entities); // 实现点击事件处理 let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); handler.setInputAction(function (click) { let pickedObject = viewer.scene.pick(click.position); if (Cesium.defined(pickedObject) && Cesium.defined(pickedObject.id)) { // 如果点击了某个实体 let clickedEntity = pickedObject.id; if (clickedEntity.label) { alert('点击了标注点:' + clickedEntity.label.text); // 弹出提示 } } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); ``` #### 说明 上述代码实现了以下功能: - 使用 `viewer.entities.add` 方法添加一个带标注的点[^1]。 - 设置点的大小、颜色和边框属性,确保其在地图上清晰可见。 - 添加标签(label),并设置字体、颜色以及背景样式。 - 使用 `ScreenSpaceEventHandler` 监听鼠标点击事件,判断是否点击了某个点位,并弹出提示信息[^2]。 #### 注意事项 - 在实际应用中,可能需要根据具体需求调整点的样式、标签内容以及其他交互逻辑。 - 如果需要动态添加或删除点位,可以使用 `viewer.entities.add` 和 `viewer.entities.remove` 方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值