| | |
| | | |
| | | let customMapLayer = {} |
| | | let handlerEvents = { |
| | | handler: null, |
| | | handler: null, |
| | | } |
| | | |
| | | export default function cesiumOperation() { |
| | | 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, |
| | | }) |
| | | export default function cesiumOperation () { |
| | | 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_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, |
| | | }) |
| | | //高德影像地图数据图层,自带注记 |
| | | 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 _init = async id => { |
| | | 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) |
| | | viewer = new Cesium.Viewer(id, { |
| | | terrain: Terrain.fromWorldTerrain(), |
| | | infoBox: false, // 禁用沙箱,解决控制台报错 |
| | | animation: false, // 左下角的动画仪表盘 |
| | | baseLayerPicker: false, // 右上角的图层选择按钮 |
| | | geocoder: false, // 搜索框 |
| | | homeButton: false, // home按钮 |
| | | sceneModePicker: false, // 模式切换按钮 |
| | | timeline: false, // 底部的时间轴 |
| | | navigationHelpButton: false, // 右上角的帮助按钮, |
| | | selectionIndicator: false, // 是否显示选择指示器 |
| | | baseLayer: false, |
| | | fullscreenButton: false, |
| | | }) |
| | | Cesium.Ion.defaultAccessToken = |
| | | 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkMzg4MDk5YS05MWEzLTQ3NTYtOTYzNS04Yzk4MjU2MjI5N2YiLCJpZCI6MjE3OTM4LCJpYXQiOjE3MTY3NzIzOTR9.q1rzR7SRtIulQKTtJuv5HPUbp1av5E9RaOe-6voPDGc' |
| | | const _init = async id => { |
| | | 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) |
| | | viewer = new Cesium.Viewer(id, { |
| | | terrain: Terrain.fromWorldTerrain(), |
| | | infoBox: false, // 禁用沙箱,解决控制台报错 |
| | | animation: false, // 左下角的动画仪表盘 |
| | | baseLayerPicker: false, // 右上角的图层选择按钮 |
| | | geocoder: false, // 搜索框 |
| | | homeButton: false, // home按钮 |
| | | sceneModePicker: false, // 模式切换按钮 |
| | | timeline: false, // 底部的时间轴 |
| | | navigationHelpButton: false, // 右上角的帮助按钮, |
| | | selectionIndicator: false, // 是否显示选择指示器 |
| | | baseLayer: false, |
| | | fullscreenButton: false, |
| | | }) |
| | | |
| | | // viewer.scene.globe.depthTestAgainstTerrain = true; |
| | | // viewer.scene.globe.depthTestAgainstTerrain = true; |
| | | |
| | | viewer.imageryLayers.removeAll() |
| | | viewer.imageryLayers.removeAll() |
| | | |
| | | globalBaseMapLayers = [] |
| | | globalBaseMapLayers = [] |
| | | |
| | | viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction( |
| | | Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK |
| | | ) // 禁用双击 |
| | | viewer.scene.screenSpaceCameraController.minimumZoomDistance = 100 |
| | | viewer.scene.screenSpaceCameraController.maximumZoomDistance = 4500000 |
| | | // viewer.scene.camera.setView({ |
| | | // destination: Cesium.Cartesian3.fromDegrees(115.856725497,28.624514734, 8000) |
| | | // }); |
| | | // // 添加地形数据 |
| | | viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction( |
| | | Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK |
| | | ) // 禁用双击 |
| | | viewer.scene.screenSpaceCameraController.minimumZoomDistance = 100 |
| | | viewer.scene.screenSpaceCameraController.maximumZoomDistance = 4500000 |
| | | // viewer.scene.camera.setView({ |
| | | // destination: Cesium.Cartesian3.fromDegrees(115.856725497,28.624514734, 8000) |
| | | // }); |
| | | // // 添加地形数据 |
| | | |
| | | // viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ |
| | | // url: 'https://data.marsgis.cn/terrain', |
| | | // }); |
| | | // viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ |
| | | // url: 'https://data.marsgis.cn/terrain', |
| | | // }); |
| | | |
| | | // viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ |
| | | // url: Cesium.IonResource.fromAssetId(1), |
| | | // requestWaterMask: false, |
| | | // requestVertexNormals: true, |
| | | // }) |
| | | // viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ |
| | | // url: Cesium.IonResource.fromAssetId(1), |
| | | // requestWaterMask: false, |
| | | // requestVertexNormals: true, |
| | | // }) |
| | | |
| | | window.$viewer = viewer |
| | | loadLAYER() |
| | | } |
| | | window.$viewer = viewer |
| | | loadLAYER() |
| | | } |
| | | |
| | | const loadLAYER = () => { |
| | | let mapLayers = [] |
| | | const loadLAYER = () => { |
| | | let mapLayers = [] |
| | | |
| | | globalBaseMapLayers.length && |
| | | globalBaseMapLayers.forEach(item => { |
| | | if (item.mapLayer) item.mapLayer.show = false |
| | | }) |
| | | globalBaseMapLayers.length && |
| | | globalBaseMapLayers.forEach(item => { |
| | | if (item.mapLayer) item.mapLayer.show = false |
| | | }) |
| | | |
| | | // 高德影像地图数据图层 |
| | | if (store.state.common.mapSetting.mode === 3) { |
| | | mapLayers.push( |
| | | ...[ |
| | | { key: 'imageryProvider_ammap', layer: imageryProvider_ammap }, |
| | | { key: 'imageryProvider_ammapBz', layer: imageryProvider_ammapBz }, |
| | | ] |
| | | ) |
| | | } |
| | | // 高德地图矢量图层加载 |
| | | if (store.state.common.mapSetting.mode === 2) { |
| | | mapLayers.push({ |
| | | key: 'imageryProvider_ammapSL', |
| | | layer: imageryProvider_ammapSL, |
| | | }) |
| | | } |
| | | // 高德影像地图数据图层 |
| | | if (store.state.common.mapSetting.mode === 3) { |
| | | mapLayers.push( |
| | | ...[ |
| | | { key: 'imageryProvider_ammap', layer: imageryProvider_ammap }, |
| | | { key: 'imageryProvider_ammapBz', layer: imageryProvider_ammapBz }, |
| | | ] |
| | | ) |
| | | } |
| | | // 高德地图矢量图层加载 |
| | | if (store.state.common.mapSetting.mode === 2) { |
| | | mapLayers.push({ |
| | | key: 'imageryProvider_ammapSL', |
| | | layer: imageryProvider_ammapSL, |
| | | }) |
| | | } |
| | | |
| | | // 标准地图加载 |
| | | if (store.state.common.mapSetting.mode === 0) { |
| | | mapLayers.push( |
| | | ...[ |
| | | { key: 'imageryProvider_standZh', layer: imageryProvider_standZh }, |
| | | { key: 'imageryProvider_stand', layer: imageryProvider_stand }, |
| | | ] |
| | | ) |
| | | } |
| | | // 标准地图加载 |
| | | if (store.state.common.mapSetting.mode === 0) { |
| | | mapLayers.push( |
| | | ...[ |
| | | { key: 'imageryProvider_standZh', layer: imageryProvider_standZh }, |
| | | { key: 'imageryProvider_stand', layer: imageryProvider_stand }, |
| | | ] |
| | | ) |
| | | } |
| | | |
| | | // 路线图加载 |
| | | if ( |
| | | store.state.common.mapSetting.roadLine === true && |
| | | store.state.common.mapSetting.mode === 1 |
| | | ) { |
| | | mapLayers.push({ key: 'annotation', layer: annotation }) |
| | | } |
| | | // 路线图加载 |
| | | if ( |
| | | store.state.common.mapSetting.roadLine === true && |
| | | store.state.common.mapSetting.mode === 1 |
| | | ) { |
| | | mapLayers.push({ key: 'annotation', layer: annotation }) |
| | | } |
| | | |
| | | // 天地图图层加载 |
| | | if (store.state.common.mapSetting.mode === 1) { |
| | | mapLayers.push({ |
| | | key: 'imageryProvider_tdt', |
| | | layer: imageryProvider_tdt, |
| | | }) |
| | | } |
| | | // 天地图图层加载 |
| | | if (store.state.common.mapSetting.mode === 1) { |
| | | mapLayers.push({ |
| | | key: 'imageryProvider_tdt', |
| | | layer: imageryProvider_tdt, |
| | | }) |
| | | } |
| | | |
| | | // 创建一个Set来快速查找array2中的id |
| | | let keyBaseMap = new Set(globalBaseMapLayers.map(item => item.key)) |
| | | let keyMapLayers = new Set(mapLayers.map(item => item.key)) |
| | | // 创建一个Set来快速查找array2中的id |
| | | let keyBaseMap = new Set(globalBaseMapLayers.map(item => item.key)) |
| | | let keyMapLayers = new Set(mapLayers.map(item => item.key)) |
| | | |
| | | let keyExistBaseMap = mapLayers.filter(item => !keyBaseMap.has(item.key)) |
| | | let keyExistBaseMap = mapLayers.filter(item => !keyBaseMap.has(item.key)) |
| | | |
| | | let keyNoExistBaseMap = globalBaseMapLayers.filter(item => keyMapLayers.has(item.key)) |
| | | let keyNoExistBaseMap = globalBaseMapLayers.filter(item => keyMapLayers.has(item.key)) |
| | | |
| | | keyExistBaseMap.length && |
| | | keyExistBaseMap.forEach(item => { |
| | | let curLayer = { |
| | | key: item.key, |
| | | mapLayer: viewer?.imageryLayers.addImageryProvider(item.layer), |
| | | } |
| | | keyExistBaseMap.length && |
| | | keyExistBaseMap.forEach(item => { |
| | | let curLayer = { |
| | | key: item.key, |
| | | mapLayer: viewer?.imageryLayers.addImageryProvider(item.layer), |
| | | } |
| | | |
| | | if (curLayer.mapLayer) curLayer.mapLayer.show = true |
| | | if (curLayer.key == 'imageryProvider_standZh') { |
| | | curLayer.mapLayer.brightness = 0.6 // 亮度(默认值) |
| | | curLayer.mapLayer.contrast = 1.8 // 对比度(负值降低对比度) |
| | | curLayer.mapLayer.hue = 1 // 色相(弧度值,3.0可能导致紫色) |
| | | curLayer.mapLayer.saturation = 0 // 增加饱和度强化蓝色 |
| | | curLayer.mapLayer.gamma = 0.3 // 伽马校正(小于1.0使颜色更鲜艳) |
| | | curLayer.invertColor = true // 启用反色 |
| | | } |
| | | |
| | | viewer?.imageryLayers.lowerToBottom(curLayer.mapLayer) |
| | | if (curLayer.key == 'imageryProvider_stand') { |
| | | curLayer.mapLayer.brightness = 0.6 // 亮度(默认值) |
| | | curLayer.mapLayer.contrast = 1.8 // 对比度(负值降低对比度) |
| | | curLayer.mapLayer.hue = 1 // 色相(弧度值,3.0可能导致紫色) |
| | | curLayer.mapLayer.saturation = 0 // 增加饱和度强化蓝色 |
| | | curLayer.mapLayer.gamma = 0.3 // 伽马校正(小于1.0使颜色更鲜艳) |
| | | curLayer.invertColor = true // 启用反色 |
| | | // curLayer.filterRGB = [0, 50, 100] |
| | | filterLayer({ |
| | | bInvertColor: true, |
| | | bFilterColor: true, |
| | | filterColor: '#4e70a6' |
| | | }) |
| | | } |
| | | |
| | | globalBaseMapLayers.push(curLayer) |
| | | }) |
| | | if (curLayer.mapLayer) curLayer.mapLayer.show = true |
| | | |
| | | keyNoExistBaseMap.length && |
| | | keyNoExistBaseMap.forEach(item => { |
| | | if (item.mapLayer) item.mapLayer.show = true |
| | | viewer?.imageryLayers.lowerToBottom(curLayer.mapLayer) |
| | | |
| | | viewer?.imageryLayers.lowerToBottom(item.mapLayer) |
| | | }) |
| | | // 2D/3D切换 |
| | | switchModel(store.state.common.mapSetting.visual) |
| | | } |
| | | globalBaseMapLayers.push(curLayer) |
| | | }) |
| | | |
| | | const addCustomLayers = (layerName, options) => { |
| | | if (options.type == 'arcgis') { |
| | | var imageryProvider = new Cesium.WebMapTileServiceImageryProvider({ |
| | | url: options.src, |
| | | layer: options.title, |
| | | style: 'default', |
| | | format: 'image/png', |
| | | tileMatrixSetID: 'default', |
| | | tilingScheme: new Cesium.GeographicTilingScheme(), |
| | | tileMatrixLabels: [ |
| | | '0', |
| | | '1', |
| | | '2', |
| | | '3', |
| | | '4', |
| | | '5', |
| | | '6', |
| | | '7', |
| | | '8', |
| | | '9', |
| | | '10', |
| | | '11', |
| | | '12', |
| | | '13', |
| | | '14', |
| | | '15', |
| | | '16', |
| | | '17', |
| | | '18', |
| | | '19', |
| | | ], |
| | | }) |
| | | keyNoExistBaseMap.length && |
| | | keyNoExistBaseMap.forEach(item => { |
| | | if (item.mapLayer) item.mapLayer.show = true |
| | | |
| | | customMapLayer[layerName] = viewer?.imageryLayers.addImageryProvider(imageryProvider) |
| | | viewer?.imageryLayers.lowerToBottom(item.mapLayer) |
| | | }) |
| | | // 2D/3D切换 |
| | | switchModel(store.state.common.mapSetting.visual) |
| | | } |
| | | |
| | | // const layerProvider = new Cesium.ArcGisMapServerImageryProvider({ |
| | | // url: options.src, |
| | | // tilingScheme: new Cesium.GeographicTilingScheme() |
| | | // }) |
| | | // customMapLayer[layerName] = viewer?.imageryLayers.addImageryProvider(layerProvider) |
| | | } |
| | | } |
| | | const filterLayer = (options) => { |
| | | const { bInvertColor, bFilterColor, filterColor } = options |
| | | const color = new Cesium.Color.fromCssColorString(filterColor) |
| | | const filterRGB = [ |
| | | Math.round(color.red * 255), |
| | | Math.round(color.green * 255), |
| | | Math.round(color.blue * 255) |
| | | ] |
| | | let fragShader = viewer.scene.globe._surfaceShaderSet.baseFragmentShaderSource.sources |
| | | for (let i = 0; i < fragShader.length; i++) { |
| | | const strS = 'color = czm_saturation(color, textureSaturation);\n#endif\n' |
| | | let strT = 'color = czm_saturation(color, textureSaturation);\n#endif\n' |
| | | if (bInvertColor) { |
| | | strT += ` |
| | | color.r = 1.0 - color.r; |
| | | color.g = 1.0 - color.g; |
| | | color.b = 1.0 - color.b; |
| | | ` |
| | | } |
| | | if (bFilterColor) { |
| | | strT += ` |
| | | color.r = color.r * ${filterRGB[0]}.0/255.0; |
| | | color.g = color.g * ${filterRGB[1]}.0/255.0; |
| | | color.b = color.b * ${filterRGB[2]}.0/255.0; |
| | | ` |
| | | } |
| | | fragShader[i] = fragShader[i].replace(strS, strT) |
| | | } |
| | | } |
| | | |
| | | const removeCustomLayers = (layerName = '') => { |
| | | if (layerName) { |
| | | if (customMapLayer[layerName]) { |
| | | viewer?.imageryLayers.remove(customMapLayer[layerName]) |
| | | const addCustomLayers = (layerName, options) => { |
| | | if (options.type == 'arcgis') { |
| | | var imageryProvider = new Cesium.WebMapTileServiceImageryProvider({ |
| | | url: options.src, |
| | | layer: options.title, |
| | | style: 'default', |
| | | format: 'image/png', |
| | | tileMatrixSetID: 'default', |
| | | tilingScheme: new Cesium.GeographicTilingScheme(), |
| | | tileMatrixLabels: [ |
| | | '0', |
| | | '1', |
| | | '2', |
| | | '3', |
| | | '4', |
| | | '5', |
| | | '6', |
| | | '7', |
| | | '8', |
| | | '9', |
| | | '10', |
| | | '11', |
| | | '12', |
| | | '13', |
| | | '14', |
| | | '15', |
| | | '16', |
| | | '17', |
| | | '18', |
| | | '19', |
| | | ], |
| | | }) |
| | | |
| | | delete customMapLayer[layerName] |
| | | } |
| | | } else { |
| | | for (let k in customMapLayer) { |
| | | viewer?.imageryLayers.remove(customMapLayer[k]) |
| | | } |
| | | customMapLayer[layerName] = viewer?.imageryLayers.addImageryProvider(imageryProvider) |
| | | |
| | | customMapLayer = {} |
| | | } |
| | | } |
| | | // const layerProvider = new Cesium.ArcGisMapServerImageryProvider({ |
| | | // url: options.src, |
| | | // tilingScheme: new Cesium.GeographicTilingScheme() |
| | | // }) |
| | | // customMapLayer[layerName] = viewer?.imageryLayers.addImageryProvider(layerProvider) |
| | | } |
| | | } |
| | | |
| | | // 切换不同背景图层 |
| | | const patternMap = () => { |
| | | const imageryLayers = viewer?.scene.imageryLayers |
| | | // 切换为标准图层 |
| | | if (store.state.common.mapSetting.mode === 0) { |
| | | const tdtImg_c = imageryLayers?._layers.find(v => v.imageryProvider._layer === 'tdtImg_c') |
| | | const tdtZwImg_c = imageryLayers?._layers.find(v => v.imageryProvider._layer === 'tdtZwImg_c') |
| | | viewer?.imageryLayers.remove(tdtImg_c) |
| | | viewer?.imageryLayers.remove(tdtZwImg_c) |
| | | } else { |
| | | const tdtStand_c = imageryLayers?._layers.find( |
| | | v => v.imageryProvider.credit?.html === 'stand_tc' |
| | | ) |
| | | const tdtStand_zj = imageryLayers?._layers.find( |
| | | v => v.imageryProvider.credit?.html === 'stand_zj' |
| | | ) |
| | | viewer?.imageryLayers.remove(tdtStand_c) |
| | | viewer?.imageryLayers.remove(tdtStand_zj) |
| | | } |
| | | loadLAYER() |
| | | } |
| | | const removeCustomLayers = (layerName = '') => { |
| | | if (layerName) { |
| | | if (customMapLayer[layerName]) { |
| | | viewer?.imageryLayers.remove(customMapLayer[layerName]) |
| | | |
| | | // 生成或删除路网图层 |
| | | const roadPattern = flag => { |
| | | if (store.state.common.mapSetting.mode === 0) return |
| | | const imageryLayers = viewer?.scene.imageryLayers |
| | | const tdtZwImg_c = imageryLayers?._layers.find(v => v.imageryProvider._layer === 'tdtZwImg_c') |
| | | if (!flag) { |
| | | viewer?.imageryLayers.remove(tdtZwImg_c) |
| | | } else { |
| | | viewer?.imageryLayers.addImageryProvider(annotation) |
| | | } |
| | | } |
| | | delete customMapLayer[layerName] |
| | | } |
| | | } else { |
| | | for (let k in customMapLayer) { |
| | | viewer?.imageryLayers.remove(customMapLayer[k]) |
| | | } |
| | | |
| | | // 二维三维切换 |
| | | // 切换为二三维模式 |
| | | const switchModel = type => { |
| | | switch (type) { |
| | | case '2D': |
| | | viewer?.scene.morphTo2D(0) |
| | | // viewer?.scene.camera.setView({ |
| | | // orientation: { |
| | | // pitch: Cesium.Math.toRadians(-60), |
| | | // heading: Cesium.Math.toRadians(0), |
| | | // }, |
| | | // }); |
| | | break |
| | | case '3D': |
| | | viewer?.scene.morphTo3D(0) |
| | | // viewer?.scene.camera.setView({ |
| | | // orientation: { |
| | | // pitch: Cesium.Math.toRadians(-90), |
| | | // heading: Cesium.Math.toRadians(0), |
| | | // }, |
| | | // }); |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | } |
| | | customMapLayer = {} |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description: 地图暗黑模式切换 |
| | | * @param {*} viewer 地图实例 |
| | | * @param {*} options 配置项 |
| | | * @return {*} |
| | | */ |
| | | const darkMap = (viewer, isDark = false, options) => { |
| | | const defaultOptions = { |
| | | brightness: 1, |
| | | contrast: 1, |
| | | gamma: 1, |
| | | hue: 0, |
| | | saturation: 1, |
| | | } |
| | | // 切换不同背景图层 |
| | | const patternMap = () => { |
| | | const imageryLayers = viewer?.scene.imageryLayers |
| | | // 切换为标准图层 |
| | | if (store.state.common.mapSetting.mode === 0) { |
| | | const tdtImg_c = imageryLayers?._layers.find(v => v.imageryProvider._layer === 'tdtImg_c') |
| | | const tdtZwImg_c = imageryLayers?._layers.find(v => v.imageryProvider._layer === 'tdtZwImg_c') |
| | | viewer?.imageryLayers.remove(tdtImg_c) |
| | | viewer?.imageryLayers.remove(tdtZwImg_c) |
| | | } else { |
| | | const tdtStand_c = imageryLayers?._layers.find( |
| | | v => v.imageryProvider.credit?.html === 'stand_tc' |
| | | ) |
| | | const tdtStand_zj = imageryLayers?._layers.find( |
| | | v => v.imageryProvider.credit?.html === 'stand_zj' |
| | | ) |
| | | viewer?.imageryLayers.remove(tdtStand_c) |
| | | viewer?.imageryLayers.remove(tdtStand_zj) |
| | | } |
| | | loadLAYER() |
| | | } |
| | | |
| | | !isDark && Object.assign(options, defaultOptions) |
| | | // 生成或删除路网图层 |
| | | const roadPattern = flag => { |
| | | if (store.state.common.mapSetting.mode === 0) return |
| | | const imageryLayers = viewer?.scene.imageryLayers |
| | | const tdtZwImg_c = imageryLayers?._layers.find(v => v.imageryProvider._layer === 'tdtZwImg_c') |
| | | if (!flag) { |
| | | viewer?.imageryLayers.remove(tdtZwImg_c) |
| | | } else { |
| | | viewer?.imageryLayers.addImageryProvider(annotation) |
| | | } |
| | | } |
| | | |
| | | const baseLayer = viewer.imageryLayers.get(0) |
| | | baseLayer.brightness = options.brightness || 0 |
| | | baseLayer.contrast = options.contrast || 0 |
| | | baseLayer.gamma = options.gamma || 2 |
| | | baseLayer.hue = options.hue || 0 |
| | | baseLayer.saturation = options.saturation || 0 |
| | | // 二维三维切换 |
| | | // 切换为二三维模式 |
| | | const switchModel = type => { |
| | | switch (type) { |
| | | case '2D': |
| | | viewer?.scene.morphTo2D(0) |
| | | // viewer?.scene.camera.setView({ |
| | | // orientation: { |
| | | // pitch: Cesium.Math.toRadians(-60), |
| | | // heading: Cesium.Math.toRadians(0), |
| | | // }, |
| | | // }); |
| | | break |
| | | case '3D': |
| | | viewer?.scene.morphTo3D(0) |
| | | // viewer?.scene.camera.setView({ |
| | | // orientation: { |
| | | // pitch: Cesium.Math.toRadians(-90), |
| | | // heading: Cesium.Math.toRadians(0), |
| | | // }, |
| | | // }); |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | } |
| | | |
| | | const baseFragShader = viewer.scene.globe._surfaceShaderSet.baseFragmentShaderSource.sources |
| | | for (let i = 0; i < baseFragShader.length; i++) { |
| | | const strS = 'color = czm_saturation(color, textureSaturation);\n#endif\n' |
| | | let strT = 'color = czm_saturation(color, textureSaturation);\n#endif\n' |
| | | if (options.invertColor) { |
| | | strT += ` |
| | | /** |
| | | * @description: 地图暗黑模式切换 |
| | | * @param {*} viewer 地图实例 |
| | | * @param {*} options 配置项 |
| | | * @return {*} |
| | | */ |
| | | const darkMap = (viewer, isDark = false, options) => { |
| | | const defaultOptions = { |
| | | brightness: 1, |
| | | contrast: 1, |
| | | gamma: 1, |
| | | hue: 0, |
| | | saturation: 1, |
| | | } |
| | | |
| | | !isDark && Object.assign(options, defaultOptions) |
| | | |
| | | const baseLayer = viewer.imageryLayers.get(0) |
| | | baseLayer.brightness = options.brightness || 0 |
| | | baseLayer.contrast = options.contrast || 0 |
| | | baseLayer.gamma = options.gamma || 2 |
| | | baseLayer.hue = options.hue || 0 |
| | | baseLayer.saturation = options.saturation || 0 |
| | | |
| | | const baseFragShader = viewer.scene.globe._surfaceShaderSet.baseFragmentShaderSource.sources |
| | | for (let i = 0; i < baseFragShader.length; i++) { |
| | | const strS = 'color = czm_saturation(color, textureSaturation);\n#endif\n' |
| | | let strT = 'color = czm_saturation(color, textureSaturation);\n#endif\n' |
| | | if (options.invertColor) { |
| | | strT += ` |
| | | color.r = 1.0 - color.r; |
| | | color.g = 1.0 - color.g; |
| | | color.b = 1.0 - color.b; |
| | | ` |
| | | } |
| | | if (options.filterRGB.length > 0) { |
| | | strT += ` |
| | | } |
| | | if (options.filterRGB.length > 0) { |
| | | strT += ` |
| | | color.r = color.r * ${options.filterRGB[0]}.0/255.0; |
| | | color.g = color.g * ${options.filterRGB[1]}.0/255.0; |
| | | color.b = color.b * ${options.filterRGB[2]}.0/255.0; |
| | | ` |
| | | } |
| | | if (!isDark) { |
| | | //恢复默认 |
| | | baseFragShader[i] = baseFragShader[i].replace(strT, strS) |
| | | } else { |
| | | // 替换为暗黑模式 |
| | | baseFragShader[i] = baseFragShader[i].replace(strS, strT) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (!isDark) { |
| | | //恢复默认 |
| | | baseFragShader[i] = baseFragShader[i].replace(strT, strS) |
| | | } else { |
| | | // 替换为暗黑模式 |
| | | baseFragShader[i] = baseFragShader[i].replace(strS, strT) |
| | | } |
| | | } |
| | | } |
| | | |
| | | const switchDarkModel = () => { |
| | | const isDark = store.state.common.mapSetting.isDark |
| | | darkMap(viewer, isDark, { |
| | | //反色 |
| | | invertColor: true, |
| | | //滤色值 [176, 224, 230] |
| | | filterRGB: [60, 145, 172], |
| | | }) |
| | | } |
| | | const switchDarkModel = () => { |
| | | const isDark = store.state.common.mapSetting.isDark |
| | | darkMap(viewer, isDark, { |
| | | //反色 |
| | | invertColor: true, |
| | | //滤色值 [176, 224, 230] |
| | | filterRGB: [60, 145, 172], |
| | | }) |
| | | } |
| | | |
| | | //移除DataSource中所有实体 |
| | | const removeAllDataSource = () => { |
| | | viewer?.dataSources.removeAll() |
| | | } |
| | | //移除DataSource中所有实体 |
| | | const removeAllDataSource = () => { |
| | | viewer?.dataSources.removeAll() |
| | | } |
| | | |
| | | // 清除所有标记点 |
| | | const removeAllPoint = () => { |
| | | if (viewer) { |
| | | viewer?.entities?.removeAll() |
| | | // viewer?.scene?.primitives?.removeAll(); |
| | | } |
| | | } |
| | | // 清除所有标记点 |
| | | const removeAllPoint = () => { |
| | | if (viewer) { |
| | | viewer?.entities?.removeAll() |
| | | // viewer?.scene?.primitives?.removeAll(); |
| | | } |
| | | } |
| | | |
| | | // 通过点ID删除 |
| | | const removeById = id => { |
| | | viewer?.entities.removeById(id) |
| | | const pointEntity = viewer?.entities.getById(id) |
| | | if (pointEntity && pointEntity !== undefined) { |
| | | viewer?.entities.remove(pointEntity) |
| | | } |
| | | } |
| | | // 通过点ID删除 |
| | | const removeById = id => { |
| | | viewer?.entities.removeById(id) |
| | | const pointEntity = viewer?.entities.getById(id) |
| | | if (pointEntity && pointEntity !== undefined) { |
| | | viewer?.entities.remove(pointEntity) |
| | | } |
| | | } |
| | | |
| | | // 通过点ID获取实体 |
| | | const getEntityById = id => { |
| | | const pointEntity = viewer?.entities.getById(id) |
| | | return pointEntity |
| | | } |
| | | // 通过点ID获取实体 |
| | | const getEntityById = id => { |
| | | const pointEntity = viewer?.entities.getById(id) |
| | | return pointEntity |
| | | } |
| | | |
| | | // 添加标记点 |
| | | const addPoint = pointOption => { |
| | | if (!pointOption.longitude && !pointOption.latitude) return |
| | | const position = Cesium.Cartesian3.fromDegrees( |
| | | pointOption.longitude, |
| | | pointOption.latitude, |
| | | pointOption?.altitude || 0 |
| | | ) |
| | | viewer?.entities.add({ |
| | | position, |
| | | billboard: pointOption.billboard, |
| | | point: pointOption.point, |
| | | label: pointOption.label, |
| | | id: pointOption.id, |
| | | }) |
| | | } |
| | | // 添加标记点 |
| | | const addPoint = pointOption => { |
| | | if (!pointOption.longitude && !pointOption.latitude) return |
| | | const position = Cesium.Cartesian3.fromDegrees( |
| | | pointOption.longitude, |
| | | pointOption.latitude, |
| | | pointOption?.altitude || 0 |
| | | ) |
| | | viewer?.entities.add({ |
| | | position, |
| | | billboard: pointOption.billboard, |
| | | point: pointOption.point, |
| | | label: pointOption.label, |
| | | id: pointOption.id, |
| | | }) |
| | | } |
| | | |
| | | const addPolyline = pointOption => { |
| | | return viewer?.entities.add({ |
| | | polyline: pointOption.polyline, |
| | | id: pointOption.id, |
| | | }) |
| | | } |
| | | const addPolyline = pointOption => { |
| | | return viewer?.entities.add({ |
| | | polyline: pointOption.polyline, |
| | | id: pointOption.id, |
| | | }) |
| | | } |
| | | |
| | | // 更新图片实体位置 |
| | | function updateEntityPosition(longitude, latitude, id, params) { |
| | | const entity = getEntityById(id) |
| | | const position = Cesium.Cartesian3.fromDegrees(longitude, latitude) |
| | | const heading = Cesium.Math.toRadians(-params.heading) |
| | | if (Cesium.defined(entity)) { |
| | | entity.position = position |
| | | entity.billboard.rotation = heading |
| | | } |
| | | } |
| | | // 更新图片实体位置 |
| | | function updateEntityPosition (longitude, latitude, id, params) { |
| | | const entity = getEntityById(id) |
| | | const position = Cesium.Cartesian3.fromDegrees(longitude, latitude) |
| | | const heading = Cesium.Math.toRadians(-params.heading) |
| | | if (Cesium.defined(entity)) { |
| | | entity.position = position |
| | | entity.billboard.rotation = heading |
| | | } |
| | | } |
| | | |
| | | // 飞行 flyto |
| | | const flyTo = (pointOption, time = 4, height = 3000, orientation = {}) => { |
| | | if (!pointOption.longitude && !pointOption.latitude) return |
| | | const destination = Cesium.Cartesian3.fromDegrees( |
| | | pointOption.longitude, |
| | | pointOption.latitude, |
| | | height |
| | | ) |
| | | const duration = time |
| | | viewer?.camera.flyTo({ |
| | | destination, |
| | | duration, |
| | | orientation, |
| | | }) |
| | | } |
| | | // 飞行 flyto |
| | | const flyTo = (pointOption, time = 4, height = 3000, orientation = {}) => { |
| | | if (!pointOption.longitude && !pointOption.latitude) return |
| | | const destination = Cesium.Cartesian3.fromDegrees( |
| | | pointOption.longitude, |
| | | pointOption.latitude, |
| | | height |
| | | ) |
| | | const duration = time |
| | | viewer?.camera.flyTo({ |
| | | destination, |
| | | duration, |
| | | orientation, |
| | | }) |
| | | } |
| | | |
| | | // 鼠标点击事件 |
| | | const addLeftClickEvent = (sid, cb, eventKey = 'handler') => { |
| | | if (handlerEvents.handler) removeLeftClickEvent() |
| | | if (handlerEvents[eventKey]) removeLeftClickEvent(eventKey) |
| | | // 鼠标点击事件 |
| | | const addLeftClickEvent = (sid, cb, eventKey = 'handler') => { |
| | | if (handlerEvents.handler) removeLeftClickEvent() |
| | | if (handlerEvents[eventKey]) removeLeftClickEvent(eventKey) |
| | | |
| | | handlerEvents[eventKey] = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | handlerEvents[eventKey].setInputAction(function (click) { |
| | | const pick = viewer?.scene.pick(click.position) |
| | | handlerEvents[eventKey] = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | handlerEvents[eventKey].setInputAction(function (click) { |
| | | const pick = viewer?.scene.pick(click.position) |
| | | |
| | | if (pick && pick.primitive && pick.primitive?.customParams?.type == '3DTileset') { |
| | | return cb(click, pick, viewer, handlerEvents[eventKey]) |
| | | } |
| | | if (pick && pick.primitive && pick.primitive?.customParams?.type == '3DTileset') { |
| | | return cb(click, pick, viewer, handlerEvents[eventKey]) |
| | | } |
| | | |
| | | if (pick && pick.id && (pick.id._id === sid || pick.id._id.includes(sid))) { |
| | | cb(click, pick, viewer, handlerEvents[eventKey]) |
| | | } |
| | | if (pick && pick.id && (pick.id._id === sid || pick.id._id.includes(sid))) { |
| | | cb(click, pick, viewer, handlerEvents[eventKey]) |
| | | } |
| | | |
| | | if (sid === null) { |
| | | cb(click, pick, viewer, handlerEvents[eventKey]) |
| | | } |
| | | }, Cesium.ScreenSpaceEventType.LEFT_CLICK) |
| | | } |
| | | if (sid === null) { |
| | | cb(click, pick, viewer, handlerEvents[eventKey]) |
| | | } |
| | | }, Cesium.ScreenSpaceEventType.LEFT_CLICK) |
| | | } |
| | | |
| | | // 移除鼠标点击事件 |
| | | const removeLeftClickEvent = (eventKey = 'handler') => { |
| | | if (handlerEvents[eventKey] == null) return |
| | | handlerEvents[eventKey].removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK) |
| | | // 移除鼠标点击事件 |
| | | const removeLeftClickEvent = (eventKey = 'handler') => { |
| | | if (handlerEvents[eventKey] == null) return |
| | | handlerEvents[eventKey].removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK) |
| | | |
| | | handlerEvents[eventKey] = null |
| | | } |
| | | handlerEvents[eventKey] = null |
| | | } |
| | | |
| | | // 鼠标左键按下事件 |
| | | let leftDownClickHandler = { handler: null } |
| | | const addLeftDownClickEvent = (sid, cb, eventKey = 'handler') => { |
| | | if (leftDownClickHandler.handler) removeLeftDownClickEvent() |
| | | if (leftDownClickHandler[eventKey]) removeLeftDownClickEvent(eventKey) |
| | | // 鼠标左键按下事件 |
| | | let leftDownClickHandler = { handler: null } |
| | | const addLeftDownClickEvent = (sid, cb, eventKey = 'handler') => { |
| | | if (leftDownClickHandler.handler) removeLeftDownClickEvent() |
| | | if (leftDownClickHandler[eventKey]) removeLeftDownClickEvent(eventKey) |
| | | |
| | | leftDownClickHandler[eventKey] = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | leftDownClickHandler[eventKey] = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | |
| | | leftDownClickHandler[eventKey].setInputAction(function (click) { |
| | | const pick = viewer?.scene.pick(click.position) |
| | | cb(click, pick, viewer) |
| | | }, Cesium.ScreenSpaceEventType.LEFT_DOWN) |
| | | } |
| | | leftDownClickHandler[eventKey].setInputAction(function (click) { |
| | | const pick = viewer?.scene.pick(click.position) |
| | | cb(click, pick, viewer) |
| | | }, Cesium.ScreenSpaceEventType.LEFT_DOWN) |
| | | } |
| | | |
| | | // 移除鼠标左键按下事件 |
| | | const removeLeftDownClickEvent = (eventKey = 'handler') => { |
| | | if (leftDownClickHandler[eventKey] == null) return |
| | | leftDownClickHandler[eventKey].removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN) |
| | | // 移除鼠标左键按下事件 |
| | | const removeLeftDownClickEvent = (eventKey = 'handler') => { |
| | | if (leftDownClickHandler[eventKey] == null) return |
| | | leftDownClickHandler[eventKey].removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN) |
| | | |
| | | leftDownClickHandler[eventKey] = null |
| | | } |
| | | leftDownClickHandler[eventKey] = null |
| | | } |
| | | |
| | | // 鼠标右击事件 |
| | | let leftUpClickHandler = { handler: null } |
| | | const addLeftUpClickEvent = (sid, cb, eventKey = 'handler') => { |
| | | if (leftUpClickHandler.handler) removeLeftUpClickEvent() |
| | | if (leftUpClickHandler[eventKey]) removeLeftUpClickEvent(eventKey) |
| | | // 鼠标右击事件 |
| | | let leftUpClickHandler = { handler: null } |
| | | const addLeftUpClickEvent = (sid, cb, eventKey = 'handler') => { |
| | | if (leftUpClickHandler.handler) removeLeftUpClickEvent() |
| | | if (leftUpClickHandler[eventKey]) removeLeftUpClickEvent(eventKey) |
| | | |
| | | leftUpClickHandler[eventKey] = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | leftUpClickHandler[eventKey] = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | |
| | | leftUpClickHandler[eventKey].setInputAction(function (click) { |
| | | const pick = viewer?.scene.pick(click.position) |
| | | cb(click, pick, viewer) |
| | | }, Cesium.ScreenSpaceEventType.LEFT_UP) |
| | | } |
| | | leftUpClickHandler[eventKey].setInputAction(function (click) { |
| | | const pick = viewer?.scene.pick(click.position) |
| | | cb(click, pick, viewer) |
| | | }, Cesium.ScreenSpaceEventType.LEFT_UP) |
| | | } |
| | | |
| | | // 移除鼠标右键事件 |
| | | const removeLeftUpClickEvent = (eventKey = 'handler') => { |
| | | if (leftUpClickHandler[eventKey] == null) return |
| | | leftUpClickHandler[eventKey].removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP) |
| | | // 移除鼠标右键事件 |
| | | const removeLeftUpClickEvent = (eventKey = 'handler') => { |
| | | if (leftUpClickHandler[eventKey] == null) return |
| | | leftUpClickHandler[eventKey].removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP) |
| | | |
| | | leftUpClickHandler[eventKey] = null |
| | | } |
| | | leftUpClickHandler[eventKey] = null |
| | | } |
| | | |
| | | // 鼠标右击事件 |
| | | let rightClickHandler |
| | | const addRightClickEvent = (sid, cb) => { |
| | | if (rightClickHandler) removeRightClickEvent() |
| | | // 鼠标右击事件 |
| | | let rightClickHandler |
| | | const addRightClickEvent = (sid, cb) => { |
| | | if (rightClickHandler) removeRightClickEvent() |
| | | |
| | | rightClickHandler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | rightClickHandler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | |
| | | rightClickHandler.setInputAction(function (click) { |
| | | const pick = viewer?.scene.pick(click.position) |
| | | cb(click, pick, viewer) |
| | | }, Cesium.ScreenSpaceEventType.RIGHT_CLICK) |
| | | } |
| | | rightClickHandler.setInputAction(function (click) { |
| | | const pick = viewer?.scene.pick(click.position) |
| | | cb(click, pick, viewer) |
| | | }, Cesium.ScreenSpaceEventType.RIGHT_CLICK) |
| | | } |
| | | |
| | | // 移除鼠标右键事件 |
| | | const removeRightClickEvent = () => { |
| | | if (!rightClickHandler) return |
| | | rightClickHandler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK) |
| | | // 移除鼠标右键事件 |
| | | const removeRightClickEvent = () => { |
| | | if (!rightClickHandler) return |
| | | rightClickHandler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK) |
| | | |
| | | rightClickHandler = null |
| | | } |
| | | rightClickHandler = null |
| | | } |
| | | |
| | | // 鼠标移动事件 |
| | | let LeftMounseHandler |
| | | const addLeftmounseEvent = (sid, cb) => { |
| | | if (LeftMounseHandler) removeLeftmounseEvent() |
| | | LeftMounseHandler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | LeftMounseHandler.setInputAction(function (event) { |
| | | const cartesian3 = viewer?.scene.globe.pick( |
| | | viewer?.camera.getPickRay(event.startPosition), |
| | | viewer?.scene |
| | | ) |
| | | cb(cartesian3, viewer) |
| | | }, Cesium.ScreenSpaceEventType.MOUSE_MOVE) |
| | | } |
| | | // 鼠标移动事件 |
| | | let LeftMounseHandler |
| | | const addLeftmounseEvent = (sid, cb) => { |
| | | if (LeftMounseHandler) removeLeftmounseEvent() |
| | | LeftMounseHandler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | LeftMounseHandler.setInputAction(function (event) { |
| | | const cartesian3 = viewer?.scene.globe.pick( |
| | | viewer?.camera.getPickRay(event.startPosition), |
| | | viewer?.scene |
| | | ) |
| | | cb(cartesian3, viewer) |
| | | }, Cesium.ScreenSpaceEventType.MOUSE_MOVE) |
| | | } |
| | | |
| | | // 移除鼠标移动事件 |
| | | const removeLeftmounseEvent = () => { |
| | | if (LeftMounseHandler == null) return |
| | | LeftMounseHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE) |
| | | // 移除鼠标移动事件 |
| | | const removeLeftmounseEvent = () => { |
| | | if (LeftMounseHandler == null) return |
| | | LeftMounseHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE) |
| | | |
| | | LeftMounseHandler = null |
| | | } |
| | | LeftMounseHandler = null |
| | | } |
| | | |
| | | let MounseHandler |
| | | const addMounseHandler = (sid, cb) => { |
| | | if (MounseHandler == null) removeMounseEvent() |
| | | let MounseHandler |
| | | const addMounseHandler = (sid, cb) => { |
| | | if (MounseHandler == null) removeMounseEvent() |
| | | |
| | | MounseHandler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | MounseHandler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | |
| | | MounseHandler.setInputAction(function (movement) { |
| | | let mouseInfo = _getMouseInfo(movement.endPosition) |
| | | MounseHandler.setInputAction(function (movement) { |
| | | let mouseInfo = _getMouseInfo(movement.endPosition) |
| | | |
| | | cb(mouseInfo, viewer) |
| | | }, Cesium.ScreenSpaceEventType.MOUSE_MOVE) |
| | | } |
| | | cb(mouseInfo, viewer) |
| | | }, Cesium.ScreenSpaceEventType.MOUSE_MOVE) |
| | | } |
| | | |
| | | const _getMouseInfo = position => { |
| | | let scene = viewer.scene |
| | | let target = scene.pick(position) |
| | | let cartesian = undefined |
| | | let surfaceCartesian = undefined |
| | | let wgs84Position = undefined |
| | | let wgs84SurfacePosition = undefined |
| | | if (scene.pickPositionSupported) { |
| | | cartesian = scene.pickPosition(position) |
| | | } |
| | | if (cartesian) { |
| | | let c = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian) |
| | | if (c) { |
| | | wgs84Position = { |
| | | lng: Cesium.Math.toDegrees(c.longitude), |
| | | lat: Cesium.Math.toDegrees(c.latitude), |
| | | alt: c.height, |
| | | } |
| | | } |
| | | } |
| | | if ( |
| | | scene.mode === Cesium.SceneMode.SCENE3D && |
| | | !(viewer.terrainProvider instanceof Cesium.EllipsoidTerrainProvider) |
| | | ) { |
| | | let ray = scene.camera.getPickRay(position) |
| | | surfaceCartesian = scene.globe.pick(ray, scene) |
| | | } else { |
| | | surfaceCartesian = scene.camera.pickEllipsoid(position, Cesium.Ellipsoid.WGS84) |
| | | } |
| | | if (surfaceCartesian) { |
| | | let c = Cesium.Ellipsoid.WGS84.cartesianToCartographic(surfaceCartesian) |
| | | if (c) { |
| | | wgs84SurfacePosition = { |
| | | lng: Cesium.Math.toDegrees(c.longitude), |
| | | lat: Cesium.Math.toDegrees(c.latitude), |
| | | alt: c.height, |
| | | } |
| | | } |
| | | } |
| | | const _getMouseInfo = position => { |
| | | let scene = viewer.scene |
| | | let target = scene.pick(position) |
| | | let cartesian = undefined |
| | | let surfaceCartesian = undefined |
| | | let wgs84Position = undefined |
| | | let wgs84SurfacePosition = undefined |
| | | if (scene.pickPositionSupported) { |
| | | cartesian = scene.pickPosition(position) |
| | | } |
| | | if (cartesian) { |
| | | let c = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian) |
| | | if (c) { |
| | | wgs84Position = { |
| | | lng: Cesium.Math.toDegrees(c.longitude), |
| | | lat: Cesium.Math.toDegrees(c.latitude), |
| | | alt: c.height, |
| | | } |
| | | } |
| | | } |
| | | if ( |
| | | scene.mode === Cesium.SceneMode.SCENE3D && |
| | | !(viewer.terrainProvider instanceof Cesium.EllipsoidTerrainProvider) |
| | | ) { |
| | | let ray = scene.camera.getPickRay(position) |
| | | surfaceCartesian = scene.globe.pick(ray, scene) |
| | | } else { |
| | | surfaceCartesian = scene.camera.pickEllipsoid(position, Cesium.Ellipsoid.WGS84) |
| | | } |
| | | if (surfaceCartesian) { |
| | | let c = Cesium.Ellipsoid.WGS84.cartesianToCartographic(surfaceCartesian) |
| | | if (c) { |
| | | wgs84SurfacePosition = { |
| | | lng: Cesium.Math.toDegrees(c.longitude), |
| | | lat: Cesium.Math.toDegrees(c.latitude), |
| | | alt: c.height, |
| | | } |
| | | } |
| | | } |
| | | |
| | | return { |
| | | target: target, |
| | | windowPosition: position, |
| | | position: cartesian, |
| | | wgs84Position: wgs84Position, |
| | | surfacePosition: surfaceCartesian, |
| | | wgs84SurfacePosition: wgs84SurfacePosition, |
| | | } |
| | | } |
| | | return { |
| | | target: target, |
| | | windowPosition: position, |
| | | position: cartesian, |
| | | wgs84Position: wgs84Position, |
| | | surfacePosition: surfaceCartesian, |
| | | wgs84SurfacePosition: wgs84SurfacePosition, |
| | | } |
| | | } |
| | | |
| | | // 移除鼠标移动事件 |
| | | const removeMounseEvent = () => { |
| | | if (MounseHandler == null) return |
| | | MounseHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE) |
| | | // 移除鼠标移动事件 |
| | | const removeMounseEvent = () => { |
| | | if (MounseHandler == null) return |
| | | MounseHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE) |
| | | |
| | | MounseHandler = null |
| | | } |
| | | MounseHandler = null |
| | | } |
| | | |
| | | // 视角变化时间 |
| | | let mapViewHandler = null |
| | | const addCameraMoveEvent = cb => { |
| | | if (mapViewHandler) removeCameraMoveEvent() |
| | | // 视角变化时间 |
| | | let mapViewHandler = null |
| | | const addCameraMoveEvent = cb => { |
| | | if (mapViewHandler) removeCameraMoveEvent() |
| | | |
| | | mapViewHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas) |
| | | mapViewHandler.setInputAction(event => { |
| | | cb(event) |
| | | }, Cesium.ScreenSpaceEventType.WHEEL) |
| | | } |
| | | mapViewHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas) |
| | | mapViewHandler.setInputAction(event => { |
| | | cb(event) |
| | | }, Cesium.ScreenSpaceEventType.WHEEL) |
| | | } |
| | | |
| | | const removeCameraMoveEvent = () => { |
| | | if (mapViewHandler == null) return |
| | | mapViewHandler.removeInputAction(Cesium.ScreenSpaceEventType.WHEEL) |
| | | mapViewHandler = null |
| | | } |
| | | const removeCameraMoveEvent = () => { |
| | | if (mapViewHandler == null) return |
| | | mapViewHandler.removeInputAction(Cesium.ScreenSpaceEventType.WHEEL) |
| | | mapViewHandler = null |
| | | } |
| | | |
| | | // 添加entity |
| | | const addCustomEntityDataSource = (sourceName, entities) => { |
| | | if (!customEntityDataSources[sourceName]) { |
| | | customEntityDataSources[sourceName] = new Cesium.CustomDataSource() |
| | | window.$viewer?.dataSources.add(customEntityDataSources[sourceName]) |
| | | } |
| | | // 添加entity |
| | | const addCustomEntityDataSource = (sourceName, entities) => { |
| | | if (!customEntityDataSources[sourceName]) { |
| | | customEntityDataSources[sourceName] = new Cesium.CustomDataSource() |
| | | window.$viewer?.dataSources.add(customEntityDataSources[sourceName]) |
| | | } |
| | | |
| | | let entity = customEntityDataSources[sourceName].entities.add(entities) |
| | | let entity = customEntityDataSources[sourceName].entities.add(entities) |
| | | |
| | | return entity |
| | | } |
| | | return entity |
| | | } |
| | | |
| | | const clearCustomEntityDataSource = sourceName => { |
| | | if (customEntityDataSources[sourceName]) { |
| | | customEntityDataSources[sourceName]?.entities.removeAll() |
| | | } |
| | | } |
| | | const clearCustomEntityDataSource = sourceName => { |
| | | if (customEntityDataSources[sourceName]) { |
| | | customEntityDataSources[sourceName]?.entities.removeAll() |
| | | } |
| | | } |
| | | |
| | | const removeAllCustomEntityDataSource = sourceName => { |
| | | if (customEntityDataSources[sourceName]) { |
| | | customEntityDataSources[sourceName]?.entities.removeAll() |
| | | window.$viewer.dataSources.remove(customEntityDataSources[sourceName]) |
| | | delete customEntityDataSources[sourceName] |
| | | } |
| | | } |
| | | const removeAllCustomEntityDataSource = sourceName => { |
| | | if (customEntityDataSources[sourceName]) { |
| | | customEntityDataSources[sourceName]?.entities.removeAll() |
| | | window.$viewer.dataSources.remove(customEntityDataSources[sourceName]) |
| | | delete customEntityDataSources[sourceName] |
| | | } |
| | | } |
| | | |
| | | // 添加entity |
| | | const addCustomImageryProviderDataSource = imageryLayers => { |
| | | return viewer?.imageryLayers.addImageryProvider(imageryLayers) |
| | | } |
| | | // 添加entity |
| | | const addCustomImageryProviderDataSource = imageryLayers => { |
| | | return viewer?.imageryLayers.addImageryProvider(imageryLayers) |
| | | } |
| | | |
| | | const showCustomImageryProviderDataSource = (imageryLayers, show) => { |
| | | if (imageryLayers) { |
| | | imageryLayers.show = show |
| | | } |
| | | } |
| | | const showCustomImageryProviderDataSource = (imageryLayers, show) => { |
| | | if (imageryLayers) { |
| | | imageryLayers.show = show |
| | | } |
| | | } |
| | | |
| | | const removeAllCustomImageryProviderDataSource = imageryLayers => { |
| | | if (imageryLayers) { |
| | | viewer?.imageryLayers.remove(imageryLayers) |
| | | } |
| | | } |
| | | const removeAllCustomImageryProviderDataSource = imageryLayers => { |
| | | if (imageryLayers) { |
| | | viewer?.imageryLayers.remove(imageryLayers) |
| | | } |
| | | } |
| | | |
| | | // 添加范围的圆 |
| | | const addEllipse = ({ longitude, latitude, dist = 7000 }) => { |
| | | if (!longitude && !latitude) return |
| | | // 定义起点位置 |
| | | const position = Cesium.Cartesian3.fromDegrees(longitude, latitude) |
| | | // 画圆 |
| | | // 添加范围的圆 |
| | | const addEllipse = ({ longitude, latitude, dist = 7000 }) => { |
| | | if (!longitude && !latitude) return |
| | | // 定义起点位置 |
| | | const position = Cesium.Cartesian3.fromDegrees(longitude, latitude) |
| | | // 画圆 |
| | | |
| | | viewer?.entities.add({ |
| | | position, |
| | | id: 'rangeEllipse', |
| | | name: 'rangeEllipse', |
| | | ellipse: { |
| | | semiMinorAxis: dist, |
| | | semiMajorAxis: dist, |
| | | outline: true, |
| | | material: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.3), |
| | | }, |
| | | }) |
| | | // 添加距离虚线 |
| | | // addDistLine({ longitude, latitude, dist }); |
| | | } |
| | | viewer?.entities.add({ |
| | | position, |
| | | id: 'rangeEllipse', |
| | | name: 'rangeEllipse', |
| | | ellipse: { |
| | | semiMinorAxis: dist, |
| | | semiMajorAxis: dist, |
| | | outline: true, |
| | | material: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.3), |
| | | }, |
| | | }) |
| | | // 添加距离虚线 |
| | | // addDistLine({ longitude, latitude, dist }); |
| | | } |
| | | |
| | | const addDistLine = ({ longitude, latitude, dist = 7 }) => { |
| | | // 定义起点位置 |
| | | const startPosition = Cesium.Cartesian3.fromDegrees(longitude, latitude) |
| | | // 计算目标位置(7公里处) |
| | | const offsetCartesian = Cesium.Cartesian3.fromDegrees( |
| | | longitude, |
| | | latitude + |
| | | Cesium.Math.toDegrees( |
| | | dist / (Cesium.Ellipsoid.WGS84.maximumRadius * Math.cos(Cesium.Math.toRadians(latitude))) |
| | | ) // 7公里的偏移 |
| | | ) |
| | | // 将目标位置转换为经纬度 |
| | | // const offsetCartographic = Cesium.Cartographic.fromCartesian(offsetCartesian); |
| | | // const offsetLongitude = Cesium.Math.toDegrees(offsetCartographic.longitude); |
| | | // const offsetLatitude = Cesium.Math.toDegrees(offsetCartographic.latitude); |
| | | addPolyline({ |
| | | id: 'dist_line', |
| | | polyline: { |
| | | width: 5, |
| | | positions: [startPosition, offsetCartesian], |
| | | material: new Cesium.PolylineGlowMaterialProperty({ |
| | | glowPower: 0.2, |
| | | taperPower: 0.5, |
| | | color: Cesium.Color.CORNFLOWERBLUE, |
| | | }), |
| | | }, |
| | | }) |
| | | } |
| | | const addDistLine = ({ longitude, latitude, dist = 7 }) => { |
| | | // 定义起点位置 |
| | | const startPosition = Cesium.Cartesian3.fromDegrees(longitude, latitude) |
| | | // 计算目标位置(7公里处) |
| | | const offsetCartesian = Cesium.Cartesian3.fromDegrees( |
| | | longitude, |
| | | latitude + |
| | | Cesium.Math.toDegrees( |
| | | dist / (Cesium.Ellipsoid.WGS84.maximumRadius * Math.cos(Cesium.Math.toRadians(latitude))) |
| | | ) // 7公里的偏移 |
| | | ) |
| | | // 将目标位置转换为经纬度 |
| | | // const offsetCartographic = Cesium.Cartographic.fromCartesian(offsetCartesian); |
| | | // const offsetLongitude = Cesium.Math.toDegrees(offsetCartographic.longitude); |
| | | // const offsetLatitude = Cesium.Math.toDegrees(offsetCartographic.latitude); |
| | | addPolyline({ |
| | | id: 'dist_line', |
| | | polyline: { |
| | | width: 5, |
| | | positions: [startPosition, offsetCartesian], |
| | | material: new Cesium.PolylineGlowMaterialProperty({ |
| | | glowPower: 0.2, |
| | | taperPower: 0.5, |
| | | color: Cesium.Color.CORNFLOWERBLUE, |
| | | }), |
| | | }, |
| | | }) |
| | | } |
| | | |
| | | // 添加圆 |
| | | const addCircle = option => { |
| | | if (!option.longitude && !option.latitude) return |
| | | // 定义起点位置 |
| | | const { longitude, latitude } = option |
| | | const position = Cesium.Cartesian3.fromDegrees(longitude, latitude) |
| | | viewer.entities.add({ |
| | | position, |
| | | id: option.id, |
| | | ellipse: { |
| | | semiMinorAxis: option.radius, |
| | | semiMajorAxis: option.radius, |
| | | height: option.height || 120, |
| | | material: Cesium.Color.fromCssColorString(option.color).withAlpha(0.1), |
| | | outline: true, |
| | | outlineColor: Cesium.Color.fromCssColorString(option.color), |
| | | outlineWidth: 3, |
| | | }, |
| | | }) |
| | | } |
| | | // 添加圆 |
| | | const addCircle = option => { |
| | | if (!option.longitude && !option.latitude) return |
| | | // 定义起点位置 |
| | | const { longitude, latitude } = option |
| | | const position = Cesium.Cartesian3.fromDegrees(longitude, latitude) |
| | | viewer.entities.add({ |
| | | position, |
| | | id: option.id, |
| | | ellipse: { |
| | | semiMinorAxis: option.radius, |
| | | semiMajorAxis: option.radius, |
| | | height: option.height || 120, |
| | | material: Cesium.Color.fromCssColorString(option.color).withAlpha(0.1), |
| | | outline: true, |
| | | outlineColor: Cesium.Color.fromCssColorString(option.color), |
| | | outlineWidth: 3, |
| | | }, |
| | | }) |
| | | } |
| | | |
| | | // |
| | | /** |
| | | * @description: 添加矩形 |
| | | * @param {*} option { id: string, color: string, positions: array[ lng,lat,height ] } |
| | | * @return {*} void 0 |
| | | */ |
| | | const addPolygon = option => { |
| | | if (option.positions.length === 0) return |
| | | // |
| | | /** |
| | | * @description: 添加矩形 |
| | | * @param {*} option { id: string, color: string, positions: array[ lng,lat,height ] } |
| | | * @return {*} void 0 |
| | | */ |
| | | const addPolygon = option => { |
| | | if (option.positions.length === 0) return |
| | | |
| | | let zIndex = {} |
| | | let zIndex = {} |
| | | |
| | | if (option.zIndex) { |
| | | zIndex = { |
| | | zIndex: option.zIndex, |
| | | } |
| | | } |
| | | if (option.zIndex) { |
| | | zIndex = { |
| | | zIndex: option.zIndex, |
| | | } |
| | | } |
| | | |
| | | // 定义起点位置 |
| | | viewer.entities.add({ |
| | | id: option.id, |
| | | polygon: { |
| | | hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(option.positions), |
| | | material: Cesium.Color.fromCssColorString(option.color).withAlpha(0.1), |
| | | extrudedHeight: 0, |
| | | outline: true, |
| | | outlineColor: Cesium.Color.fromCssColorString(option.color), |
| | | outlineWidth: 3, |
| | | }, |
| | | ...zIndex, |
| | | }) |
| | | } |
| | | // 定义起点位置 |
| | | viewer.entities.add({ |
| | | id: option.id, |
| | | polygon: { |
| | | hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(option.positions), |
| | | material: Cesium.Color.fromCssColorString(option.color).withAlpha(0.1), |
| | | extrudedHeight: 0, |
| | | outline: true, |
| | | outlineColor: Cesium.Color.fromCssColorString(option.color), |
| | | outlineWidth: 3, |
| | | }, |
| | | ...zIndex, |
| | | }) |
| | | } |
| | | |
| | | // Cesium矢量切片是否加载完成 |
| | | const isLoadingCompleted = () => { |
| | | return new Promise((resolve, reject) => { |
| | | const helper = new Cesium.EventHelper() |
| | | helper.add(viewer?.scene.globe.tileLoadProgressEvent, function (e) { |
| | | if (e === 0) { |
| | | resolve(true) |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | // Cesium矢量切片是否加载完成 |
| | | const isLoadingCompleted = () => { |
| | | return new Promise((resolve, reject) => { |
| | | const helper = new Cesium.EventHelper() |
| | | helper.add(viewer?.scene.globe.tileLoadProgressEvent, function (e) { |
| | | if (e === 0) { |
| | | resolve(true) |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | // 获取屏幕四个角经纬度 |
| | | const getScreenCorner = () => { |
| | | const camera = viewer.scene.camera |
| | | const canvas = viewer.canvas |
| | | // 获取屏幕四个角经纬度 |
| | | const getScreenCorner = () => { |
| | | const camera = viewer.scene.camera |
| | | const canvas = viewer.canvas |
| | | |
| | | // 获取屏幕左下角和右上角的世界坐标 |
| | | const leftBottom = new Cesium.Cartesian2(0, canvas.clientHeight) |
| | | const rightTop = new Cesium.Cartesian2(canvas.clientWidth, 0) |
| | | // 获取屏幕左下角和右上角的世界坐标 |
| | | const leftBottom = new Cesium.Cartesian2(0, canvas.clientHeight) |
| | | const rightTop = new Cesium.Cartesian2(canvas.clientWidth, 0) |
| | | |
| | | // 将屏幕坐标转为世界坐标 |
| | | const leftBottomWorld = camera.pickEllipsoid(leftBottom, viewer.scene.globe.ellipsoid) |
| | | const rightTopWorld = camera.pickEllipsoid(rightTop, viewer.scene.globe.ellipsoid) |
| | | // 将屏幕坐标转为世界坐标 |
| | | const leftBottomWorld = camera.pickEllipsoid(leftBottom, viewer.scene.globe.ellipsoid) |
| | | const rightTopWorld = camera.pickEllipsoid(rightTop, viewer.scene.globe.ellipsoid) |
| | | |
| | | // 将世界坐标转为经纬度 |
| | | const leftBottomCartographic = |
| | | viewer.scene.globe.ellipsoid.cartesianToCartographic(leftBottomWorld) |
| | | const rightTopCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(rightTopWorld) |
| | | // 将世界坐标转为经纬度 |
| | | const leftBottomCartographic = |
| | | viewer.scene.globe.ellipsoid.cartesianToCartographic(leftBottomWorld) |
| | | const rightTopCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(rightTopWorld) |
| | | |
| | | // 获取经纬度 |
| | | const leftBottomLonLat = [ |
| | | Cesium.Math.toDegrees(leftBottomCartographic.longitude), |
| | | Cesium.Math.toDegrees(leftBottomCartographic.latitude), |
| | | ] |
| | | const rightTopLonLat = [ |
| | | Cesium.Math.toDegrees(rightTopCartographic.longitude), |
| | | Cesium.Math.toDegrees(rightTopCartographic.latitude), |
| | | ] |
| | | // 获取经纬度 |
| | | const leftBottomLonLat = [ |
| | | Cesium.Math.toDegrees(leftBottomCartographic.longitude), |
| | | Cesium.Math.toDegrees(leftBottomCartographic.latitude), |
| | | ] |
| | | const rightTopLonLat = [ |
| | | Cesium.Math.toDegrees(rightTopCartographic.longitude), |
| | | Cesium.Math.toDegrees(rightTopCartographic.latitude), |
| | | ] |
| | | |
| | | // 返回四个角的经纬度 |
| | | return { |
| | | lb: leftBottomLonLat, |
| | | rb: [rightTopLonLat[0], leftBottomLonLat[1]], // 右下角 |
| | | rt: rightTopLonLat, |
| | | lt: [leftBottomLonLat[0], rightTopLonLat[1]], // 左上角 |
| | | } |
| | | } |
| | | // 返回四个角的经纬度 |
| | | return { |
| | | lb: leftBottomLonLat, |
| | | rb: [rightTopLonLat[0], leftBottomLonLat[1]], // 右下角 |
| | | rt: rightTopLonLat, |
| | | lt: [leftBottomLonLat[0], rightTopLonLat[1]], // 左上角 |
| | | } |
| | | } |
| | | |
| | | // 加载3D建筑模型 |
| | | let tileset = null |
| | | // 加载3D建筑模型 |
| | | let tileset = null |
| | | |
| | | function setBuilding3dModel() { |
| | | try { |
| | | const resource = Cesium.IonResource.fromAssetId(96188) |
| | | tileset = new Cesium.Cesium3DTileset({ |
| | | url: resource, |
| | | }) |
| | | function setBuilding3dModel () { |
| | | try { |
| | | const resource = Cesium.IonResource.fromAssetId(96188) |
| | | tileset = new Cesium.Cesium3DTileset({ |
| | | url: resource, |
| | | }) |
| | | |
| | | tileset.customParams = { |
| | | type: '3DTileset', |
| | | } |
| | | tileset.customParams = { |
| | | type: '3DTileset', |
| | | } |
| | | |
| | | viewer.scene.primitives.add(tileset) |
| | | } catch (error) { |
| | | console.log(`Error loading tileset: ${error}`) |
| | | } |
| | | } |
| | | viewer.scene.primitives.add(tileset) |
| | | } catch (error) { |
| | | console.log(`Error loading tileset: ${error}`) |
| | | } |
| | | } |
| | | |
| | | function removeBuilding3dModel() { |
| | | if (tileset) { |
| | | viewer.scene.primitives.remove(tileset) |
| | | } |
| | | } |
| | | function removeBuilding3dModel () { |
| | | if (tileset) { |
| | | viewer.scene.primitives.remove(tileset) |
| | | } |
| | | } |
| | | |
| | | const viewerDestory = () => { |
| | | viewer && viewer.destroy() |
| | | viewer = null |
| | | window.$viewer = null |
| | | } |
| | | const viewerDestory = () => { |
| | | viewer && viewer.destroy() |
| | | viewer = null |
| | | window.$viewer = null |
| | | } |
| | | |
| | | let tilesetArr = [] |
| | | let tilesetArr = [] |
| | | |
| | | const add3Dtileset = () => { |
| | | let url = '/3Dtile/kjds/tileset.json' |
| | | const add3Dtileset = () => { |
| | | let url = '/3Dtile/kjds/tileset.json' |
| | | |
| | | let tileset = new Cesium.Cesium3DTileset({ |
| | | url: url, |
| | | }) |
| | | let tileset = new Cesium.Cesium3DTileset({ |
| | | url: url, |
| | | }) |
| | | |
| | | tileset.customParams = { |
| | | type: '3DTileset', |
| | | } |
| | | tileset.customParams = { |
| | | type: '3DTileset', |
| | | } |
| | | |
| | | tilesetArr.push(tileset) |
| | | tilesetArr.push(tileset) |
| | | |
| | | tilesetArr.forEach(i => viewer?.scene.primitives.add(i)) |
| | | } |
| | | tilesetArr.forEach(i => viewer?.scene.primitives.add(i)) |
| | | } |
| | | |
| | | const remove3Dtileset = () => { |
| | | if (tilesetArr.length > 0) { |
| | | tilesetArr.forEach(i => viewer.scene.primitives.remove(i)) |
| | | } |
| | | const remove3Dtileset = () => { |
| | | if (tilesetArr.length > 0) { |
| | | tilesetArr.forEach(i => viewer.scene.primitives.remove(i)) |
| | | } |
| | | |
| | | tilesetArr = [] |
| | | } |
| | | tilesetArr = [] |
| | | } |
| | | |
| | | let pointEditHandler |
| | | // 航点航线编辑相关事件 |
| | | const pointInitEvent = (lefet_down, mouse_move, left_up) => { |
| | | if (!pointEditHandler) { |
| | | pointEditHandler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | } |
| | | let pointEditHandler |
| | | // 航点航线编辑相关事件 |
| | | const pointInitEvent = (lefet_down, mouse_move, left_up) => { |
| | | if (!pointEditHandler) { |
| | | pointEditHandler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas) |
| | | } |
| | | |
| | | const events = { |
| | | lefet_down, |
| | | mouse_move, |
| | | left_up, |
| | | } |
| | | const events = { |
| | | lefet_down, |
| | | mouse_move, |
| | | left_up, |
| | | } |
| | | |
| | | pointEditBindEvent(events) |
| | | pointEditBindEvent(events, Cesium.KeyboardEventModifier.CTRL) |
| | | pointEditBindEvent(events, Cesium.KeyboardEventModifier.ALT) |
| | | pointEditBindEvent(events, Cesium.KeyboardEventModifier.SHIFT) |
| | | pointEditBindEvent(events, Cesium.KeyboardEventModifier.META) |
| | | } |
| | | pointEditBindEvent(events) |
| | | pointEditBindEvent(events, Cesium.KeyboardEventModifier.CTRL) |
| | | pointEditBindEvent(events, Cesium.KeyboardEventModifier.ALT) |
| | | pointEditBindEvent(events, Cesium.KeyboardEventModifier.SHIFT) |
| | | pointEditBindEvent(events, Cesium.KeyboardEventModifier.META) |
| | | } |
| | | |
| | | const pointEditBindEvent = (events, e) => { |
| | | if (pointEditHandler) { |
| | | pointEditHandler.setInputAction( |
| | | events.lefet_down(e), |
| | | Cesium.ScreenSpaceEventType.LEFT_DOWN, |
| | | e |
| | | ) |
| | | pointEditHandler.setInputAction( |
| | | events.mouse_move(e), |
| | | Cesium.ScreenSpaceEventType.MOUSE_MOVE, |
| | | e |
| | | ) |
| | | pointEditHandler.setInputAction(events.left_up(e), Cesium.ScreenSpaceEventType.LEFT_UP, e) |
| | | } |
| | | } |
| | | const pointEditBindEvent = (events, e) => { |
| | | if (pointEditHandler) { |
| | | pointEditHandler.setInputAction( |
| | | events.lefet_down(e), |
| | | Cesium.ScreenSpaceEventType.LEFT_DOWN, |
| | | e |
| | | ) |
| | | pointEditHandler.setInputAction( |
| | | events.mouse_move(e), |
| | | Cesium.ScreenSpaceEventType.MOUSE_MOVE, |
| | | e |
| | | ) |
| | | pointEditHandler.setInputAction(events.left_up(e), Cesium.ScreenSpaceEventType.LEFT_UP, e) |
| | | } |
| | | } |
| | | |
| | | const pointUnInitEvent = () => { |
| | | pointEditUnBindEvent() |
| | | pointEditUnBindEvent(Cesium.KeyboardEventModifier.CTRL) |
| | | pointEditUnBindEvent(Cesium.KeyboardEventModifier.ALT) |
| | | pointEditUnBindEvent(Cesium.KeyboardEventModifier.SHIFT) |
| | | pointEditUnBindEvent(Cesium.KeyboardEventModifier.META) |
| | | const pointUnInitEvent = () => { |
| | | pointEditUnBindEvent() |
| | | pointEditUnBindEvent(Cesium.KeyboardEventModifier.CTRL) |
| | | pointEditUnBindEvent(Cesium.KeyboardEventModifier.ALT) |
| | | pointEditUnBindEvent(Cesium.KeyboardEventModifier.SHIFT) |
| | | pointEditUnBindEvent(Cesium.KeyboardEventModifier.META) |
| | | |
| | | pointEditHandler = null |
| | | } |
| | | pointEditHandler = null |
| | | } |
| | | |
| | | const pointEditUnBindEvent = e => { |
| | | pointEditHandler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN, e) |
| | | pointEditHandler?.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE, e) |
| | | pointEditHandler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP, e) |
| | | } |
| | | const pointEditUnBindEvent = e => { |
| | | pointEditHandler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN, e) |
| | | pointEditHandler?.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE, e) |
| | | pointEditHandler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP, e) |
| | | } |
| | | |
| | | return { |
| | | _init, |
| | | patternMap, |
| | | loadLAYER, |
| | | roadPattern, |
| | | switchModel, |
| | | switchDarkModel, |
| | | removeAllDataSource, |
| | | removeAllPoint, |
| | | removeById, |
| | | getEntityById, |
| | | addPoint, |
| | | addPolyline, |
| | | updateEntityPosition, |
| | | flyTo, |
| | | addLeftClickEvent, |
| | | removeLeftClickEvent, |
| | | addRightClickEvent, |
| | | removeRightClickEvent, |
| | | addLeftmounseEvent, |
| | | removeLeftmounseEvent, |
| | | return { |
| | | _init, |
| | | patternMap, |
| | | loadLAYER, |
| | | roadPattern, |
| | | switchModel, |
| | | switchDarkModel, |
| | | removeAllDataSource, |
| | | removeAllPoint, |
| | | removeById, |
| | | getEntityById, |
| | | addPoint, |
| | | addPolyline, |
| | | updateEntityPosition, |
| | | flyTo, |
| | | addLeftClickEvent, |
| | | removeLeftClickEvent, |
| | | addRightClickEvent, |
| | | removeRightClickEvent, |
| | | addLeftmounseEvent, |
| | | removeLeftmounseEvent, |
| | | |
| | | addLeftUpClickEvent, |
| | | removeLeftUpClickEvent, |
| | | addLeftUpClickEvent, |
| | | removeLeftUpClickEvent, |
| | | |
| | | addLeftDownClickEvent, |
| | | removeLeftDownClickEvent, |
| | | addLeftDownClickEvent, |
| | | removeLeftDownClickEvent, |
| | | |
| | | addMounseHandler, |
| | | removeMounseEvent, |
| | | addMounseHandler, |
| | | removeMounseEvent, |
| | | |
| | | addCameraMoveEvent, |
| | | removeCameraMoveEvent, |
| | | addCircle, |
| | | addPolygon, |
| | | addEllipse, |
| | | isLoadingCompleted, |
| | | getScreenCorner, |
| | | setBuilding3dModel, |
| | | removeBuilding3dModel, |
| | | addCameraMoveEvent, |
| | | removeCameraMoveEvent, |
| | | addCircle, |
| | | addPolygon, |
| | | addEllipse, |
| | | isLoadingCompleted, |
| | | getScreenCorner, |
| | | setBuilding3dModel, |
| | | removeBuilding3dModel, |
| | | |
| | | viewerDestory, |
| | | viewerDestory, |
| | | |
| | | globalCesium: window.globalCesium || Cesium, |
| | | globalCesium: window.globalCesium || Cesium, |
| | | |
| | | addCustomEntityDataSource, |
| | | clearCustomEntityDataSource, |
| | | removeAllCustomEntityDataSource, |
| | | _getMouseInfo, |
| | | addCustomEntityDataSource, |
| | | clearCustomEntityDataSource, |
| | | removeAllCustomEntityDataSource, |
| | | _getMouseInfo, |
| | | |
| | | addCustomImageryProviderDataSource, |
| | | showCustomImageryProviderDataSource, |
| | | removeAllCustomImageryProviderDataSource, |
| | | addCustomImageryProviderDataSource, |
| | | showCustomImageryProviderDataSource, |
| | | removeAllCustomImageryProviderDataSource, |
| | | |
| | | addCustomLayers, |
| | | removeCustomLayers, |
| | | add3Dtileset, |
| | | remove3Dtileset, |
| | | addCustomLayers, |
| | | removeCustomLayers, |
| | | add3Dtileset, |
| | | remove3Dtileset, |
| | | |
| | | // 航线规划---航点航线 |
| | | pointInitEvent, |
| | | pointUnInitEvent, |
| | | } |
| | | // 航线规划---航点航线 |
| | | pointInitEvent, |
| | | pointUnInitEvent, |
| | | } |
| | | } |