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

import cesium from 'vite-plugin-cesium'

export default defineConfig({
  plugins: [
    cesium()
    ]
})

3、页面

<template>
  <div id="cesiumContainer"></div>
</template>

<script setup>
import * as Cesium from 'cesium';
import {onMounted, ref} from 'vue';

const viewer = ref();

onMounted(() => {
  //初始化地球
  initCesium()
})

//初始化地球
const initCesium = () => {
  Cesium.Ion.defaultAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ZmJjODE1Yy1kMjU4LTQyZTgtODAyZC1mNzE2MDNhMmQ3YzUiLCJpZCI6MTk5NzQwLCJpYXQiOjE3MDk2Mjg5Mjh9.GuRbyEbm8FknaFOM34kGm9wCbf2XVjp873h_QD-Vs7A"
  //默认定位到中国上空
  Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(
      75.0, // 东
      0.0, // 南
      140.0, // 西
      60.0 // 北
  );
  viewer.value = new Cesium.Viewer('cesiumContainer', {
    infoBox: false, // 禁用沙箱,解决控制台报错
    // 是否显示图层选择器
    baseLayerPicker: false,
    // 是否显示全屏按钮
    fullscreenButton: true,
    // 是否显示右上角的查询按钮
    geocoder: false,
    // 是否显示HOME按钮
    homeButton: true,
    // 是否显示场景控制按钮
    sceneModePicker: false,
    // 是否显示帮助按钮
    navigationHelpButton: false,
    // 是否显示选择框
    selectionIndicator: false,
    //粒子效果
    shouldAnimate: true,
  });


	// //离线地图
	// viewer.value.imageryLayers.addImageryProvider(
	// 	new Cesium.UrlTemplateImageryProvider({ url: "http://192.168.56.11:8099/cesium/{z}/{x}/{y}.jpg", })
	// );
	//
	// //在线地图,Bing Maps Labels
	// viewer.value.imageryLayers.addImageryProvider(
	// 	await Cesium.IonImageryProvider.fromAssetId(2411391),
	// );


  // 隐藏cesiumLogo
  viewer.value.cesiumWidget.creditContainer.style.display = "none";

  //场景亮度
  viewer.value.scene.light = new Cesium.DirectionalLight({
    direction: new Cesium.Cartesian3(1, -1, -1),
    color: Cesium.Color.WHITE,
    intensity: 4
  });

}
</script>

<style scoped>
html, body, #cesiumContainer {
  width: 100%;
  height: 100%;
  padding: 0;
  margin: 0;
  overflow: hidden;
}
</style>

4、启动项目,访问

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

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

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

    //离线地图,支持0 - 9层
	const cesium_map_url = "http://192.168.56.11:8099/cesium/{z}/{x}/{y}.jpg";
	viewer.value.imageryLayers.addImageryProvider(
		new Cesium.UrlTemplateImageryProvider({
			url: cesium_map_url,
			minimumLevel: 0,
			maximumLevel: 9
		})
	)

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

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

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

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

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

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

OK,大功搞定!!

### 实现Cesium离线地图显示的关键方法 要在离线环境中使用Cesium显示地图,通常需要完成以下几个方面的配置: #### 1. **准备离线地图数据** 需要预先下载并准备好所需的地理空间数据。这些数据可以是瓦片形式的地图图像文件(如JPG或PNG),或者是矢量数据格式(如GeoJSON)。可以通过开源工具或其他方式获取离线地图数据[^2]。 #### 2. **搭建本地地图服务器** 使用Nginx、Apache或者其他轻量级Web服务器来托管离线地图数据。例如,在Windows系统上可以按照教程搭建Nginx服务器,并将地图瓦片存储在指定目录下以便访问[^1]。 下面是一个简单的Nginx配置示例: ```nginx server { listen 80; server_name localhost; location /cesium/ { root D:/offline_maps; # 替换为实际路径 index index.html; } } ``` #### 3. **修改Cesium代码以支持离线资源加载** 在Cesium应用中调整`Viewer`实例的初始化参数,指向本地的地图瓦片服务地址。以下是基于Vue框架的一个简单实现案例[^4]: ```javascript import * as Cesium from &#39;cesium&#39;; const viewer = new Cesium.Viewer(&#39;cesiumContainer&#39;, { imageryProvider: new Cesium.UrlTemplateImageryProvider({ url: &#39;http://localhost:8099/cesium/{z}/{x}/{y}.jpg&#39; // 修改为自己的Nginx服务地址 }), terrainProvider: new Cesium.EllipsoidTerrainProvider(), shouldAnimate: true, baseLayerPicker: false, // 关闭默认图层选择器 geocoder: false // 可选关闭其他组件 }); // 设置初始视角位置 (经度, 纬度, 高度) viewer.camera.flyTo({ destination : Cesium.Cartesian3.fromDegrees(116.4074, 39.9042, 500), orientation : { heading : Cesium.Math.toRadians(0), // 方向角 pitch : Cesium.Math.toRadians(-90) // 倾斜角度 } }); ``` #### 4. **处理地形和其他附加资源** 如果还需要加载离线地形,则需额外准备DEM(Digital Elevation Model)数据集,并将其集成到Cesium项目中。具体操作可参考官方文档或者相关社区经验分享。 --- ### 注意事项 - 地图瓦片的数据源质量直接影响最终渲染效果,请确保选用高精度且适合目标区域范围的地图素材。 - 跨域问题可能会影响正常运行,因此建议统一规划前后端接口协议以及静态资源路径设置。 - Vue版本差异可能导致部分API调用存在兼容性区别,务必依据所使用的前端框架仔细核对语法细节[^3]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值