【Cesium】Cesium图层哀求完成的回调

[复制链接]
发表于 2026-2-5 02:45:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
有一个业务须要用到cesium图层哀求完成的回调,翻了好久的文档终于给我找到🌶️。

是Cesium.ImageryProvider类的一个属性readyPromise
结果如下:

  Cesium图层哀求完成的回调

完备代码如下:
  1. <html lang="en">
  2. <head>
  3.     <meta charset="utf-8">
  4.     <!-- Include the CesiumJS JavaScript and CSS files -->
  5.     <script src="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Cesium.js"></script>
  6.     <link href="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
  7.     <style>
  8.         .button {
  9.             width: 80px;
  10.             height: 30px;
  11.             background-color: rgba(92, 38, 116, 0.818);
  12.             cursor: pointer;
  13.             padding: 10px;
  14.             color: #fff;
  15.             text-align: center;
  16.             line-height: 50px;
  17.             border-radius: 10px;
  18.         }
  19.     </style>
  20. </head>
  21. <body>
  22.     <div id="cesiumContainer">
  23.         <span id="addLayer" class="button">添加图层</span>
  24.         <span id="removeLayer" class="button">移除图层</span>
  25.     </div>
  26.     <script type="module">
  27.         Cesium.Ion.defaultAccessToken = ';
  28.         const viewer = new Cesium.Viewer('cesiumContainer', {
  29.         });
  30.         viewer.camera.setView({
  31.             destination: Cesium.Cartesian3.fromDegrees(105, 35, 3456789),
  32.             orientation: {
  33.                 heading: Cesium.Math.toRadians(360), //方向
  34.                 pitch: Cesium.Math.toRadians(-90), //俯仰角
  35.                 roll: Cesium.Math.toRadians(0),
  36.             },
  37.         });
  38.         let layer = null;
  39.         // 添加图层(async/await语法糖)
  40.         async function addLayer() {
  41.             let url = './assets/lyy.jpg';
  42.             let rectangleArr = [100.0, 30.0, 110.0, 40.0]
  43.             const singleTileImageryProvider = new Cesium.SingleTileImageryProvider({
  44.                 url: url,
  45.                 rectangle: new Cesium.Rectangle(
  46.                     ...rectangleArr.map(item => Cesium.Math.toRadians(item))
  47.                 ),
  48.             });
  49.             console.log("开始请求图层");
  50.             try {
  51.                 // ⭐关键代码⭐
  52.                 const res = await singleTileImageryProvider.readyPromise;
  53.                 if (res) {
  54.                     console.log("图层请求成功");
  55.                 } else {
  56.                     console.log("图层请求失败");
  57.                 }
  58.             } catch (error) {
  59.                 console.error("图层请求时发生错误:", error);
  60.             }
  61.             // 将imageryProvider添加到地图的图层列表中,使得图层可以在地图上显示
  62.             return viewer.imageryLayers.addImageryProvider(
  63.                 singleTileImageryProvider
  64.             );
  65.         }
  66.         /*
  67.         // 添加图层(Promise)
  68.         function addLayer() {
  69.             return new Promise((resolve, reject) => {
  70.                 let url = './assets/lyy.jpg';
  71.                 let rectangleArr = [100.0, 30.0, 110.0, 40.0];
  72.                 const singleTileImageryProvider = new Cesium.SingleTileImageryProvider({
  73.                     url: url,
  74.                     rectangle: new Cesium.Rectangle(
  75.                         ...rectangleArr.map(item => Cesium.Math.toRadians(item))
  76.                     ),
  77.                 });
  78.                 console.log("开始请求图层");
  79.                 singleTileImageryProvider.readyPromise.then(res => {
  80.                     if (res) {
  81.                         console.log("图层请求成功");
  82.                         resolve(viewer.imageryLayers.addImageryProvider(singleTileImageryProvider));
  83.                     } else {
  84.                         console.log("图层请求失败");
  85.                         reject(new Error("图层请求失败"));
  86.                     }
  87.                 }).catch(error => {
  88.                     console.error("图层请求时发生错误:", error);
  89.                     reject(error);
  90.                 });
  91.             });
  92.         }
  93.         */
  94.         // 移除图层
  95.         function removeLayer() {
  96.             viewer.imageryLayers.remove(layer)
  97.         }
  98.         // 给按钮添加点击事件
  99.         document.getElementById("addLayer").onclick = async () => {
  100.             layer = await addLayer()
  101.         };
  102.         document.getElementById("removeLayer").onclick = () => {
  103.             removeLayer()
  104.         };
  105.     </script>
  106.     </div>
  107. </body>
  108. </html>
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表