shuishen
2021-12-23 9e43f80d96bda7f1108dcfcfd7340e567f2e48d0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
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",
        },
    },
    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_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;
            }
        }
    },
    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 clnt = data.from == "PopupOurOnce" ? +data.lntLat[0] : +data.lntLat[0],
                clat = data.from == "PopupOurOnce" ? +data.lntLat[1] - 0.00008 : +data.lntLat[1] - 0.00048,
                calt = data.from == "PopupOurOnce" ? 0 : 90.648862227;
            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
                );
                data.position = ellipsoid.cartographicToCartesian(cartographic);
            }
            // 传递响应数据
            commit("MSET_QUERY", data);
            // 定制化窗体
            let 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轴
            let Flys = [
                data.from == "PopupOurOnce" ? +data.lntLat[0] + 0.01197 : +data.lntLat[0] + 0.01197,
                data.from == "PopupOurOnce" ? +data.lntLat[1] - 0.0021 : +data.lntLat[1] - 0.0021,
                data.from == "PopupOurOnce" ? 330 : 330,
            ]
            let Position = new global.DC.Position(//转坐标
                // +data.lntLat[0] + 0.01197,
                // +data.lntLat[1] - 0.0021,
                // 330,
                ...Flys,
                0,
                -45
            );
            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.6,   //定位的时间间隔
                complete: () => {//完成后的回调
                    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)
                let query = { name: "选择点" },
                    intLat = [e.wgs84Position.lng, e.wgs84Position.lat];
                let d = {
                    position: null,
                    lntLat: intLat,
                    query: { ...(query || {}), introduce: null, address: intLat },
                    useJWD: true, //仅使用经纬度
                };
                dispatch("setMobileWindows", d);
            });
            state.pointLayer.addOverlay(billboard); //实景
            // commit("MSET_OPENPOINTEL", true);
        },
    }
}
 
export default mobile