月球大数据地理空间分析展示平台-【前端】-月球2期前端
WX
2023-09-21 c6d2c07a595f741fc33301a537820173f95e38cf
src/assets/js/Map/index.js
@@ -1,135 +1,163 @@
//配置文件地址
import config from "./config";
// import config from "../../../../public/config/config";
//服务加载配置文件
import server from "./server";
const InitMap = {
    sgworld: null,
    Viewer: null,
    //地图初始化
    init3DMap() {
        //设置月球坐标系
        Cesium.Ellipsoid.WGS84 = new Cesium.Ellipsoid(
            1737400.0,
            1737400.0,
            1737400.0
        );
        //页面初始化
        this.sgworld = new SmartEarth.SGWorld("cesiumContainer", {
            url: SmartEarthRootUrl + config.imgUrl,
            licenseServer: config.licenseServer,
            infoBox: false,
        });
        this.Viewer = this.sgworld._Viewer;
        window.sgworld = this.sgworld;
        window.Viewer = this.Viewer;
        //显示fps
        sgworld._Viewer.scene.debugShowFramesPerSecond = false;
        //添加月球初始化切片服务
        server.AddTmsLayer(config.moonTms);
        //添加鼠标左击事件
        this.addMouseLeftClickEvents();
        this.addMouseMouseMoveEvents();
    },
    //鼠标左键点击事件添加
    addMouseLeftClickEvents() {
        if (window.handleLeftClick) {
            window.handleLeftClick.removeInputAction(
                Cesium.ScreenSpaceEventType.LEFT_CLICK
            ); //移除事件
            window.handleLeftClick = null;
        }
        window.handleLeftClick = new Cesium.ScreenSpaceEventHandler(
            window.Viewer.scene.canvas
        );
        window.handleLeftClick.setInputAction(function (event) {
            let cartesian = window.Viewer.camera.pickEllipsoid(event.position);
            if (cartesian) {
                let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
                let lng = Cesium.Math.toDegrees(cartographic.longitude); // 经度
                let lat = Cesium.Math.toDegrees(cartographic.latitude); // 纬度
                let alt = cartographic.height; // 高度,椭球面height永远等于0
                let coordinate = {
                    longitude: Number(lng.toFixed(6)),
                    latitude: Number(lat.toFixed(6)),
                    altitude: Number(alt.toFixed(2)),
  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;
    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;
        }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    },
    window.earthCtrl = this.earthCtrl;
    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);
    window.Viewer = this.earthCtrl._Viewer;
                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);
    },
    Viewer.scene.skyAtmosphere.show = false;
    //CGCS2000转月球坐标---待验证
    Cjcs2000ToMoon() {
        // 定义待转换的经纬度坐标和高度
        const longitude = 110.5;
        const latitude = 34.5;
        const height = 0;
    window.Cesium = SmartEarth.Cesium;
        // 定义CGCS2000坐标系
        const cgcs2000 = new Cesium.Ellipsoid(
            6378137.0,
            6378137.0,
            6356752.3142451793
        );
    window.sgworld = earthCtrl;
        // 定义Moon2000坐标系
        const moon2000 = new Cesium.Ellipsoid(1737400.0, 1737400.0, 1737400.0);
    sgworld.Creator.SimpleGraphic.edit(true, { editProp: true });
    //=======================
    window.Viewer.imageryLayers.removeAll();
    window.setLayer();
        // 将经纬度坐标转换为笛卡尔坐标系
        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);
    },
    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);
  },
  //鼠标左键点击事件添加
  addMouseLeftClickEvents() {
    if (window.handleLeftClick) {
      window.handleLeftClick.removeInputAction(
        Cesium.ScreenSpaceEventType.LEFT_CLICK
      ); //移除事件
      window.handleLeftClick = null;
    }
    window.handleLeftClick = new Cesium.ScreenSpaceEventHandler(
      window.Viewer.scene.canvas
    );
    window.handleLeftClick.setInputAction(function (event) {
      let cartesian = window.Viewer.camera.pickEllipsoid(event.position);
      if (cartesian) {
        let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
        let lng = Cesium.Math.toDegrees(cartographic.longitude); // 经度
        let lat = Cesium.Math.toDegrees(cartographic.latitude); // 纬度
        let alt = cartographic.height; // 高度,椭球面height永远等于0
        let coordinate = {
          longitude: Number(lng.toFixed(6)),
          latitude: Number(lat.toFixed(6)),
          altitude: Number(alt.toFixed(2)),
        };
      }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
  },
  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;