vue3+ts+vite+cesium 加载天地图影像、标注等多服务器随机加载切换版本

Sober3r_A_man_engaged_in_trading_is_sitting_with_his_back_facin_1624e763-7a73-49c3-91a2-b0edac144cca.png
代码可以使我们的头发变白变秃

案例代码简介

这段代码是一个基于 Vue.js 的 Cesium 地图应用示例。它使用 Cesium.js 库创建一个 3D 地图视图,并以天地图作为底图和注记图层。在这个示例中,用户可以浏览地球表面的详细地理信息。此外,代码还对 Cesium 视图的一些功能进行了定制,例如禁用全屏按钮、地理编码器、首页按钮等。同时,代码还隐藏了默认的版权信息。

效果图

Snipaste_2023-04-02_11-39-53.jpg

代码分析和注释:

<template>
  <div id="cesiumContainer"></div>
</template>
  1. 创建一个包含 id=“cesiumContainer” 的 div 元素,用于渲染 Cesium 视图。
<script lang="ts">
import * as Cesium from "cesium";
  1. 导入 Cesium 库。
// 天地图密钥
let tiandituKey = "";//自行申请
  1. 设置天地图密钥。
// 天地图请求URL
let url =
  url: `http://{s}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={x}&TILECOL={y}&tk=`+tiandituKey, //url地址;
  1. 构建天地图请求 URL。
const viewer = new Cesium.Viewer("cesiumContainer", {
    animation: true, // 动画小组件
    baseLayerPicker: false, // 底图组件,选择三维数字地球的底图(imagery and terrain)。
    fullscreenButton: false, // 全屏组件
    vrButton: false, // VR模式
    geocoder: false, // 地理编码(搜索)组件
    homeButton: false, // 首页,点击之后将视图跳转到默认视角
    infoBox: false, // 信息框
    sceneModePicker: true, // 场景模式,切换2D、3D 和 Columbus View (CV) 模式。
    selectionIndicator: false, // 是否显示选取指示器组件
    timeline: true, // 时间轴
    navigationHelpButton: false, // 帮助提示,如何操作数字地球。
    // 如果最初应该看到导航说明,则为true;如果直到用户明确单击该按钮,则该提示不显示,否则为false。
    navigationInstructionsInitiallyVisible: false,
    shouldAnimate: true, // 是否显示动画
  });
  1. 创建 Cesium Viewer 实例并设置相关配置。
viewer._cesiumWidget._creditContainer.style.display = "none"; //取消版权信息
  1. 隐藏 Cesium 视图中的版权信息。
viewer.imageryLayers.addImageryProvider(
    new Cesium.WebMapTileServiceImageryProvider({
      url: url, //url地址
      layer: "img", //WMTS请求的层名称
      style: "default", //WMTS请求的样式名称
      format: "image/jpeg", //MIME类型,用于从服务器检索图像
      tileMatrixSetID: "GoogleMapsCompatible", //   用于WMTS请求的TileMatrixSet的标识符
      tileMatrixLabels: [
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "10",
        "11",
        "12",
        "13",
        "14",
        "15",
        "16",
        "17",
        "18",
        "19",
      ],
      tilingScheme: new Cesium.GeographicTilingScheme(),
      subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], //天地图8个服务器
      minimumLevel: 0, //最小层级
      maximumLevel: 16, //最大层级
      // show: false,
    }),
    1
  );
  1. 添加天地图底图图层。
//影像注记
  viewer.imageryLayers.addImageryProvider(
    new Cesium.WebMapTileServiceImageryProvider({
      url:
        "http://t0.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=" +
        tiandituKey,
      layer: "tdtAnnoLayer",
      style: "default",
      format: "image/jpeg",
      tileMatrixSetID: "GoogleMapsCompatible",
    })
  );
  1. 添加天地图注记图层.
// 声明组件,在组件挂载后执行初始化代码
onMounted(() => {});
  1. 导出 Vue 组件的默认对象,其中 mounted 生命周期钩子函数为空,表示在组件挂载时不执行任何操作。
#cesiumContainer {
  width: 100vw;
  /*屏幕宽度*/
  height: 100vh;
  /*屏幕高度*/
  overflow: hidden;
  /*隐藏滚动条*/
  position: relative;
}
  1. 设置 Cesium 容器样式,使其充满整个视窗。

完整代码

如下:

<script setup lang="ts">
import { defineComponent, onMounted, ref } from "vue";
import * as Cesium from "cesium";
// 声明组件,在组件挂载后执行初始化代码
onMounted(() => {
  const viewer = new Cesium.Viewer("cesiumContainer", {
    animation: true, // 动画小组件
    baseLayerPicker: false, // 底图组件,选择三维数字地球的底图(imagery and terrain)。
    fullscreenButton: false, // 全屏组件
    vrButton: false, // VR模式
    geocoder: false, // 地理编码(搜索)组件
    homeButton: false, // 首页,点击之后将视图跳转到默认视角
    infoBox: false, // 信息框
    sceneModePicker: true, // 场景模式,切换2D、3D 和 Columbus View (CV) 模式。
    selectionIndicator: false, // 是否显示选取指示器组件
    timeline: true, // 时间轴
    navigationHelpButton: false, // 帮助提示,如何操作数字地球。
    // 如果最初应该看到导航说明,则为true;如果直到用户明确单击该按钮,则该提示不显示,否则为false。
    navigationInstructionsInitiallyVisible: false,
    shouldAnimate: true, // 是否显示动画
  });
  viewer._cesiumWidget._creditContainer.style.display = "none"; //取消版权信息
  let tiandituKey = ""; //需要自己申请天地图的key
let url="  `http://{s}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={x}&TILECOL={y}&tk=`+tiandituKey"
  //影像底图
  viewer.imageryLayers.addImageryProvider(
    new Cesium.WebMapTileServiceImageryProvider({
      url: url, //url地址
      layer: "img", //WMTS请求的层名称
      style: "default", //WMTS请求的样式名称
      format: "image/jpeg", //MIME类型,用于从服务器检索图像
      tileMatrixSetID: "GoogleMapsCompatible", //   用于WMTS请求的TileMatrixSet的标识符
      tileMatrixLabels: [
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "10",
        "11",
        "12",
        "13",
        "14",
        "15",
        "16",
        "17",
        "18",
        "19",
      ],
      tilingScheme: new Cesium.GeographicTilingScheme(),
      subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"], //天地图8个服务器
      minimumLevel: 0, //最小层级
      maximumLevel: 16, //最大层级
      // show: false,
    }),
    1
  );

  //影像注记
  viewer.imageryLayers.addImageryProvider(
    new Cesium.WebMapTileServiceImageryProvider({
      url:
        "http://t0.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=" +
        tiandituKey,
      layer: "tdtAnnoLayer",
      style: "default",
      format: "image/jpeg",
      tileMatrixSetID: "GoogleMapsCompatible",
    })
  );
});
</script>

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

<style scoped>
#cesiumContainer {
  width: 100vw;
  /*屏幕宽度*/
  height: 100vh;
  /*屏幕高度*/
  overflow: hidden;
  /*隐藏滚动条*/
  position: relative;
}
</style>

源码地址

https://download.csdn.net/download/u012425087/87642676

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缠中说禅87

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值