CesiumJs学习笔记1

此为课程 Three.js可视化企业实战WEBGL课CesiumJs篇学习笔记

1. vue3 安装使用CesiumJs

  1. 在 npm install cesium 之后,
  2. 复制node_modules - cesium - Build - Cesium下面的文件
    Assets
    ThirdParty
    Widgets
    Workers
    复制到public下面的cesium下面。
    在这里插入图片描述
  3. 同时复制Widgets复制到src目录下一份
  4. App.vue 代码初始化
<template>
  <div class="cesiumBody" id="cesiumBody" ref="cesiumBody">
  </div>
</template>

<script setup>
import * as Cesium from 'cesium'
import "./Widgets/widgets.css";
import {onMounted} from "vue";
// 设置cesium的静态资源路径
window.CESIUM_BASE_URL = '/'
onMounted(() => {
  var viewer = new Cesium.Viewer('cesiumBody')
})
</script>
<style lang="scss" scoped>
.cesiumBody {
  position: fixed;
  width: 100%;
  height: 100%;
}
</style>

2. CesiumJs 如何使用自己的token

当我们成功安装运行cesium后,在页面底部会有一个提示:
在这里插入图片描述

  1. cesium官网注册登陆后, 进入页面
    在这里插入图片描述
    点击 Access Tokens 复制右边的 Default Token 下方的 Token
  2. 右边的 Regenerate 按钮用来重新生成 token
    在这里插入图片描述
  3. 代码中, 通过 Cesium.Ion.defaultAccessToken 设置token
// 设置cesium token
Cesium.Ion.defaultAccessToken = '你的token'

3. 隐藏各种按钮和logo

  1. logo 显示和隐藏
onMounted(() => {
  var viewer = new Cesium.Viewer('cesiumBody')
  viewer.cesiumWidget.creditContainer.style.display = 'none' // 隐藏logo
})
  1. 右上角按钮的显示和隐藏
    在这里插入图片描述
  var viewer = new Cesium.Viewer('cesiumBody', {
    // 是否显示查询按钮
    geocoder: false,
    // 是否显示home按钮
    homeButton: false,
    // 控制查看器的显示模式
    sceneModePicker: false,
    // 是否显示图层选择器
    baseLayerPicker: false,
    // 是否显示帮助
    navigationHelpButton: false
  })
  1. 时间轴和全屏按钮显示和隐藏
    在这里插入图片描述
var viewer = new Cesium.Viewer('cesiumBody', {
    // 隐藏左下角的仪表盘
    animation: false,
    // 隐藏底部时间轴
    timeline: false,
    // 是否显示全屏按钮
    fullscreenButton:false
  })

4 cesium 的背景改成天空盒子

var viewer = new Cesium.Viewer('cesiumBody', {
    //天空背景
    skyBox: new Cesium.SkyBox({
      sources: {
        positiveX: 'texture/sky/px.jpg',
        negativeX: 'texture/sky/nx.jpg',
        positiveY: 'texture/sky/py.jpg',
        negativeY: 'texture/sky/ny.jpg',
        positiveZ: 'texture/sky/pz.jpg',
        negativeZ: 'texture/sky/nz.jpg',
      }
    })
  })

5. 使用地图

  1. 使用地图其他的地图, 在 viewer 的第二个参数内添加
 // 天地图矢量路径图
    imageryProvider: new Cesium.WebMapTileServiceImageryProvider({
      url: 'http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=开发者key',
      layer: 'tdtBasicLayer',
      style: 'default',
      format: 'image/jpeg',
      tileMatrixSetID: 'GoogleMapsCompatible'
    })
//  使用openStreetMap地图
 	imageryProvider: new Cesium.OpenStreetMapImageryProvider({
      url: 'https://a.tile.openstreetmap.org/'
    })
// 高德矢量地图,
    imageryProvider: new Cesium.UrlTemplateImageryProvider({
      url: "http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
      layer: "tdtVecBasicLayer",
      style: "default",
      format: "image/png",
      tileMatrixSetID: "GoogleMapsCompatible",
    }),
  1. 叠加地图
// 地图叠加
var imageryLayers = viewer.imageryLayers;
var layer = imageryLayers.addImageryProvider(new Cesium.UrlTemplateImageryProvider({
	url: "http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
	layer: "tdtVecBasicLayer",
	style: "default",
	format: "image/png",
	tileMatrixSetID: "GoogleMapsCompatible",
}))
layer.alpha = 0.5
  1. 设置地形 在 viewer 的第二个参数内添加
    // 设置地形, 让山脉看起来有凹凸不平的效果,
    terrainProvider:Cesium.createWorldTerrain(),
// 设置水面有一种波光粼粼的波浪效果
	terrainProvider: Cesium.createWorldTerrain({
  		requestWaterMask: true,
  		requestVertexNormals: true
	}),
// 设置自定义地形数据
	terrainProvider: new Cesium.CesiumTerrainProvider({
  		url: './terrains/gz'
	}),

6. cesium 坐标系

  // 角度转弧度
  var radians = Cesium.Math.toRadians(90)
// 弧度转角度
  var degrees = Cesium.Math.toDegrees(2 * Math.PI);
  // 将经纬度转为笛卡尔坐标
  var cartesian3 = Cesium.Cartesian3.fromDegrees(
      // 经度
      89.5,
      // 纬度
      20.4,
      // 高度
      100
  )
// 将笛卡尔坐标转为经纬度坐标
var cartographic = Cesium.Cartographic.fromCartesian(cartesian3)

7. cesium 相机

  1. cesium 相机位置
// 生成position北京天安门位置
  var cartesian3 = Cesium.Cartesian3.fromDegrees(
      // 经度
      116.397428,
      // 纬度
      39.90923,
      // 高度
      100
  )
  viewer.camera.setView({
    // 指定相机的位置
    destination: cartesian3,
  })

viewer.camera.setView({
    // 指定相机的位置
    destination: cartesian3,
    orientation: {
      // 指定相机的朝向
      heading: Cesium.Math.toRadians(0),
      // 控制相机的俯仰角
      pitch: Cesium.Math.toRadians(-90),
      // 指定相机的滚转角
      roll: 0
    }
  })
  1. cesium让相机飞到某个位置
viewer.camera.flyTo({
    // 指定相机的位置
    destination: cartesian3,
    orientation: {
      // 指定相机的朝向
      heading: Cesium.Math.toRadians(0),
      // 控制相机的俯仰角
      pitch: Cesium.Math.toRadians(-90),
      // 指定相机的滚转角
      roll: 0
    }
  })
  1. 通过按键移动相机
document.addEventListener("keydown", (e) => {
    var height = viewer.camera.positionCartographic.height;
    var moveRate = height / 100
    if (e.key == 'w') {
      // 设置相机向前移动
      viewer.camera.moveForward(moveRate)
    } else if (e.key == 's') {
      // 设置相机向后移动
      viewer.camera.moveBackward(moveRate);
    } else if (e.key == 'a') {
      // 设置相机向左移动
      viewer.camera.moveLeft(moveRate);
    } else if (e.key == 'd') {
      // 设置相机向右移动
      viewer.camera.moveRight(moveRate);
    } else if (e.key == 'q') {
      // 设置相机向左旋转
      viewer.camera.lookLeft(Cesium.Math.toRadians(0.1));
    } else if (e.key == 'e') {
      // 设置相机向右旋转
      viewer.camera.lookRight(Cesium.Math.toRadians(0.1));
    } else if (e.key == 'r') {
      // 设置相机向上旋转
      viewer.camera.lookUp(Cesium.Math.toRadians(0.1));
    }else if (e.key == 'f') {
      // 设置相机向下旋转
      viewer.camera.lookDown(Cesium.Math.toRadians(0.1));
    }else if (e.key == 'g') {
      // 设置相机逆时针翻滚
      viewer.camera.twistLeft(Cesium.Math.toRadians(0.1));
    }else if (e.key == 'h') {
      // 设置相机逆时针翻滚
      viewer.camera.twistRight(Cesium.Math.toRadians(0.1));
    }
  })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值