• VUE-cesium(综合demo-01配置基础项)


    目录

    1. 项目创建

    2. 地图初始化配置

    3. 设置鼠标位置动态经纬度小组件

    4. 配置cesium罗盘小组件

    4.1 安装 cesium-navigation-es6 插件

    4.2 配置罗盘样式

    5. 修改App.vue

    6. 实现效果:


    1. 项目创建

    VUE3构建Cesium项目_HM-hhxx!的博客-CSDN博客_cesium vue3使用VUE3构建cesium项目https://blog.csdn.net/damadashen/article/details/124896474?spm=1001.2014.3001.5502

    2. 地图初始化配置

    在文件夹中通过创建initViewer对cesium项目进行基础配置,initViewer.js如下:

    1. import * as Cesium from "cesium";
    2. export default function initViewer() {
    3. // 设置cesium token
    4. Cesium.Ion.defaultAccessToken =
    5. "-----------YourToken-----------------------";
    6. // 设置cesium静态资源路径
    7. window.CESIUM_BASE_URL = "/";
    8. // 设置cesium默认视角
    9. Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(
    10. // 西边的经度
    11. 89.5,
    12. // 南边维度
    13. 20.4,
    14. // 东边经度
    15. 110.4,
    16. // 北边维度
    17. 61.2
    18. );
    19. var viewer = new Cesium.Viewer("cesiumContainer", {
    20. // 是否显示信息窗口
    21. // infoBox: false,
    22. // 是否显示查询按钮
    23. geocoder: false,
    24. // 不显示home按钮
    25. homeButton: false,
    26. // 控制查看器的显示模式
    27. sceneModePicker: false,
    28. // 是否显示图层选择
    29. baseLayerPicker: false,
    30. // 是否显示帮助按钮
    31. navigationHelpButton: false,
    32. // 是否播放动画
    33. animation: false,
    34. // 是否显示时间轴
    35. timeline: false,
    36. // 是否显示全屏按钮
    37. fullscreenButton: false,
    38. shouldAnimate: true,
    39. });
    40. // 设置沙箱允许使用js
    41. var iframe = document.getElementsByClassName("cesium-infoBox-iframe")[0];
    42. iframe.setAttribute(
    43. "sandbox",
    44. "allow-same-origin allow-scripts allow-popups allow-forms"
    45. );
    46. iframe.setAttribute("src", "");
    47. // 隐藏logo
    48. viewer.cesiumWidget.creditContainer.style.display = "none";
    49. viewer.scene.globe.enableLighting = true;
    50. // 取消天空盒显示
    51. viewer.scene.skyBox.show = false;
    52. // 设置背景为黑色
    53. viewer.scene.backgroundColor = Cesium.Color.BLACK;
    54. // 设置抗锯齿
    55. viewer.scene.postProcessStages.fxaa.enabled = true;
    56. // 设置相机飞机地点(广州塔)
    57. var postion = Cesium.Cartesian3.fromDegrees(
    58. // 经度
    59. 113.3301,
    60. // 纬度
    61. 23.0991,
    62. // 高度
    63. 1500
    64. );
    65. viewer.camera.flyTo({
    66. destination: postion,
    67. orientation: {
    68. heading: Cesium.Math.toRadians(-45),
    69. pitch: Cesium.Math.toRadians(-30),
    70. roll: 0,
    71. },
    72. duration: 2,
    73. });
    74. return viewer;
    75. }

    3. 设置鼠标位置动态经纬度小组件

    配置MousePosition.js如下:

    1. import * as Cesium from "cesium";
    2. export default class MousePosition {
    3. constructor(viewer) {
    4. this.divDom = document.createElement("div");
    5. this.divDom.style.cssText = `
    6. position: fixed;
    7. bottom:0;
    8. right:0;
    9. width:200px;
    10. height:40px;
    11. background-color: rgba(0,0,0,0.5);
    12. color: #fff;
    13. font-size: 14px;
    14. line-height: 40px;
    15. text-align: center;
    16. z-index: 100;
    17. `;
    18. document.body.appendChild(this.divDom);
    19. // 监听鼠标的移动事件
    20. const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
    21. handler.setInputAction((movement) => {
    22. // 获取鼠标的坐标
    23. const cartesian = viewer.camera.pickEllipsoid(
    24. movement.endPosition,
    25. viewer.scene.globe.ellipsoid
    26. );
    27. if (cartesian) {
    28. // 转换成经纬度
    29. const cartographic = Cesium.Cartographic.fromCartesian(cartesian);
    30. const longitudeString = Cesium.Math.toDegrees(
    31. cartographic.longitude
    32. ).toFixed(2);
    33. const latitudeString = Cesium.Math.toDegrees(
    34. cartographic.latitude
    35. ).toFixed(2);
    36. const heightString = cartographic.height;
    37. // 显示经纬度
    38. // console.log(
    39. // `经度:${longitudeString} 纬度:${latitudeString} 高度:${heightString}`
    40. // );
    41. this.divDom.innerHTML = `经度:${longitudeString} 纬度:${latitudeString} `;
    42. }
    43. }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
    44. }
    45. }

    4.配置cesium罗盘小组件

    4.1 安装 cesium-navigation-es6 插件

    cesium-navigation是一个cesium的插件,提供指南针、导航仪和距离刻度用户图形界面。插件的github地址是

    GitHub - cesium-plugin/cesium-navigation-es6icon-default.png?t=M5H6https://github.com/cesium-plugin/cesium-navigation-es6#readme使用npm进行安装

    npm install cesium-navigation-es6 --save

    或使用yarn方式安装:

    yarn add cesium-navigation-es6 -D

    4.2 配置罗盘样式

    罗盘初始化时,通过new CesiumNavigation(viewer, options);进行实例化,viewer为创建的初始化图层,options为罗盘的配置项。对于罗盘的样式重写,详见:

    css请参考/githubicon-default.png?t=M5H6https://github.com/richard1015/cesium-navigation-es6/blob/master/test/test.css

    less请参考/githubicon-default.png?t=M5H6https://github.com/richard1015/cesium-navigation-es6/blob/master/test/test.less

    js请参考/githubicon-default.png?t=M5H6https://github.com/richard1015/cesium-navigation-es6/blob/master/test/index.js

    罗盘样式及内容可以根据用户需求自行更改,详见github地址中的介绍。 

    官方案例:

    1. import { Viewer,Rectangle} from "cesium";
    2. import 'cesium/Build/Cesium/Widgets/widgets.css';
    3. const viewer = new Viewer("cesiumContainer",{
    4. animation:false,
    5. timeline:false
    6. });
    7. const options = {};
    8. // 用于在使用重置导航重置地图视图时设置默认视图控制。接受的值是Cesium.Cartographic 和 Cesium.Rectangle.
    9. // options.defaultResetView = Rectangle.fromDegrees(80, 22, 130, 50)
    10. options.defaultResetView = new Cartographic(CesiumMath.toRadians(111.50623801848565), CesiumMath.toRadians(2.8997206760441205), 8213979.400955964)
    11. //相机方向
    12. options.orientation = {
    13. heading: CesiumMath.toRadians(350.94452087411315),
    14. pitch: CesiumMath.toRadians(-66.6402342251215),
    15. roll: CesiumMath.toRadians(360)
    16. }
    17. //相机延时
    18. options.duration = 4//默认为3s
    19. // 用于启用或禁用罗盘。true是启用罗盘,false是禁用罗盘。默认值为true。如果将选项设置为false,则罗盘将不会添加到地图中。
    20. options.enableCompass= true;
    21. // 用于启用或禁用缩放控件。true是启用,false是禁用。默认值为true。如果将选项设置为false,则缩放控件将不会添加到地图中。
    22. options.enableZoomControls= true;
    23. // 用于启用或禁用距离图例。true是启用,false是禁用。默认值为true。如果将选项设置为false,距离图例将不会添加到地图中。
    24. options.enableDistanceLegend= true;
    25. // 用于启用或禁用指南针外环。true是启用,false是禁用。默认值为true。如果将选项设置为false,则该环将可见但无效。
    26. options.enableCompassOuterRing= true;
    27. //修改重置视图的tooltip
    28. options.resetTooltip = "重置视图";
    29. //修改放大按钮的tooltip
    30. options.zoomInTooltip = "放大";
    31. //修改缩小按钮的tooltip
    32. options.zoomOutTooltip = "缩小";
    33. //如需自定义罗盘控件,请看下面的自定义罗盘控件
    34. new CesiumNavigation(viewer, options);

    5. 修改App.vue

     App.vue如下:

    1. <template>
    2. <div id="cesiumContainer" ref="cesiumContainer"></div>
    3. </template>
    4. <script setup>
    5. // yarn add cesium
    6. // 将cesium目录下的Build/Cesium4个目录拷贝到public,然后将widgets目录拷贝一份到src下
    7. import * as Cesium from "cesium";
    8. import "./Widgets/widgets.css";
    9. import { onMounted } from "vue";
    10. import initViewer from "@/cesium/initViewer";
    11. import MousePosition from "@/cesium/MousePosition";
    12. import CesiumNavigaion from "cesium-navigation-es6";
    13. onMounted(() => {
    14. let viewer = initViewer();
    15. // 根据鼠标位置生成经纬度值
    16. let mousePosition = new MousePosition(viewer);
    17. // 设置导航罗盘的配置
    18. var options = {
    19. // 启用罗盘
    20. enableCompass: true,
    21. // 是否启用缩放
    22. enableZoomControls: false,
    23. // 是否启用指南针外环
    24. enableCompassOuterRing: true,
    25. // 是否启用距离的图例
    26. // enableDistanceLegend: false,
    27. };
    28. // 初始化导航罗盘
    29. let navigation = new CesiumNavigaion(viewer, options);
    30. });
    31. </script>
    32. <style>
    33. * {
    34. margin: 0;
    35. padding: 0;
    36. }
    37. #cesiumContainer {
    38. width: 100vw;
    39. height: 100vh;
    40. }
    41. </style>

    6. 实现效果:

     

  • 相关阅读:
    【uniapp】Dcloud的uni手机号一键登录,具体实现及踩过的坑,调用uniCloud.getPhoneNumber(),uni.login()等
    LeetCode //C - 322. Coin Change
    基于Java毕业设计预约挂号系统演示录像2021源码+系统+mysql+lw文档+部署软件
    基于Jenkins的CI/CD实践(kaniko版本)
    开源纯粹主义:每一颗螺丝钉都是自由的
    六、【Vue-Router】路由的props配置
    【Java 进阶篇】JavaScript电灯开关案例:从原理到实现
    GD32F4xx适配OpenHarmony问题踩坑记录
    MacOS - brew 和 brew cask 有什么区别?
    .NET混合开发解决方案4 WebView2的线程模型
  • 原文地址:https://blog.csdn.net/damadashen/article/details/125495139