CesiumJS 快速开始

2023-09-26 13:49:50

使用cesium真实世界数据快速创建一个cesium app,本次将学习快速启动第一个web 3D应用

创建一个账户,并获取token

Cesium ion 是一个流式的3D地图素材内容的托管平台,我们要使用Cesium的地图在线素材,必须先注册https://ion.cesium.com,然后再复制token才可以使用。

  1. 去创建一个Access Token
  2. 在令牌旁边有个复制按钮,直接复制即可。
Cesium token 示例

配置Cesium客户端

运行 npm install cesium --save 安装依赖

cesium 在运行的时候需要依赖许多静态文件,在使用vite + vue3的项目当中出现大量404的错误,cesium提供了一个全局配置静态文件路径的变量CESIUM_BASE_URL

首先对该变量如下赋值
window.CESIUM_BASE_URL = 'CesiumUnminified';

nodemodules/cesium/Build文件夹下找到CesiumUnminified,将这个文件夹全部复制到public文件夹当中。

vue 复制代码
<script setup lang="ts">
// 这里的 Ion 是上边介绍的存储地图的服务器
import { Cartesian3, createOsmBuildingsAsync, Ion, Math as CesiumMath, Terrain, Viewer } from 'cesium';
import "cesium/Build/Cesium/Widgets/widgets.css";
import { onMounted } from 'vue';

// 静态文件路径配置
window.CESIUM_BASE_URL = 'CesiumUnminified';

Ion.defaultAccessToken = '你的token';

// 等待dom初始化完成
onMounted(async () => {

  // 先创建一个视图,在ID为 cesiumContainer 的html 元素当中 初始化 Cesium 视图区域
  const viewer = new Viewer('cesiumContainer', {
    terrain: Terrain.fromWorldTerrain(),
    animation: false, // 是否显示左下角的仪表盘
    baseLayerPicker: true, // 是否显示图层选择器按钮,右上角那个地图图标
    fullscreenButton: true, // 是否显示全屏按钮
    vrButton: true, // 是否显示VR按钮
    geocoder: true, // 是否显示搜索按钮
    homeButton: true, // 是否显示主页按钮
    infoBox: false, // 是否显示提示信息
    sceneModePicker: true, // 是否显示右上角的模式切换按钮
    selectionIndicator: false, // 是否显示选取指示器组件
    timeline: true, // 是否显示下边的时间轴
    navigationHelpButton: false, // 是否显示右上角的帮助按钮
    navigationInstructionsInitiallyVisible: true, // 是否显示导航
    scene3DOnly: true, // 是否指定仅为三维模式,全部使用三维模式可节约 GPU 资源
    // 在2023.07.03 1.107 版本的更新当中,这个选项被 baseLayer所替代
    imageryProvider: new Cesium.ArcGisMapServerImageryProvider({
          url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
      })
  });

  // 视图上绑定的是相机,在给定的经度、纬度 和 高度,将视图移动到 西安的大雁塔
  viewer.camera.flyTo({
    destination: Cartesian3.fromDegrees(108.970604, 34.224485, 1400),
    orientation: {
      heading: CesiumMath.toRadians(0.0),
      pitch: CesiumMath.toRadians(-15.0),
    }
  });

  // OsmBuildings 是一个全球3D建筑物视图, 添加一个OSM建筑物视图
  const buildingTileset = await createOsmBuildingsAsync();
  viewer.scene.primitives.add(buildingTileset);
})
</script>

<template>
  <div id="cesiumContainer" style="width: 100%;height: 90vh;"></div>
</template>

接下来的学习

  1. 建立航班追踪器:用FlightRadar 24收集雷达数据来想象从弗朗西斯科到哥本哈根的真实的飞行。
  2. 可视化建议的建筑:将真实的城市中的建筑物替换为您自己的3D模型,并查看它如何改变视图。

参考

Cesium更新日志:https://github.com/CesiumGS/cesium/blob/main/CHANGES.md