| | |
| | | <template> |
| | | <div class="drone-pilot-details" :style="{ width: screenWidth,height: screenHeight}"> |
| | | <!-- 横屏模式 --> |
| | | <div id="landscapeBox" class="landscape-box" :style="{ width: screenWidth + 'px', height: (screenHeight) + 'px'}"> |
| | | <div id="videoModule" class="l-video" :style="{ width: screenWidthVideo + 'px', height: (screenHeightVideo) + 'px'}"> |
| | | <video v-show="videoUrl" ref="videoPlayerBig" :style="{ width: screenWidthVideo + 'px', height: screenHeightVideo + 'px'}" controls autoplay muted playsinline style="text-align: left; object-fit: fill"> |
| | |
| | | </video> |
| | | <el-empty v-show="videoUrl == ''" description="当前设备已关机,无法进行直播" :image="imageUrl"></el-empty> |
| | | </div> |
| | | <div class="l-map" :style="{ width: screenWidthMap + 'px', height: (screenHeightMap) + 'px'}"> |
| | | <div class="l-map" :style="{ width: screenWidthVideo + 'px', height: (screenHeightVideo) + 'px'}"> |
| | | <div id="cesiumContainerBigMap"></div> |
| | | <div class="l-zp" id="lZp"> |
| | | <comPass :cesiumViewe="globalViewer"/> |
| | | </div> |
| | | <div class="l-zoom" id="lZoom"> |
| | | <div class="zoom"> |
| | | <img src="@/assets/images/me.png" @touchstart="getPhoneLocation(true)" /> |
| | | </div> |
| | | <div class="zoom" @touchstart="onChangeD"> |
| | | <img v-if="is2d" src="@/assets/images/stand.png" /> |
| | | <img v-else src="@/assets/images/satellite.png" /> |
| | | </div> |
| | | <div class="zoom"> |
| | | <img v-if="!isBigMap" src="@/assets/images/fang.png" @touchstart="changeModelMap" /> |
| | | <img v-else src="@/assets/images/suo.png" @touchstart="changeModelMap" /> |
| | |
| | | <controlConsole :sn="sn" :osdVisible="sbInfo" :cesiumViewe="globalViewer" /> |
| | | </div> |
| | | </div> |
| | | <!-- 竖屏 --> |
| | | <!-- <div class="portrait-screen" v-else> |
| | | <div class="l-video" :style="{ width: screenWidth + 'px', height: (screenHeight/2)+40 + 'px'}"> |
| | | <video v-show="videoUrl" ref="videoPlayerBig" :style="{ width: screenWidth + 'px', height: (screenHeight/2)+40 + 'px'}" controls autoplay muted playsinline style="text-align: left; object-fit: fill"> |
| | | Your browser is too old which doesn't support HTML5 video. |
| | | </video> |
| | | <el-empty v-show="videoUrl == ''" description="当前设备已关机,无法进行直播" :image="imageUrl"></el-empty> |
| | | </div> |
| | | <div class="l-map" :style="{ width: screenWidth + 'px', height: (screenHeight/2)-40 + 'px'}"> |
| | | <div id="cesiumContainerMap"></div> |
| | | <div class="l-zp" id="lZp"> |
| | | <comPass :cesiumViewe="globalViewer"/> |
| | | </div> |
| | | </div> |
| | | <div class="right-box"> |
| | | <ptzControl :sn="sn" :osdVisible="sbInfo" /> |
| | | <controlConsole :sn="sn" :osdVisible="sbInfo" /> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import { ref, onMounted, onBeforeUnmount, nextTick, reactive, computed, watch } from 'vue'; |
| | | import { EDeviceTypeName, EHmsLevel } from '@/types/enums' |
| | | import { getRoot } from '../../root' |
| | | import { startLivestream, getLiveVideoUrl } from '@/api/manage' |
| | | import { getWaylineFile, getLiveVideoUrl } from '@/api/manage' |
| | | import { CURRENT_CONFIG as config } from '@/api/http/config' |
| | | // import videojs from 'video.js' |
| | | // import 'video.js/dist/video-js.css'; |
| | |
| | | // import { cesiumOperation } from '@/hooks/use-cesium-tsa' |
| | | // const { _init } = cesiumOperation(); |
| | | import { useMyStore } from '@/store' |
| | | import { getWaylineFile } from '@/api/manage' |
| | | import comPass from './components/comPass.vue' |
| | | import ptzControl from './components/ptzControl.vue' |
| | | import controlConsole from './components/controlConsole.vue' |
| | |
| | | import flvjs from 'flv.js'; |
| | | const { pointWayline } = initPointWayLine() |
| | | const { planarWayline } = initPlanarWayline() |
| | | const { initDock } = droneFly() |
| | | const { initDock, getPhoneLocation } = droneFly() |
| | | |
| | | const { |
| | | removeAllPoint, |
| | |
| | | const screenWidth = ref(window.innerWidth); |
| | | const screenHeight = ref(window.innerHeight); |
| | | // 地图切换 |
| | | const screenWidthMap = ref(window.innerWidth); |
| | | const screenHeightMap = ref((window.innerHeight/2)+40); |
| | | const screenWidthMap = ref((window.innerHeight/2)*2)// ref(window.innerWidth); |
| | | const screenHeightMap = ref((window.innerHeight/2)); |
| | | // 视频切换 |
| | | const screenWidthVideo = ref(window.innerWidth); |
| | | const screenHeightVideo = ref(window.innerHeight/2); |
| | | const isBigMap = ref(false) |
| | | |
| | | // 更新屏幕尺寸的函数 |
| | | const updateScreenSize = () => { |
| | | screenWidth.value = window.innerWidth; |
| | | screenHeight.value = window.innerHeight; |
| | | if (isLandscape.value) { //横屏 |
| | | screenWidthMap.value = window.innerWidth/2 |
| | | screenHeightMap.value = window.innerHeight |
| | | screenWidthVideo.value = window.innerWidth/2 |
| | | screenHeightVideo.value = window.innerHeight |
| | | } else {//竖屏 |
| | | screenWidthMap.value = window.innerWidth |
| | | screenHeightMap.value = (window.innerHeight/2)-40 |
| | | screenWidthVideo.value = window.innerWidth |
| | | screenHeightVideo.value = (window.innerHeight/2)+40 |
| | | } |
| | | }; |
| | | // 显示高德地图矢量还是影像(2D/3D) |
| | | let is2d = ref(true) |
| | | |
| | | const onChangeD = () => { |
| | | is2d.value = !is2d.value |
| | | store.commit('SET_MAP_SETTING_MODE', is2d.value?2:3); |
| | | loadLAYER(); |
| | | } |
| | | |
| | | const store = useMyStore() |
| | | // 获取路由 |
| | |
| | | // 获取机场/遥控器sn |
| | | let localData = ref<any>(window.localStorage.getItem('sbInfo')) |
| | | const sbInfo: deviceInfo = JSON.parse(localData.value) as deviceInfo; |
| | | // console.log('哒哒哒', sbInfo) |
| | | |
| | | // 无人机sn |
| | | const sn = ref<String>(sbInfo.sn) |
| | | // 机场sn |
| | |
| | | const imageUrl = new URL('@/assets/images/norecord.png', import.meta.url).href |
| | | |
| | | const imageMapSrc = new URL('@/assets/images/mapdock.png', import.meta.url).href |
| | | |
| | | const meMapSrc = new URL('@/assets/images/me.png', import.meta.url).href |
| | | |
| | | const jgbMapSrc = new URL('@/assets/images/jgb.png', import.meta.url).href |
| | | |
| | |
| | | let workspaceId = ref<String>(sbInfo.workspaceId) |
| | | localStorage.setItem('bs_workspace_id', workspaceId.value) |
| | | // store.commit('SET_SELECTED_WORKSPACE_ID', workspaceId.value); |
| | | |
| | | // 自身定位 |
| | | let me_latitude = 0; |
| | | let me_longitude = 0; |
| | | |
| | | // RTCWEB 加载视频 |
| | | const playBig = () => { |
| | |
| | | }, |
| | | ) |
| | | } |
| | | // const play = () => { |
| | | // webrtcPlayer = new window.ZLMRTCClient.Endpoint({ |
| | | // element: videoPlayer.value, // video 标签 |
| | | // debug: true, // 是否打印日志 |
| | | // zlmsdpUrl: videoUrl.value, //Rtc地址 |
| | | // simulecast: false, |
| | | // useCamera: false, |
| | | // audioEnable: true, |
| | | // videoEnable: true, |
| | | // recvOnly: true, |
| | | // usedatachannel: false, |
| | | // }) |
| | | // webrtcPlayer.on( |
| | | // window.ZLMRTCClient.Events.WEBRTC_ICE_CANDIDATE_ERROR, |
| | | // (e) => { |
| | | // // ICE 协商出错 |
| | | // console.error('ICE 协商出错') |
| | | // // this.eventcallbacK('ICE ERROR', 'ICE 协商出错') |
| | | // }, |
| | | // ) |
| | | |
| | | // webrtcPlayer.on( |
| | | // window.ZLMRTCClient.Events.WEBRTC_ON_REMOTE_STREAMS, |
| | | // (e) => { |
| | | // //获取到了远端流,可以播放 |
| | | // console.log('播放成功', e.streams) |
| | | // // this.eventcallbacK('playing', '播放成功') |
| | | // }, |
| | | // ) |
| | | |
| | | // webrtcPlayer.on( |
| | | // window.ZLMRTCClient.Events.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED, |
| | | // (e) => { |
| | | // // offer anwser 交换失败 |
| | | // console.error('offer anwser 交换失败', e) |
| | | // // this.eventcallbacK('OFFER ANSWER ERROR ', 'offer anwser 交换失败') |
| | | // if (e.code == -400 && e.msg == '流不存在') { |
| | | // console.log('流不存在') |
| | | // timer = setTimeout(() => { |
| | | // webrtcPlayer.close() |
| | | // play() |
| | | // }, 100) |
| | | // } |
| | | // }, |
| | | // ) |
| | | |
| | | // webrtcPlayer.on( |
| | | // window.ZLMRTCClient.Events.WEBRTC_ON_LOCAL_STREAM, |
| | | // (s) => { |
| | | // }, |
| | | // ) |
| | | // } |
| | | const videoUrlFlv = ref<String>('') |
| | | // 加载该设备的视频信息 |
| | | const loadVideo = async () => { |
| | | await getLiveVideoUrl(sn.value).then((res) => { |
| | |
| | | drawCanvasHeight.value = videoWH.value.offsetHeight; |
| | | } |
| | | videoUrl.value = res.data.data.rtcs_url |
| | | videoUrlFlv.value = res.data.data.url |
| | | // 播放 |
| | | // play() |
| | | playBig() |
| | | // flv |
| | | // initFlvPlayer() |
| | | }) |
| | | } |
| | | |
| | | // flv |
| | | const videoPlayerFlv = ref(null); // 引用 video 元素 |
| | | let flvPlayer = null; // 用于存储 flv.js 播放器实例 |
| | | // 初始化 flv.js 播放器 |
| | | |
| | | const initFlvPlayer = () => { |
| | | if (flvjs.isSupported()) { |
| | | const videoElement = videoPlayerFlv.value; // 获取 video 元素 |
| | | flvPlayer = flvjs.createPlayer({ |
| | | type: 'flv', // 视频格式 |
| | | url: videoUrlFlv.value, // FLV 视频地址 |
| | | }); |
| | | flvPlayer.attachMediaElement(videoElement); // 绑定 video 元素 |
| | | flvPlayer.load(); // 加载视频 |
| | | flvPlayer.play(); // 播放视频 |
| | | } else { |
| | | console.error('Your browser does not support flv.js.'); |
| | | } |
| | | }; |
| | | |
| | | //=============================== |
| | | |
| | |
| | | isBigMap.value = !isBigMap.value |
| | | const cesiumContainer = document.getElementById('cesiumContainerBigMap'); |
| | | const lZp = document.getElementById('lZp'); |
| | | const lZoom = document.getElementById('lZoom'); |
| | | |
| | | if (isBigMap.value) { // 全屏 |
| | | cesiumContainer.style.position = 'fixed'; |
| | | cesiumContainer.style.top = '0'; |
| | | cesiumContainer.style.left = '0'; |
| | | cesiumContainer.style.width = '100%'; |
| | | cesiumContainer.style.height = '100%'; |
| | | lZp.style.right = '40%'; |
| | | lZoom.style.left = '0'; |
| | | } else { // 缩放 |
| | | cesiumContainer.style.position = 'static'; |
| | | cesiumContainer.style.width = `${screenWidthMap.value}` |
| | | cesiumContainer.style.height = `${screenHeight.value}` |
| | | lZp.style.right = '16%'; |
| | | lZoom.style.left = 'auto'; |
| | | |
| | | // const lZoom = document.getElementById('lZoom'); |
| | | if (isLandscape.value) { // 横屏 |
| | | if (isBigMap.value) { // 全屏 |
| | | cesiumContainer.style.position = 'fixed'; |
| | | cesiumContainer.style.top = '0'; |
| | | cesiumContainer.style.left = '0'; |
| | | cesiumContainer.style.width = `${screenWidthMap.value * 2}px` |
| | | cesiumContainer.style.height = `${screenHeightMap.value}px` |
| | | lZp.style.right = '40%'; |
| | | // lZoom.style.left = '0'; |
| | | } else { // 缩放 |
| | | cesiumContainer.style.width = `${screenWidthMap.value}px` |
| | | cesiumContainer.style.height = `${screenHeightMap.value}px` |
| | | cesiumContainer.style.position = 'static'; |
| | | lZp.style.right = '16%'; |
| | | // lZoom.style.left = '50%'; |
| | | |
| | | } |
| | | } else { |
| | | if (isBigMap.value) { // 全屏 |
| | | cesiumContainer.style.position = 'fixed'; |
| | | cesiumContainer.style.top = '0'; |
| | | cesiumContainer.style.left = '0'; |
| | | cesiumContainer.style.width = `${screenWidthMap.value}px` |
| | | cesiumContainer.style.height = `${screenHeightMap.value * 2}px` |
| | | lZp.style.right = '30%'; |
| | | // lZoom.style.right = '0'; |
| | | } else { // 缩放 |
| | | console.log('竖屏宽度',screenWidthMap.value) |
| | | console.log('竖屏高度度',screenHeightMap.value) |
| | | cesiumContainer.style.width = `${screenWidthMap.value}px` |
| | | cesiumContainer.style.height = `${screenHeightMap.value}px` |
| | | cesiumContainer.style.position = 'static'; |
| | | lZp.style.right = '30%'; |
| | | // lZoom.style.right = '0'; |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 更新屏幕尺寸的函数 |
| | | // const updateScreenSize = () => { |
| | | // const cesiumContainer = document.getElementById('cesiumContainerBigMap'); |
| | | // screenWidth.value = window.innerWidth; |
| | | // screenHeight.value = window.innerHeight; |
| | | // console.log('屏幕自身宽度',window.innerWidth) |
| | | // console.log('屏幕自身高度',window.innerHeight) |
| | | // if (isLandscape.value) { //横屏 |
| | | // screenWidthMap.value = window.innerWidth/2 |
| | | // screenHeightMap.value = window.innerHeight |
| | | // screenWidthVideo.value = window.innerWidth/2 |
| | | // screenHeightVideo.value = window.innerHeight |
| | | // cesiumContainer.style.width = `${screenWidthMap.value}px` |
| | | // cesiumContainer.style.height = `${screenHeightMap.value}px` |
| | | // } else {//竖屏 |
| | | // screenWidthMap.value = window.innerHeight |
| | | // screenHeightMap.value = (window.innerHeight/2) |
| | | // screenWidthVideo.value = window.innerWidth |
| | | // screenHeightVideo.value = (window.innerHeight/2) |
| | | // // 重新给赋值宽高 |
| | | // cesiumContainer.style.width = `${screenWidthMap.value}px` |
| | | // cesiumContainer.style.height = `${screenHeightMap.value}px` |
| | | // console.log('切换竖屏宽度',screenWidthMap.value) |
| | | // console.log('切换竖屏高度度',screenHeightMap.value) |
| | | // } |
| | | |
| | | // }; |
| | | |
| | | const checkOrientation = async () => { |
| | | screenWidth.value = window.innerWidth; |
| | | screenHeight.value = window.innerHeight; |
| | | console.log('屏幕宽度', screenWidth.value) |
| | | console.log('屏幕高度', screenHeight.value) |
| | | const landscapeBox = document.getElementById('landscapeBox'); |
| | | const cesiumContainer = document.getElementById('cesiumContainerBigMap'); |
| | | let cesiumContainer = document.getElementById('cesiumContainerBigMap'); |
| | | const videoModule = document.getElementById('videoModule'); |
| | | const lZp = document.getElementById('lZp'); |
| | | const lZoom = document.getElementById('lZoom'); |
| | | // 横屏再加载视频请求 |
| | | // destroyViewer() |
| | | |
| | | // loadVideo() |
| | | if (window.innerWidth > window.innerHeight) { |
| | | |
| | | if (window.innerWidth > window.innerHeight) {//横屏 |
| | | screenWidthVideo.value = window.innerWidth/2 |
| | | screenHeightVideo.value = window.innerHeight |
| | | isLandscape.value = true; |
| | | updateScreenSize() |
| | | // updateScreenSize() |
| | | landscapeBox.style.display = 'flex'; |
| | | lZp.style.right = '16%'; |
| | | lZoom.style.display = 'block'; |
| | | lZoom.style.position = 'fixed'; |
| | | // await nextTick(); |
| | | // await _init('cesiumContainerBigMap'); |
| | | // await getWrjSsLx(); |
| | | } else { |
| | | cesiumContainer.style.width = `${screenWidth.value/2}px` |
| | | cesiumContainer.style.height = `${screenHeight.value}px` |
| | | } else { //竖屏 |
| | | isLandscape.value = false; |
| | | updateScreenSize() |
| | | screenWidthVideo.value = window.innerWidth |
| | | screenHeightVideo.value = (window.innerHeight/2) |
| | | // updateScreenSize() |
| | | landscapeBox.style.display = 'inherit'; |
| | | lZp.style.right = '28%'; |
| | | lZoom.style.display = 'none'; |
| | | // landscapeBox.style.width = `${screenWidth}` |
| | | // landscapeBox.style.height = `${screenHeight}` |
| | | // videoModule.style.width = `${screenWidth}` |
| | | // videoModule.style.height = `${screenHeight}` |
| | | // await nextTick(); |
| | | // await _init('cesiumContainerMap'); |
| | | // await getWrjSsLx(); |
| | | landscapeBox.style.overflow = 'hidden'; |
| | | lZp.style.right = '32%'; |
| | | cesiumContainer.style.width = `${screenHeight.value}px` |
| | | cesiumContainer.style.height = `${screenHeight.value/2}px` |
| | | } |
| | | }; |
| | | |
| | | // 获取实时航线 |
| | | const getWrjSsLx = () => { |
| | | if (window.cesiumViewer== null) return |
| | | globalViewer = window.cesiumViewer; |
| | | getWaylineFile(sbInfo.sn).then((res:any) => { |
| | | if (res.code != 200) return |
| | | console.log('草草草草', res.data) |
| | | ssLinePath.value = res.data |
| | | globalViewer = window.cesiumViewer |
| | | // globalViewer = window.cesiumViewer |
| | | // 先有航线,再飞行 |
| | | generateCourse() |
| | | }) |
| | |
| | | scale: 1.0, |
| | | } |
| | | }) |
| | | window.cesiumViewer.scene.camera.setView({ |
| | | window.cesiumViewer.scene.camera.setView({ |
| | | destination: globalCesium.Cartesian3.fromDegrees( |
| | | Number(longitude), |
| | | Number(latitude), |
| | |
| | | |
| | | watch(() => store.state.wsMessage, (newValue, oldValue) => { |
| | | // 控制台报 Expected longitude to be typeof number, actual typeof was undefined 是因为这里没有及时拿到longitude数据 |
| | | viewDroneInfo.longitude = newValue?.longitude |
| | | viewDroneInfo.latitude = newValue?.latitude |
| | | viewDroneInfo.elevation = Number(newValue?.elevation.toFixed(2)) + droneHeight.value |
| | | if (newValue) { |
| | | viewDroneInfo.longitude = newValue?.longitude |
| | | viewDroneInfo.latitude = newValue?.latitude |
| | | viewDroneInfo.elevation = Number(newValue?.elevation.toFixed(2)) + droneHeight.value |
| | | } |
| | | }, {deep: true}) |
| | | |
| | | |
| | | |
| | | // 生成航线轨迹 |
| | | const generateCourse = async () => { |
| | | // ssLinePath.value = 'https://wrj.shuixiongit.com/minio/cloud-bucket/wayline/20250211/wayline_1739254562374.kmz' |
| | | if (!ssLinePath.value) return |
| | | const { fileInfoObj } = await analyzeKmzFile(`${ssLinePath.value}?_t=${new Date().getTime()}`) |
| | | const xmlStr = await fileInfoObj['wpmz/template.kml'] |
| | | const xmlJson = XMLToJSON(xmlStr)?.['Document'] |
| | | const placemark = xmlJson.Folder.Placemark |
| | | console.log('看看航线值', placemark.Polygon) |
| | | console.log('看看航线值', sbInfo) |
| | | if (placemark?.Polygon) { |
| | | // return 'planar' |
| | | planarWayline(ssLinePath.value, sbInfo.longitude, sbInfo.latitude) |
| | |
| | | } |
| | | } |
| | | |
| | | const me_latitude = ref(0); |
| | | const me_longitude = ref(0); |
| | | // const loading = ref(true); |
| | | // const error = ref(null); |
| | | // 获取自身定位 |
| | | const getLocation = () => { |
| | | if (window.cesiumViewer == null) return |
| | | if (navigator.geolocation) { |
| | | navigator.geolocation.getCurrentPosition( |
| | | (position) => { |
| | | console.log('333',position.coords.latitude) |
| | | console.log('333',position.coords.longitude) |
| | | me_latitude.value = position.coords.latitude; |
| | | me_longitude.value = position.coords.longitude; |
| | | // loading.value = false; |
| | | // 开始给自己定位 |
| | | getLnglatAltitude(me_longitude.value, me_latitude.value, window.cesiumViewer).then(res => { |
| | | removeById('me_coordinate') |
| | | window.cesiumViewer.entities.add({ |
| | | position: globalCesium.Cartesian3.fromDegrees( |
| | | me_longitude.value, |
| | | me_latitude.value, |
| | | res.height, |
| | | ), |
| | | id: 'me_coordinate', |
| | | billboard: { |
| | | image: meMapSrc, |
| | | outlineWidth: 0, |
| | | width: 36, |
| | | height: 36, |
| | | scale: 1.0, |
| | | } |
| | | }) |
| | | // window.cesiumViewer.scene.camera.setView({ |
| | | // destination: globalCesium.Cartesian3.fromDegrees( |
| | | // Number(me_longitude), |
| | | // Number(me_latitude), |
| | | // 10000.0, |
| | | // ), |
| | | // }) |
| | | // droneHeight.value = res.height |
| | | }) |
| | | }, |
| | | (err) => { |
| | | console.log('定位有误') |
| | | } |
| | | ); |
| | | } else { |
| | | console.log('您的浏览器不支持地理定位') |
| | | } |
| | | }; |
| | | let intervalId = null; |
| | | |
| | | onMounted(async () => { |
| | | window.addEventListener('orientationchange', checkOrientation); |
| | |
| | | await nextTick(); |
| | | await _init('cesiumContainerBigMap'); |
| | | await getWrjSsLx(); |
| | | |
| | | await getLocation() |
| | | |
| | | // 判断是遥控器还是机场 |
| | | let domain = sessionStorage.getItem('domain') |
| | | if (domain !== '0') { |
| | | await getPhoneLocation(false,workspaceId.value) |
| | | // // // 设置定时器,每隔 5 秒刷新一次数据 |
| | | intervalId = setInterval(getPhoneLocation, 5000); |
| | | } |
| | | }); |
| | | |
| | | onBeforeUnmount(() => { |
| | |
| | | if (player) { |
| | | player.dispose(); |
| | | } |
| | | if (flvPlayer) { |
| | | flvPlayer.pause(); // 暂停播放 |
| | | flvPlayer.unload(); // 卸载视频 |
| | | flvPlayer.detachMediaElement(); // 解绑 video 元素 |
| | | flvPlayer.destroy(); // 销毁播放器 |
| | | flvPlayer = null; |
| | | // 组件卸载时清除定时器 |
| | | if (intervalId) { |
| | | clearInterval(intervalId); |
| | | } |
| | | }); |
| | | |
| | |
| | | <style lang="scss" scoped> |
| | | .drone-pilot-details { |
| | | .landscape-box { |
| | | position: relative; |
| | | display: flex; |
| | | overflow: hidden; |
| | | // position: relative; |
| | | // display: flex; |
| | | .l-map { |
| | | .l-zp { |
| | | position: fixed; |
| | |
| | | .l-zoom { |
| | | position: fixed; |
| | | bottom: 0; |
| | | right: 0; |
| | | .zoom { |
| | | width: 2rem; |
| | | height: 2rem; |
| | | margin: 0.2rem 0.4rem; |
| | | border-radius: 3px; |
| | | background-color: rgba(0, 0, 0, 0.8); |
| | | display: flex; |
| | |
| | | #cesiumContainerBigMap { |
| | | width: 100%; |
| | | height: 100%; |
| | | margin: 0; |
| | | padding: 0; |
| | | overflow: hidden; |
| | | |
| | | :deep() { |
| | |
| | | } |
| | | } |
| | | } |
| | | #cesiumContainerMap { |
| | | width: 100%; |
| | | height: 100%; |
| | | overflow: hidden; |
| | | |
| | | :deep() { |
| | | .cesium-viewer { |
| | | width: 100%; |
| | | height: 100%; |
| | | |
| | | .cesium-viewer-cesiumWidgetContainer { |
| | | width: 100%; |
| | | height: 100%; |
| | | |
| | | .cesium-widget { |
| | | width: 100%; |
| | | height: 100%; |
| | | |
| | | canvas { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .portrait-screen { |
| | | .l-map { |
| | | .l-zp { |
| | | position: fixed; |
| | | right: 28%; |
| | | bottom: 0; |
| | | } |
| | | .l-zoom { |
| | | position: fixed; |
| | | bottom: 0; |
| | | .zoom { |
| | | width: 2rem; |
| | | height: 2rem; |
| | | border-radius: 3px; |
| | | background-color: rgba(0, 0, 0, 0.8); |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | overflow: hidden; |
| | | cursor: pointer; |
| | | pointer-events: all; |
| | | img { |
| | | width: 1.6rem; |
| | | height: 1.6rem; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .right-box {} |
| | | } |
| | | </style> |