月球大数据地理空间分析展示平台-【前端】-月球2期前端
Surpriseplus
2023-10-10 a280f0e7e37d6fe45906902ea044a735a99c5e35
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
//配置文件地址
// import config from "../../../../public/config/config";
//服务加载配置文件
import { Store } from "vuex";
import server from "./server";
import store from "@/store";
const InitMap = {
  earthCtrl: null,
  Viewer: null,
  graticules: null,
  //地图初始化
  init3DMap() {
    SmartEarth.Cesium.ExternalParameter.eliminate = false;
    SmartEarth.Cesium.ExternalParameter.changeApproximateTerrainHeights = true;
    SmartEarth.Cesium.ExternalParameter.maxTerrainHeight = 2000000;
    SmartEarth.Cesium.ExternalParameter.minTerrainHeight = -2000000;
    SmartEarth.Cesium.ShadowMap.MAXIMUM_DISTANCE = 20000000000;
    SmartEarth.Cesium.ExternalParameter.ellipsoidCoordinates = 'MOON2000'
    window.Cesium = SmartEarth.Cesium;
    SmartEarth.Cesium.Ellipsoid.WGS84 = new SmartEarth.Cesium.Ellipsoid(
      1737400.0,
      1737400.0,
      1737400.0
    );
 
 
    //页面初始化
    this.earthCtrl = new SmartEarth.EarthCtrl("cesiumContainer", {
      StaticFileBaseUrl: config.StaticFileBaseUrl,
      ellipsoidCoordinates: "MOON2000",
      timeline: true,
    });
 
    this.earthCtrl.Viewer.scene.debugShowFramesPerSecond = true;
    this.earthCtrl.coreMap.scene.screenSpaceCameraController.enableCollisionDetection = true;
 
    window.earthCtrl = this.earthCtrl;
 
    window.Viewer = this.earthCtrl._Viewer;
 
    Viewer.scene.skyAtmosphere.show = false;
 
    window.Cesium = SmartEarth.Cesium;
 
    window.sgworld = earthCtrl;
 
    sgworld.Creator.SimpleGraphic.edit(true, { editProp: false });
    //=======================
    // window.Viewer.imageryLayers.removeAll();
    window.setLayer();
 
    Viewer.scene.globe.depthTestAgainstTerrain = false; // 开启深度测试
    Viewer.animation.container.style.visibility = "hidden";
    Viewer.timeline.container.style.visibility = "hidden";
    //=======================
    //大气层
    Viewer.scene.globe.showGroundAtmosphere = false;
    sgworld._Viewer.scene.debugShowFramesPerSecond = false;
    sgworld.Navigate.Stop(); //取消飞行状态
    sgworld.Navigate.setPosition(-1093596.38, 5729026.12, 4136590.41);
    this.addMouseLeftClickEvents();
  },
 
  //鼠标左键点击事件添加
  addMouseLeftClickEvents() {
    if (window.handleLeftClick) {
      window.handleLeftClick.removeInputAction(
        Cesium.ScreenSpaceEventType.LEFT_CLICK
      ); //移除事件
      window.handleLeftClick = null;
    }
    window.handleLeftClick = new Cesium.ScreenSpaceEventHandler(
      window.Viewer.scene.canvas
    );
    var that = this;
    window.handleLeftClick.setInputAction(function (event) {
      let cartesian = window.Viewer.scene.pick(event.position);
      if (Cesium.defined(cartesian)) {
 
        if (cartesian.id.shpType && cartesian.id.shpType == 'temporaryLayer') {
          that.setEditTemporaryLayer()
        }
 
      }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
  },
  setEditTemporaryLayer(res) {
    // store.state.editTemporaryId = res;
    // console.log(store.state.editTemporaryId)
    if (store.state.editTemporaryId) {
      store.state.setEditTemporaryShow = true;
    }
  },
  addMouseMouseMoveEvents() {
    if (window.handleMouseMove) {
      window.handleMouseMove.removeInputAction(
        Cesium.ScreenSpaceEventType.MOUSE_MOVE
      ); //移除事件
      window.handleMouseMove = null;
    }
    window.handleMouseMove = new Cesium.ScreenSpaceEventHandler(
      window.Viewer.scene.canvas
    );
    window.handleMouseMove.setInputAction(function (movement) {
      let cartesian = window.Viewer.camera.pickEllipsoid(
        movement.endPosition,
        window.Viewer.scene.globe.ellipsoid
      );
      if (cartesian) {
        //将笛卡尔坐标转换为地理坐标
        var cartographic =
          window.Viewer.scene.globe.ellipsoid.cartesianToCartographic(
            cartesian
          );
        //将弧度转为度的十进制度表示
        var lng = Cesium.Math.toDegrees(cartographic.longitude);
        var lat = Cesium.Math.toDegrees(cartographic.latitude);
        //获取相机高度
        var alt = Math.ceil(window.Viewer.camera.positionCartographic.height);
 
        let coordinate = {
          longitude: Number(lng.toFixed(6)),
          latitude: Number(lat.toFixed(6)),
          altitude: Number(alt.toFixed(2)),
          type: "MOUSE_MOVE",
        };
        window.addMouseEvents(coordinate);
      }
    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
  },
 
  //CGCS2000转月球坐标---待验证
  Cjcs2000ToMoon() {
    // 定义待转换的经纬度坐标和高度
    const longitude = 110.5;
    const latitude = 34.5;
    const height = 0;
 
    // 定义CGCS2000坐标系
    const cgcs2000 = new Cesium.Ellipsoid(
      6378137.0,
      6378137.0,
      6356752.3142451793
    );
 
    // 定义Moon2000坐标系
    const moon2000 = new Cesium.Ellipsoid(1737400.0, 1737400.0, 1737400.0);
 
    // 将经纬度坐标转换为笛卡尔坐标系
    const cartesian3 = Cesium.Cartesian3.fromDegrees(
      longitude,
      latitude,
      height,
      cgcs2000
    );
    // 将笛卡尔坐标系转换为Moon2000坐标系
    const moonCartesian3 = Cesium.Transforms.eastNorthUpToFixedFrame(
      cartesian3,
      cgcs2000,
      moon2000
    );
    // 输出转换后的经纬度坐标和高度
    console.log(moonCartesian3);
    // 将Moon2000坐标系的笛卡尔坐标转换为经纬度坐标
    const moonPosition = Cesium.Cartographic.fromCartesian(moonCartesian3);
    // 输出转换后的经纬度坐标和高度
    console.log(moonPosition);
  },
};
export default InitMap;