• vue3 Cesium 离线地图


    源码:cesium-demo: Cesium示例工程,基于vue3

    1、vite-plugin-cesium 是一个专门为 Vite 构建工具定制的插件,用于在 Vite 项目中轻松使用 Cesium 库。它简化了在 Vite 项目中集成 Cesium 的过程。

    npm i cesium vite-plugin-cesium vite -D

    2、配置vite.config.js

    1. import cesium from 'vite-plugin-cesium'
    2. export default defineConfig({
    3. plugins: [
    4. cesium()
    5. ]
    6. })

    3、页面

    1. <template>
    2. <div id="cesiumContainer"></div>
    3. </template>
    4. <script setup>
    5. import * as Cesium from 'cesium';
    6. import {onMounted, ref} from 'vue';
    7. const viewer = ref();
    8. onMounted(() => {
    9. //初始化地球
    10. initCesium()
    11. })
    12. //初始化地球
    13. const initCesium = () => {
    14. Cesium.Ion.defaultAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ZmJjODE1Yy1kMjU4LTQyZTgtODAyZC1mNzE2MDNhMmQ3YzUiLCJpZCI6MTk5NzQwLCJpYXQiOjE3MDk2Mjg5Mjh9.GuRbyEbm8FknaFOM34kGm9wCbf2XVjp873h_QD-Vs7A"
    15. //默认定位到中国上空
    16. Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(
    17. 75.0, //
    18. 0.0, //
    19. 140.0, // 西
    20. 60.0 //
    21. );
    22. viewer.value = new Cesium.Viewer('cesiumContainer', {
    23. infoBox: false, // 禁用沙箱,解决控制台报错
    24. // 是否显示图层选择器
    25. baseLayerPicker: false,
    26. // 是否显示全屏按钮
    27. fullscreenButton: true,
    28. // 是否显示右上角的查询按钮
    29. geocoder: false,
    30. // 是否显示HOME按钮
    31. homeButton: true,
    32. // 是否显示场景控制按钮
    33. sceneModePicker: false,
    34. // 是否显示帮助按钮
    35. navigationHelpButton: false,
    36. // 是否显示选择框
    37. selectionIndicator: false,
    38. //粒子效果
    39. shouldAnimate: true,
    40. });
    41. // //离线地图
    42. // viewer.value.imageryLayers.addImageryProvider(
    43. // new Cesium.UrlTemplateImageryProvider({ url: "http://192.168.56.11:8099/cesium/{z}/{x}/{y}.jpg", })
    44. // );
    45. //
    46. // //在线地图,Bing Maps Labels
    47. // viewer.value.imageryLayers.addImageryProvider(
    48. // await Cesium.IonImageryProvider.fromAssetId(2411391),
    49. // );
    50. // 隐藏cesiumLogo
    51. viewer.value.cesiumWidget.creditContainer.style.display = "none";
    52. //场景亮度
    53. viewer.value.scene.light = new Cesium.DirectionalLight({
    54. direction: new Cesium.Cartesian3(1, -1, -1),
    55. color: Cesium.Color.WHITE,
    56. intensity: 4
    57. });
    58. }
    59. </script>
    60. <style scoped>
    61. html, body, #cesiumContainer {
    62. width: 100%;
    63. height: 100%;
    64. padding: 0;
    65. margin: 0;
    66. overflow: hidden;
    67. }
    68. </style>

    4、启动项目,访问

    如果项目可以访问外网,也可以直接配置在线地图 bing map就搞定了,可以忽略后续步骤

    1. //Bing Maps Labels
    2. viewer.value.imageryLayers.addImageryProvider(
    3. await Cesium.IonImageryProvider.fromAssetId(2411391),
    4. );

    5、如果项目只能访问内网,则需要配置离线地图

    1. //离线地图
    2. viewer.value.imageryLayers.addImageryProvider(
    3. //本机
    4. new Cesium.UrlTemplateImageryProvider({url: "http://192.168.56.11:8099/cesium/{z}/{x}/{y}.jpg",})
    5. );

    url: "http://192.168.56.11:8099/cesium/{z}/{x}/{y}.jpg" 对应的就是离线的地图

    一般不会直接放进项目里,使用nginx代理这些图片即可

    6、离线地图nginx配置,cat nginx/cesium.conf 

    1. server {
    2. listen 80;
    3. #server_name your_domain.com; # 替换为你的域名或IP地址
    4. # 允许跨域请求
    5. location /cesium {
    6. # 设置CORS头部
    7. add_header 'Access-Control-Allow-Origin' '*'; # 或者特定来源如 'http://example.com'
    8. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    9. add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
    10. # 如果请求方法为OPTIONS,则返回204状态码
    11. if ($request_method = 'OPTIONS') {
    12. return 204;
    13. }
    14. # 代理到/opt/docker-data/cesium目录
    15. alias /opt/docker-data/cesium;
    16. try_files $uri $uri/ =404;
    17. # 其他可能的设置...
    18. }
    19. # 其他可能的配置...
    20. # 错误处理
    21. error_page 404 /404.html;
    22. # 其他配置...
    23. }

    7、离线地图文件:文件太大了,想要的留言吧

    颜色变绿了,查看网络请求,已经加载nginx的代理的图层了

    OK,大功搞定!!

  • 相关阅读:
    博世XC事业部李胤:自动驾驶降温不意外,但这条路肯定会走下去
    自动驾驶框架:自动驾驶汽车定位-感知-规划-决策-控制概述,按照我的架构图理解:决策决定的是速度,规划决定的是路径(架构理解推荐)
    電子郵件IMAP、POP、SMTP 、 應該使用什麼端口
    安卓开发——安卓界面布局笔记
    [math]判断一个点是否在多边形内的方法
    2023 “华为杯” 中国研究生数学建模竞赛(D题)深度剖析|数学建模完整代码+建模过程全解全析
    再探数据结构
    论文复现——LaMa:Resolution-robust Large Mask Inpainting with Fourier Convolutions
    面试题:MyBatis批量插入的五种方式,哪种最强?
    python绘图文字乱码
  • 原文地址:https://blog.csdn.net/kang5789/article/details/139982415