import $store from '../index' const mobile = { state: { mviewer: null, // 地图实体类 mBigPopup: false, // 全屏弹窗 popupOurOpenData: [], // 全屏弹窗中下拉菜单数据 popupTableName: [], // 全屏弹窗标签页数据 mBigPopupAfter: false, /// /全屏弹窗之前的弹窗 ips: '', // 获取的ip iconHide: false, // 右侧伸缩状态 // DC: '',//DC全局保存 MobileWindowsHide: true, // 改变点击窗口的显示状态 MobileWindowChangeData: false, // 改变点击窗口的数据 popupsDom: '', // mobileDivForms的实体类 query: {}, // 传输数据 openmobileGoTo: false, // 测试 ccDataState: false, // 测试 openmobilePanorama: false, // 实景显影 MobileWindowsHideFixed: true, // 改变点击窗口的显示状态--固定窗口 MobileWindowChangeDataFixed: false, // 改变点击窗口的数据--固定窗口 // 在每次飞行弹窗中 加入自己的点 pointLayer: null, pointLayerData: { flag: false, label: '选择点', img: '/img/leftnav/way.png', normal: '/img/leftnav/way.png', checked: '/img/leftnav/way-checked.png', layer: 'pointLayer' }, // 默认起始点函数 startPointFn: '', dimension: "2.5D",// 维度 dimensionData: {// 维度镜头数据 heading: 0, pitch: -90, roll: 0 }, perspectiveControl: '',//视角控制:高度、角度 ()=>{} perspectiveControls: '',//视角控制:高度、角度 ()=>{} tilesetLayer: null,//3d模型 tileset: null,//3d模型 tilesetLayer: null,//2.5d模型 usetowpointfive: null, tilesetLayer: null,//瀑布流 }, mutations: { MSET_VIEWER(state, viewer) { state.mviewer = viewer }, MSET_BIGPOPUP(state, viewer) { state.mBigPopup = viewer $store.dispatch('closeMobileWindowsDom') // 关闭弹窗 }, MSET_BIGPOPUPAFTER(state, viewer) { state.mBigPopupAfter = viewer $store.dispatch('closeMobileWindowsDom') // 关闭弹窗 }, MSET_POPUPOUROPENDATA(state, viewer) { state.popupOurOpenData = viewer }, MSET_ICONHIDE(state, viewer) { state.iconHide = viewer }, MSET_POPUPTABLENAME(state, viewer) { state.popupTableName = viewer }, MSET_MOBILEWINDOWSHIDE(state, viewer) { // 随地图移动窗口 state.MobileWindowChangeData = !state.MobileWindowChangeData state.MobileWindowsHide = viewer }, MSETCC_SETCC(state, viewer) { state.ccDataState = !state.ccDataState// 专门测试 state.query = viewer }, MSET_POPUPDOM(state, viewer) { state.popupsDom = viewer }, MSET_QUERY(state, viewer) { state.query = viewer }, MSET_OPENMOBILEGOTO(state, viewer) { state.openmobileGoTo = viewer }, MSET_OPENMOBILEPANORAMA(state, viewer) { state.openmobilePanorama = viewer }, MSET_MOBILEWINDOWSHIDEFIXED(state, viewer) { // 固定窗口 state.MobileWindowChangeDataFixed = !state.MobileWindowChangeDataFixed state.MobileWindowsHideFixed = viewer console.log(state.MobileWindowChangeDataFixed) }, // 默认位置 MSET_MORENWEIZHI(state, data) { state.startPointFn = data }, // // 开关飞入点图标 // MSET_OPENPOINTEL(state, val) { // if (val) { // state.pointLayerData.img = state.pointLayerData.checked // state[state.pointLayerData.layer].show = true // } else { // state.pointLayerData.img = state.pointLayerData.normal // state[state.pointLayerData.layer].show = false // } // }, //切换2D和2.5D MSET_DIMENSION(state, data) {//3d,2.5d转换事件 state.dimension = data; if (data == "3D") { // 改数据为3d数据 state.dimensionData = {// 维度镜头数据 heading: 0, pitch: -45, roll: 0 }; // console.log(1321) state.wallLayer.show = false; //关闭瀑布 以及2.5d图形贴片 state.mviewer.imageryLayers.remove(state.newLayer); state.newLayer = null; // state.silhouetteBlue.selected = [] state.tilesetLayer.changesilhouetteBlue(); //清空silhouetteBlue.selected = []; // console.log(state.tileset) state.tilesetLayer.show = true; //显示3d图形 state.startPointFn();//移动默认视角 // state.mviewer.flyTo(state.tileset); } else if (data == "2.5D") { state.dimensionData = {// 维度镜头数据 heading: 0, pitch: -90, roll: 0 }; state.tilesetLayer.show = false//隐藏3d图形 state.newLayer = state.usetowpointfive();//添加2.5d图形贴片 state.wallLayer.show = true//打开瀑布 state.startPointFn();//移动默认视角 } }, //切换控制 MSET_PERSPECTIVECONTROL(state, data) { state.perspectiveControl = data; state.perspectiveControls = !state.perspectiveControls; }, MSET_MODEOLS(state, data) { state.tilesetLayer = data.tilesetLayer; state.newLayer = data.newLayer; state.wallLayer = data.wallLayer; state.tileset = data.tileset; state.usetowpointfive = data.usetowpointfive; } }, actions: { MSET_CREADE({ state, commit, dispatch }) { state.pointLayer = new global.DC.VectorLayer('pointLayer')// 创建图标实体类 state.mviewer.addLayer(state.pointLayer)// 添加到地图 }, setMobileWindows({ state, commit, dispatch }, data) { // 打开随地图移动窗口 // 关闭前一个弹窗? dispatch("closeMobileWindowsDom"); let clas, Flys; const nowHeight = Math.ceil(state.mviewer.camera.positionCartographic.height); console.log(data) if (state.dimension == "3D") { Flys = [ +data.lntLat[0] + 0.01197, // +data.lntLat[1] - 0.0001, +data.lntLat[1] - 0.0042, 330, ] clas = [ data.from == 'PopupOurOnce' ? +data.lntLat[0] : +data.lntLat[0], // data.from == 'PopupOurOnce' ? +data.lntLat[1] - 0.00108 : +data.lntLat[1], data.from == 'PopupOurOnce' ? +data.lntLat[1] - 0.00108 : +data.lntLat[1] - 0.00048, data.from == 'PopupOurOnce' ? 0 : 90.648862227 ] } else if (state.dimension == '2.5D') { Flys = [ +data.lntLat[0] + 0.01197, +data.lntLat[1] - 0.0001, // +data.lntLat[1] - 0.0022, nowHeight ] clas = [ data.from == 'PopupOurOnce' ? +data.lntLat[0] : +data.lntLat[0], data.from == 'PopupOurOnce' ? +data.lntLat[1] - 0.00108 : +data.lntLat[1], // data.from == 'PopupOurOnce' ? +data.lntLat[1] - 0.00108 : +data.lntLat[1] - 0.00048, // data.from == 'PopupOurOnce' ? 0 : 90.648862227 data.from == 'PopupOurOnce' ? 0 : 0 ] } if (data.useJWD) { var ellipsoid = state.mviewer.scene.globe.ellipsoid var cartographic = global.DC.Namespace.Cesium.Cartographic.fromDegrees( // data.lntLat[0], // data.lntLat[1] - 0.00048,//数值增大是下 // "90.648862227" // clnt, clat, calt ...clas ) data.position = ellipsoid.cartographicToCartesian(cartographic) } // 传递响应数据 commit('MSET_QUERY', data) // 定制化窗体 const popupsDom = new global.DC.mobileDivForms(state.mviewer, { domId: 'mobilePopup', title: data.query.name || '成教楼 ', className: 'mobilePopup', content: document.getElementById('mobile-map_content_content'), position: [data.position] }) // commit("MSET_MOBILEWINDOWSHIDE", false)//显示弹窗 // dispatch("CHANGETOC3", { // 转换坐标 // lnt: data.lntLat[0], // lat: data.lntLat[1] // }).then(res => { // console.log(res) // 基于高度基础设置 // h:1530 // lnt: + 0.01187 x轴 大是向左 // Lat: - 0.0108 y轴 减是上 // h:4000 // lnt: + 0.01187 x轴 // Lat: - 0.0308 y轴 // h:330 // lnt: + 0.01197 x轴 // Lat: - 0.0021 y轴 // console.log(data.query.from, 78) // let Flys = [ // data.query.from == "地图点击" ? +data.lntLat[0] + 0.01197 : +data.lntLat[0] + 0.01197, // data.query.from == "地图点击" ? +data.lntLat[1] - 0.0021 : +data.lntLat[1] - 0.0021, // data.query.from == "地图点击" ? 330 : 330, // ] const Position = new global.DC.Position(// 转坐标 // +data.lntLat[0] + 0.01197, // +data.lntLat[1] - 0.0021, // 330, ...Flys, 0, state.dimensionData.pitch ); dispatch("mapFlyTo", {//飞入 lntLat: [Position.lng, Position.lat, Position.alt], heading: Position.heading, pitch: Position.pitch, roll: Position.roll }) // }) commit('MSET_POPUPDOM', popupsDom) }, closeMobileWindowsDom({ state, commit }) { if (!state.MobileWindowsHide && state.popupsDom) { state.popupsDom.closeOur() commit('MSET_MOBILEWINDOWSHIDE', true) } }, CHANGETOC3({ state, commit }, data) { // //转换经纬度坐标 成世界坐标cartesian3 var ellipsoid = state.mviewer.scene.globe.ellipsoid var cartographic = global.DC.Namespace.Cesium.Cartographic.fromDegrees( data.lnt, data.lat - 0.00006, data.alt || '90.648862227' ) var position = ellipsoid.cartographicToCartesian(cartographic) return position }, SET_OPENWIDOWFIXED({ state, commit }, data) { // 传递响应数据 commit('MSET_QUERY', data) // 显示窗口 commit('MSET_MOBILEWINDOWSHIDEFIXED', false) // 移动地图位置 state.mviewer.zoomToPosition( new global.DC.Position(data.lntLat[0], data.lntLat[1] - 0.012, 1530, 0, -45) ) }, CLOSE_WIDOWFIXED({ state, commit }) { // 隐藏窗口 if (!state.MobileWindowsHideFixed) { console.log(state.MobileWindowsHideFixed) commit('MSET_MOBILEWINDOWSHIDEFIXED', true) } }, // 加入当时的选点 JOIN_POINT({ state, commit }, data) { }, // flyTo mapFlyTo({ state, commit, dispatch }, data) { state.mviewer.camera.flyTo({ destination: global.DC.Namespace.Cesium.Cartesian3.fromDegrees( data.lntLat[0] - 0.012, data.lntLat[1], data.lntLat[2] || 15000.0 ), // destination: data.res, orientation: { heading: global.DC.Namespace.Cesium.Math.toRadians(data.heading), pitch: global.DC.Namespace.Cesium.Math.toRadians(data.pitch), // heading: data.heading, // pitch: data.pitch, roll: data.roll }, duration: 1.5, // 定位的时间间隔 complete: () => { // 完成后的回调 if (data.fn) { // 自定义回调 setTimeout(() => { data.fn() }, 500) } if (!data.noOpen) { setTimeout(() => { // dispatch("MSET_POINTDATA", data.lntLat);//传入标记点 !state.MobileWindowsHide || commit('MSET_MOBILEWINDOWSHIDE', false)// 显示弹窗 }, 0) } } }) // 官网flyto使用方法 // 1. Fly to a position with a top-down view // viewer.camera.flyTo({ // destination : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0) // }); // // 2. Fly to a Rectangle with a top-down view // viewer.camera.flyTo({ // destination : Cesium.Rectangle.fromDegrees(west, south, east, north) // }); // // 3. Fly to a position with an orientation using unit vectors. // viewer.camera.flyTo({ // destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0), // orientation : { // direction : new Cesium.Cartesian3(-0.04231243104240401, -0.20123236049443421, -0.97862924300734), // up : new Cesium.Cartesian3(-0.47934589305293746, -0.8553216253114552, 0.1966022179118339) // } // }); // // 4. Fly to a position with an orientation using heading, pitch and roll. // viewer.camera.flyTo({ // destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0), // orientation : { // heading : Cesium.Math.toRadians(175.0), // pitch : Cesium.Math.toRadians(-35.0), // roll : 0.0 // } // }); }, // 飞入点加入位置 MSET_POINTDATA({ state, commit, dispatch }, data) { // 加入坐标 const positions = new global.DC.Position(data[0] - 0.0119, data[1] + 0.0111, 0) const billboard = new global.DC.Billboard( positions, '/img/leftnav/map-panorama.png' ) billboard.size = [16, 16] // 订阅事件3 billboard.on(DC.MouseEventType.CLICK, (e) => { // 定制化窗体 console.log(e) const query = { name: '选择点' } const intLat = [e.wgs84Position.lng, e.wgs84Position.lat] const d = { position: null, lntLat: intLat, query: { ...(query || {}), introduce: null, address: intLat }, useJWD: true // 仅使用经纬度 } dispatch('setMobileWindows', d) }) state.pointLayer.addOverlay(billboard) // 实景 // commit("MSET_OPENPOINTEL", true); }, MSET_LOCKPERSPECTIVEL({ state, commit, dispatch }, val) { // 锁定 state.mviewer.camera.lookAtTransform(global.DC.Namespace.Cesium.Matrix4.IDENTITY) // console.log(global.DC.Namespace.Cesium.Matrix4.IDENTITY) }, MSET_DIMENSIONS({ state, commit, dispatch }, val) {//3d,2.5d转换事件 commit("MSET_DIMENSION", val); //控制高度 const height = Math.ceil(state.mviewer.camera.positionCartographic.height); state.mviewer.camera.setView({ destination: global.DC.Namespace.Cesium.Cartesian3.fromRadians( state.mviewer.camera.positionCartographic.longitude, state.mviewer.camera.positionCartographic.latitude, height ), orientation: { heading: global.DC.Namespace.Cesium.Math.toRadians(state.dimensionData.heading), // 方向 pitch: global.DC.Namespace.Cesium.Math.toRadians( state.dimensionData.pitch ), // 倾斜角度 roll: state.dimensionData.roll, }, }); }, MSET_GOTOCC({ state, commit, dispatch }, val) {//测试移动位置 // commit("MSET_DIMENSION", val); //控制高度 // const height = Math.ceil(state.mviewer.camera.positionCartographic.height); state.mviewer.camera.setView({ destination: global.DC.Namespace.Cesium.Cartesian3.fromRadians( state.mviewer.camera.positionCartographic.longitude, state.mviewer.camera.positionCartographic.latitude, val.height ), orientation: { heading: global.DC.Namespace.Cesium.Math.toRadians(val.heading), // 方向 pitch: global.DC.Namespace.Cesium.Math.toRadians( val.pitch ), // 倾斜角度 roll: val.roll, }, }); } } } export default mobile