(Vue)使用cesium添加图片无法正常显示(白屏)

在Cesium中尝试添加图片作为椭圆区域的材质时遇到错误:Failed to load image。检查图片路径和图片本身无误。解决方案是通过import导入图片路径,然后在data中定义变量。更新后的代码中,将图片路径设置为material属性,成功在地图上显示椭圆区域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

在cesium中添加一张图片控制台报错Failed to load image
在这里插入图片描述
在地图上无法正常显示
在这里插入图片描述
检查过路径和图片本身都没有问题,代码如下:

var entity = viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(114.77, 30.60),
  ellipse: {
    semiMinorAxis: 250000.0,
    semiMajorAxis: 400000.0,
    material: '../assets/images/test.png'
  }
});
viewer.zoomTo(viewer.entities);

解决方法

将图片路径通过import方法引入,在data中导出

import url from '../assets/images/test.png'
data() {
	 return {
	   imageUrl: url,
	 };
	}, 

在这里插入图片描述

完整代码
<template>
    <div id="cesiumContainer"></div>
</template>

<script>
import url from '../assets/images/test.png'
 export default {
    name: 'mapBox',
    data() {
      return {
        imageUrl: url,
      };
    },
    methods: {
      initMap() {
        const Cesium = this.cesium

        var viewer = new Cesium.Viewer('cesiumContainer', {
          geocoder: false, //查找位置工具,查找到之后会将镜头对准找到的地址,默认使用bing地图
          homeButton: false, //视角返回初始位置
          // sceneModePicker: false,  //选择视角的模式
          // baseLayerPicker: false,  //图层选择器,选择要显示的地图服务和地形服务
          navigationHelpButton: false, //导航帮助按钮,显示默认的地图控制帮助
          animation: false, //左下角的动画控件的显示
          shouldAnimate: false, //控制模型动画
          timeline: false, //时间线,指示当前时间,并允许用户跳到特定的时间
          fullscreenButton: false, //全屏按钮
        })
        
        var entity = viewer.entities.add({
          position: Cesium.Cartesian3.fromDegrees(114.77, 30.60),
          ellipse: {
            semiMinorAxis: 250000.0,
            semiMajorAxis: 400000.0,
            material: this.imageUrl
          }
        });
        viewer.zoomTo(viewer.entities);
      },
    mounted() {
      this.initMap();
    }
  }
</script>
### 集成和使用 CesiumVue 项目 #### 安装依赖库 为了在 Vue 中集成 Cesium,需要安装 `cesium` 库以及其对应的 TypeScript 类型定义文件。通过 npm 或 yarn 可以轻松完成这一步骤。 ```bash npm install cesium @types/cesium --save ``` 或者使用 Yarn: ```bash yarn add cesium @types/cesium ``` 此操作会下载并配置好所需的全部资源[^1]。 #### 创建 Cesium 组件 创建一个新的 Vue 单文件组件来封装 Cesium 的初始化逻辑。下面是一个简单的例子展示如何实现这一点: ```vue <template> <div id="cesiumContainer"></div> </template> <script lang="ts"> import { defineComponent, onMounted } from 'vue'; // 导入 Cesium 并设置路径 import * as Cesium from 'cesium'; export default defineComponent({ name: 'CesiumViewer', setup() { let viewer; onMounted(() => { // 初始化 Cesium Viewer 实例 viewer = new Cesium.Viewer('cesiumContainer', { terrainProvider: new Cesium.CesiumTerrainProvider({ url: 'https://assets.agi.com/stk-terrain/world' }) }); // 设置默认视角位置 const position = Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222); viewer.camera.flyTo({ destination: position, orientation: { heading: Cesium.Math.toRadians(0), pitch: Cesium.Math.toRadians(-90), roll: 0.0 } }); // 清理工作 function cleanup() { if (viewer) { viewer.destroy(); } } window.addEventListener('unload', cleanup); return () => { cleanup(); }; }); return {}; }, }); </script> <style scoped> #cesiumContainer { width: 100%; height: 100vh; } </style> ``` 这段代码展示了怎样在一个 Vue 组件内部加载 Cesium 地图,并设置了基本的地图视图参数[^2]。 #### 解决潜在问题 当引入 Cesium 后可能会遇到一些性能或样式方面的问题。对于这些问题可以采取如下措施解决: - **优化打包体积**: 使用 Webpack 插件如 `webpack-bundle-analyzer` 来分析构建产物大小,从而针对性地减少不必要的模块。 - **调整 CSS 样式冲突**: 如果页面中有其他框架带来的全局样式影响到了 Cesium 显示效果,则可以通过增加特定的选择器优先级方式修复显示异常情况。 以上方法能够帮助开发者顺利地将 Cesium 整合到基于 Vue 构建的应用程序当中[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值