// src/utils/CesiumInstance.js import * as Cesium from 'cesium'; import { Cartesian3, Ion, Math as CesiumMath, Terrain, Viewer, Color, Entity } from 'cesium'; import AmapMercatorTilingScheme from '@/utils/cesium/AmapMercatorTilingScheme'; window.CESIUM_BASE_URL = '/cesiumPu'; const TDT_Token = 'c6eea7dad4fa1e2d1e32ec0e7c9735db'; // 天地图地图 const TDT_IMG_C = 'https://{s}.tianditu.gov.cn/img_c/wmts?service=wmts&request=GetTile&version=1.0.0' + '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' + '&style=default&format=tiles&tk=' + TDT_Token; // 天地图注记 const TDT_ZJ = 'https://{s}.tianditu.gov.cn/cia_c/wmts?service=wmts&request=GetTile&version=1.0.0' + '&LAYER=cia&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' + '&style=default&format=tiles&tk=' + TDT_Token; // 标准地图注记 const TID_STAND = 'https://{s}.tianditu.gov.cn/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0' + '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' + '&style=default&format=tiles&tk=' + TDT_Token; // 天地图图层变量 const imageryProvider_tdt = new Cesium.WebMapTileServiceImageryProvider({ url: TDT_IMG_C, layer: 'tdtImg_c', style: 'default', format: 'tiles', tileMatrixSetID: 'c', subdomains: ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7'], tilingScheme: new Cesium.GeographicTilingScheme(), tileMatrixLabels: [ '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', ], maximumLevel: 17, }); // 标准地图图层变量 const imageryProvider_stand = new Cesium.UrlTemplateImageryProvider({ url: 'https://t{s}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=e45274b0235bb913eceb393aabbf9c9c', subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'], // format: 'image/jpeg', // show: true, maximumLevel: 18, credit: 'stand_tc', }); // 标准地图图层注解 const imageryProvider_standZh = new Cesium.UrlTemplateImageryProvider({ url: 'https://t{s}.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=e45274b0235bb913eceb393aabbf9c9c', subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'], maximumLevel: 18, credit: 'stand_zj', }); // 天地图中文注记加载 const annotation = new Cesium.WebMapTileServiceImageryProvider({ url: TDT_ZJ, layer: 'tdtZwImg_c', style: 'default', format: 'tiles', tileMatrixSetID: 'c', subdomains: ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7'], tilingScheme: new Cesium.GeographicTilingScheme(), tileMatrixLabels: [ '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', ], maximumLevel: 50, }); // 高德地图图层变量 //高德矢量地图数据图层,自带注记 const imageryProvider_ammapSL = new Cesium.UrlTemplateImageryProvider({ url: 'https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}', layer: 'tdtVecBasicLayer', style: 'default', format: 'image/png', tileMatrixSetID: 'GoogleMapsCompatible', subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'], maximumLevel: 18, tilingScheme: new AmapMercatorTilingScheme(), credit: 'amap_SL', }); //高德影像地图数据图层,自带注记 const imageryProvider_ammap = new Cesium.UrlTemplateImageryProvider({ url: 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', layer: 'tdtVecBasicLayer', style: 'default', format: 'image/png', tileMatrixSetID: 'GoogleMapsCompatible', subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'], maximumLevel: 18, tilingScheme: new AmapMercatorTilingScheme(), credit: 'amap_stand', }); // 高德影像地图数据图层,注记 const imageryProvider_ammapBz = new Cesium.UrlTemplateImageryProvider({ url: 'https://webst02.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8', tilingScheme: new AmapMercatorTilingScheme(), minimumLevel: 3, }); Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkMzg4MDk5YS05MWEzLTQ3NTYtOTYzNS04Yzk4MjU2MjI5N2YiLCJpZCI6MjE3OTM4LCJpYXQiOjE3MTY3NzIzOTR9.q1rzR7SRtIulQKTtJuv5HPUbp1av5E9RaOe-6voPDGc'; const cesiumToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkYTZlNGNlYS01NTU1LTQ1MGEtYmNlZS0yNTE2NDk5YWM2MjEiLCJpZCI6MTc5Njk2LCJpYXQiOjE3MDA1NDcwMjV9.qcl4AH2731cfFd0-I1ZLUINPXqvglLkDFD-UGR2zU5M'; Cesium.Ion.defaultAccessToken = cesiumToken; Cesium.Camera.DEFAULT_VIEW_FACTOR = -0.45; // 西南东北,默认显示中国 Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(66, 4, 135, 53.55); class CesiumInstance { constructor(containerId) { if (!CesiumInstance.instance) { const viewer = new Cesium.Viewer(containerId, { timeline: false, // 时间线 animation: false, // 动画控制 geocoder: false, // 搜索按钮编码器 baseLayerPicker: false, // 基础图层选择器 navigationHelpButton: false, // 帮助按钮 fullscreenButton: false, // 全屏按钮 homeButton: false, // 初视角按钮 sceneModePicker: false, // 投影方式选择器 selectionIndicator: false, // 禁用选择指示器 infoBox: false, // 禁用信息框 shouldAnimate: true, }); viewer.imageryLayers.removeAll(); viewer.cesiumWidget.creditContainer.style.display = 'none'; viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction( Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK ); // 禁用双击 viewer.scene.screenSpaceCameraController.minimumZoomDistance = 100; viewer.scene.screenSpaceCameraController.maximumZoomDistance = 4500000; viewer.imageryLayers.addImageryProvider(imageryProvider_ammap); window.$viewer = viewer; this.viewer = viewer; CesiumInstance.instance = this; // 保存单例实例 } return CesiumInstance.instance; } getViewer() { return this.viewer; } } export default CesiumInstance;