fix: cesium类型修改,Viewer挂载在window上供全局组件使用

master
cbwu 1 year ago
parent 2f741e7382
commit 79186e1192

@ -4,7 +4,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
import * as Cesium from 'cesium' // import * as Cesium from 'cesium'
import { Viewer } from 'cesium'
import 'cesium/Build/Cesium/Widgets/widgets.css' import 'cesium/Build/Cesium/Widgets/widgets.css'
import { import {
TDTLayerType, TDTLayerType,
@ -15,19 +16,20 @@ import {
import { initViewer, perfViewer } from '@/utils/map/sceneViewer' import { initViewer, perfViewer } from '@/utils/map/sceneViewer'
import { flyToChina } from '@/utils/map/camera' import { flyToChina } from '@/utils/map/camera'
const viewerDivRef = ref<HTMLDivElement>() const viewerDivRef = ref<HTMLDivElement>()
let viewer: Cesium.Viewer let viewer: Viewer
window.CESIUM_BASE_URL = 'node_modules/cesium/Build/Cesium/' window.CESIUM_BASE_URL = 'node_modules/cesium/Build/Cesium/'
// window.CESIUM_BASE_URL = 'libs/cesium/' // // window.CESIUM_BASE_URL = 'libs/cesium/' //
Cesium.Ion.defaultAccessToken = window.Cesium.Ion.defaultAccessToken =
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3YjU4MjJlMS0wMWE4LTRhOWQtYjQ1OC04MTgzMzFhMzQ5ZjAiLCJpZCI6MTE1ODUxLCJpYXQiOjE2NjkyMDM1MzN9.8ajEuv3VKYg8wvFiQlUWWY6Ng6JfY4PuVgRyStL1B-E' 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3YjU4MjJlMS0wMWE4LTRhOWQtYjQ1OC04MTgzMzFhMzQ5ZjAiLCJpZCI6MTE1ODUxLCJpYXQiOjE2NjkyMDM1MzN9.8ajEuv3VKYg8wvFiQlUWWY6Ng6JfY4PuVgRyStL1B-E'
// //
Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees( // window.Cesium.Camera.DEFAULT_VIEW_RECTANGLE =
75.0, // 西 // window.Cesium.Rectangle.fromDegrees(
0.0, // // 75.0, // 西
140.0, // // 0.0, //
60.0, // // 140.0, //
) // 60.0, //
// )
onMounted(() => { onMounted(() => {
// //
@ -47,6 +49,9 @@ onMounted(() => {
) )
// //
viewer.terrainProvider = getTDTTerrainProvider() viewer.terrainProvider = getTDTTerrainProvider()
// window
window.Viewer = viewer
}) })
</script> </script>

9
src/global.d.ts vendored

@ -1,13 +1,14 @@
import * as C from 'cesium' // import * as Cesium from 'cesium'
import type { Cesium, Viewer } from 'cesium'
// 扩展全局变量 // 扩展全局变量
declare global { declare global {
// 定义全局Cesium类型 // 定义全局Cesium类型
const Cesium: typeof C const Cesium: Cesium
// 允许扩展 Window // 允许扩展 Window
interface Window { interface Window {
Cesium: typeof C Cesium: Cesium
CESIUM_BASE_URL: string CESIUM_BASE_URL: string
Viewer: C.Viewer Viewer: Viewer
} }
} }

@ -1,5 +1,9 @@
// 天地图影像服务 // 天地图影像服务
import { WebMapTileServiceImageryProvider } from 'cesium' import {
WebMapTileServiceImageryProvider,
GeographicTilingScheme,
WebMercatorTilingScheme,
} from 'cesium'
//地图服务枚举类型_c为墨卡托投影_w为经纬度投影 //地图服务枚举类型_c为墨卡托投影_w为经纬度投影
enum TDTLayerType { enum TDTLayerType {
Vec = 'vec', //矢量底图 Vec = 'vec', //矢量底图
@ -37,8 +41,8 @@ export function getTDTProvider(
// 切片方式 // 切片方式
const tilingScheme = const tilingScheme =
projectionType == TDTProjectionType.WGS84 projectionType == TDTProjectionType.WGS84
? new Cesium.GeographicTilingScheme() ? new GeographicTilingScheme()
: new Cesium.WebMercatorTilingScheme() : new WebMercatorTilingScheme()
const tileMatrixLabels = const tileMatrixLabels =
projectionType == TDTProjectionType.WGS84 projectionType == TDTProjectionType.WGS84
? new Array(19).fill(1).map((v, i) => `${i}`) ? new Array(19).fill(1).map((v, i) => `${i}`)
@ -74,7 +78,7 @@ export function getTDTTerrainProvider() {
TDT_tk TDT_tk
terrainUrls.push(url) terrainUrls.push(url)
} }
// @ts-ignore
const provider = new Cesium.GeoTerrainProvider({ const provider = new Cesium.GeoTerrainProvider({
urls: terrainUrls, urls: terrainUrls,
}) })

@ -6,7 +6,7 @@ import { Viewer, Cartesian3, Math } from 'cesium'
*/ */
function flyToChina(viewer: Viewer) { function flyToChina(viewer: Viewer) {
viewer.camera.flyTo({ viewer.camera.flyTo({
destination: Cartesian3.fromDegrees(103.84, 31.15, 12550000), destination: Cartesian3.fromDegrees(103.84, 31.15, 10350000),
orientation: { orientation: {
heading: Math.toRadians(348.4202942851978), heading: Math.toRadians(348.4202942851978),
pitch: Math.toRadians(-89.74026687972041), pitch: Math.toRadians(-89.74026687972041),

@ -1,10 +1,17 @@
// Viewer初始化 // Viewer初始化
import { Viewer, TileMapServiceImageryProvider } from 'cesium' import {
Viewer,
TileMapServiceImageryProvider,
ImageryLayer,
RequestScheduler,
SceneMode,
buildModuleUrl,
} from 'cesium'
//离线地球底图 //离线地球底图
const earth_native = TileMapServiceImageryProvider.fromUrl( const earth_native = TileMapServiceImageryProvider.fromUrl(
// 'node_modules/cesium/Build/CesiumUnminified/Assets/Textures/NaturalEarthII', // 'node_modules/cesium/Build/CesiumUnminified/Assets/Textures/NaturalEarthII',
Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII'), buildModuleUrl('Assets/Textures/NaturalEarthII'),
) )
/** /**
* Viewer * Viewer
@ -20,7 +27,7 @@ function initViewer(container: string | Element): Viewer {
timeline: false, //是否显示时间线控件 timeline: false, //是否显示时间线控件
animation: false, //是否显示动画控件 animation: false, //是否显示动画控件
sceneModePicker: true, //是否显示投影方式控件 sceneModePicker: true, //是否显示投影方式控件
sceneMode: Cesium.SceneMode.SCENE3D, //设置场景模式3D球体 sceneMode: SceneMode.SCENE3D, //设置场景模式3D球体
// terrain: Cesium.Terrain.fromWorldTerrain(), // terrain: Cesium.Terrain.fromWorldTerrain(),
baseLayerPicker: false, //是否显示图层选择控件 baseLayerPicker: false, //是否显示图层选择控件
requestRenderMode: true, //启用请求渲染模式 requestRenderMode: true, //启用请求渲染模式
@ -28,8 +35,9 @@ function initViewer(container: string | Element): Viewer {
fullscreenButton: false, //右下角 全屏控件 fullscreenButton: false, //右下角 全屏控件
orderIndependentTranslucency: false, orderIndependentTranslucency: false,
contextOptions: { webgl: { alpha: true } }, contextOptions: { webgl: { alpha: true } },
maximumRenderTimeChange: Infinity, // 无操作时自动渲染帧率设为数字会消耗性能Infinity为无操作不渲染
// mapProjection: new Cesium.WebMercatorProjection(), // mapProjection: new Cesium.WebMercatorProjection(),
baseLayer: Cesium.ImageryLayer.fromProviderAsync(earth_native, {}), baseLayer: ImageryLayer.fromProviderAsync(earth_native, {}),
}) })
//去除cesium logo隐藏版本信息 //去除cesium logo隐藏版本信息
const creditContainer = viewer.cesiumWidget.creditContainer as HTMLDivElement const creditContainer = viewer.cesiumWidget.creditContainer as HTMLDivElement
@ -59,8 +67,8 @@ function perfViewer(viewer: Viewer) {
viewer.scene.sun.show = false viewer.scene.sun.show = false
viewer.scene.skyBox.show = false viewer.scene.skyBox.show = false
// 优化加载WMTS图层速度 // 优化加载WMTS图层速度
Cesium.RequestScheduler.maximumRequestsPerServer = 18 // 设置cesium请求调度器的最大并发数量 RequestScheduler.maximumRequestsPerServer = 18 // 设置cesium请求调度器的最大并发数量
Cesium.RequestScheduler.throttleRequests = false //关闭请求调度器的请求节流 RequestScheduler.throttleRequests = false //关闭请求调度器的请求节流
} }
export { initViewer, perfViewer } export { initViewer, perfViewer }

Loading…
Cancel
Save