Skip to content

快速开始 ​

dls-map 完成了 CesiumJS 的 Vue 组件化,你可以在你的 Vue 项目中使用这个库提供的各个组件。本库本身不含 CesiumJS,所以在引入时通常需要配置 CesiumJS 本身

接下来将介绍如何在使用 Vue3 项目中引入 dls-map。

全量导入 ​

如果你对打包后的文件大小不是很在乎,那么你可以使用 Vue 的 插件 安装方式配置到全局。

ts
// main.ts
import { createApp } from 'vue'
import DlsMap from 'dls-map'
import App from './App.vue'


const app = createApp(App)

app.use(DlsMap) 

// 由于Cesium更新可能有破坏性更新,建议在生产环境中锁定 Cesium 版本


app.mount('#app')

按需导入 ​

dls-map 提供了基于 ES Module 开箱即用的 Tree Shaking 功能。

例如,你可以在任意单文件组件中使用 dls-map,这里以 DlsMap 组件为例。

html
<template>
  <dls-map
      :mapConfig="{
        id: 'dls-map-layer-map',
        imageryProvider: dataM.imageryProvider,
        sceneModeNum: 3,
      }"
      ref="dlsMapRef"
      :viewer-width="'100%'"
      :viewer-height="'500px'"
      @cesium-ready="onCesiumReady"
    />
</template>
<script setup>
  import { DlsMap } from 'dls-map';
  import { onMounted, ref, reactive, watch } from 'vue';

  const dlsMapRef = ref(null);
  const dataM = reactive<any>({
    imageryProvider: {
      url: 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',
      layer: 'tdtVecBasicLayer',
      style: 'default',
      format: 'image/png',
      tileMatrixSetID: 'GoogleMapsCompatible',
    },
  });
</script>

配置 dls-map ​

在 vue3 项目的 index.html 里加载 cesium的包

html
<link rel="stylesheet" href="/cesium/Cesium/Widgets/widgets.css" />
<script type="text/javascript" src="https://unpkg.com/cesium@latest/Build/Cesium/Cesium.js"></script>

TIP

如果 cesium.js 是网络地址,如果网络差,加载时间会变大,确保加载完cesium之后再进行业务操作

TypeScript 及代码智能提示支持 ​

请在 tsconfig.json 或者 jsconfig.json 文件中 includes 中添加如下配置:

json
// tsconfig.json
{
  "compilerOptions": {
    // ...
  },
  "include": ["src/**/*", "node_modules/dls-map/es/types/Cesium.d.ts"]
}

以上配置将适配 vscode 的 Volar 插件,并得到 CesiumJS API 提示。

如何在 dls-map 中继续使用原生 CesiumJS API 开发? ​

dls-map 可能并不完全能提供你所需的功能,但是保留了访问由 dls-map 创建的 Cesium 有关实例对象的访问权限。

它的 ready 事件回调函数的参数可以解构成 viewer 变量,用于原生 Cesium API 开发。

你也可以使用 ref 模板引用在组件生命周期内随时获取这两个变量。

ts
<!--
 * @Author: Kang
 * @Date: 2024-09-04 09:25:58
 * @Last Modified by: Kang
 * @LastEditTime: 2024-09-25 15:05:48
-->
<template>
  <div class="appMain">
    <dls-map
      :mapConfig="{
        id: 'dls-map-layer-map',
        imageryProvider: dataM.imageryProvider,
        sceneModeNum: 3,
      }"
      ref="dlsMapRef"
      :viewer-width="'100%'"
      :viewer-height="'500px'"
      @cesium-ready="onCesiumReady"
    />
  </div>
</template>

<script lang="ts" setup>
import { DlsMap } from 'dls-map';
import { onMounted, ref, reactive } from 'vue';

const dlsMapRef = ref(null);
const dataM = reactive<any>({
  imageryProvider: {
    url: 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',
    layer: 'tdtVecBasicLayer',
    style: 'default',
    format: 'image/png',
    tileMatrixSetID: 'GoogleMapsCompatible',
  },
});

onMounted(() => {
  //获取viewer
  console.log('dlsMapRef', dlsMapRef.value);
});

//cesium初始化完成之后
const onCesiumReady = (viewer: Cesium.Viewer) => {
  console.log('viewer', viewer, Cesium);
};
</script>

TIP

Cesium 变量即命名空间,你可以通过它访问 CesiumJS 原生的 API,例如 Cesium.Cartesian3;而 viewer 参数则是观察者实例,参考 CesiumJS 官方文档即可。

TIP

实际上 dls-map 是通过动态标签引入 Cesium 的,所以 Cesium 变量其实是全局的。只是它最快需要在 vc-viewer 的 cesiumReady 事件之后才成为可访问的全局变量。如果您觉得这样不方便,也可以考虑将其直接写到项目模板文件 index.html 的 head 标签中,详见#155。一旦这样写,在 Vue for Cesium 在初始化时 Cesium 变量就已经存在了,就不会再去通过动态标签再次引入 Cesium 了。

只是在 JS 项目中,如果配置了 ESLint ,我们需要告诉 ESLint Cesium 已经是全局变量了,而 TS 项目中则需要声明 Cesium 为全局变量或者引入 Cesium.d.ts (推荐后者) ,两者的配置请分别参考ESLint 配置 和 TS 配置。

如何在其他 Vue 组件中获取 viewer 实例? ​

不推荐粗暴的直接挂在 window 上,当然调试除外。通常我们需要维护一个全局的 viewer 实例,以方便其他组件(页面)获取到并使用。Vue2 中可以直接挂到 Vue 原型链上 或者 Vuex 中。

Vue3 中在组合式 API 的加持下可以通过 useVueCesium 很方便的获取到,这也是我们比较推荐的做法。

ts
// 开发中。。。

TIP

注

使用模板 ​

更喜欢 VueCLI ​

我们提供了通用的 VueCLI4 + Vue3Js + Vuex4 + VueRouter4 项目模板,你可以直接下载使用。

试试 Vite ​

另外我们还提供了 Vite2 + Vue3Ts 模板。

这里还有一个 Vite2 + Vue3Ts + Vuex4 + VueRouter4 综合案例,同样可下载使用。

桌面开发 ​

如果你对桌面应用感兴趣,你可以参考 Vite2 + Vue3Ts + Electron13 模板。

关于 Vue2 ​

dls-map暂时没有vue2版本

开始使用 ​

您可以从现在起启动您的项目。

对于每个组件的用法,请参考单个组件对应的文档。