月球大数据地理空间分析展示平台-【前端】-月球2期前端
surprise
2023-11-27 f5763f787d5cc5aa0b7d248e0f494c4232f1e3f3
src/assets/js/Map/index.js
@@ -1,77 +1,135 @@
//配置文件地址
import config from "./config";
// 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
    );
    //贴地线
    SmartEarth.Cesium.ExternalParameter.changeApproximateTerrainHeights = true;
    //页面初始化
    this.earthCtrl = new SmartEarth.EarthCtrl("cesiumContainer", {
      StaticFileBaseUrl: config.StaticFileBaseUrl,
      ellipsoidCoordinates: "MOON",
      ellipsoidCoordinates: 'MOON2000',
      timeline: true,
      shadowBackCul1: false
    });
    this.earthCtrl.Viewer.scene.debugShowFramesPerSecond = true
    this.earthCtrl.coreMap.scene.screenSpaceCameraController.enableCollisionDetection = true;
    this.earthCtrl.Viewer.scene.globe.terrainExaggeration = 1.00001
    // this.earthCtrl.shadowMap.maximumDistance = 10000.0;
    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 });
    sgworld.Creator.SimpleGraphic.edit(true, { editProp: true });
    // 最小缩放高度(米)
    // Viewer.scene.screenSpaceCameraController.minimumZoomDistance =10000;
    // 最大缩放高度(米)
    // Viewer.scene.screenSpaceCameraController.maximumZoomDistance = 5000000;
    //=======================
    //阴影分析
    Viewer.scene.globe.lightingFadeOutDistance = 5.8e+7;
    Viewer.scene.globe.enableLighting = false;
    earthCtrl.shadows = false;
    //设置球体颜色
    window.Viewer.scene.globe.baseColor = new Cesium.Color.fromCssColorString('#A9A9A9');
    //清除所有默认图层
    window.Viewer.imageryLayers.removeAll();
    window.setLayer();
    // Viewer.scene.globe.depthTestAgainstTerrain = true;
    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();
    this.addMouseLeftDownEvents();
  },
  //鼠标左键点击事件添加
  addMouseLeftClickEvents() {
  addMouseLeftDownEvents() {
    if (window.handleLeftClick) {
      window.handleLeftClick.removeInputAction(
        Cesium.ScreenSpaceEventType.LEFT_CLICK
      ); //移除事件
      window.handleLeftClick = null;
    }
    const pickGlobeSlope = new SmartEarth.Cesium.PickGlobeSlope(earthCtrl.Viewer)
    window.handleLeftClick = new Cesium.ScreenSpaceEventHandler(
      window.Viewer.scene.canvas
    );
    var that = this;
    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)),
        };
      const angle = pickGlobeSlope.pickSlope(event.position)
      if (store.state.slopeQueyFlag) {
        if (!store.state.showSlopeQuey) {
          store.state.showSlopeQuey = true;
        }
        store.state.slopeQueyValue = angle.toFixed(6);
      }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
  },
  //鼠标左键点击事件添加
  addMouseLeftClickEvents() {
    if (window.handleLeftDown) {
      window.handleLeftDown.removeInputAction(
        Cesium.ScreenSpaceEventType.LEFT_DOWN
      ); //移除事件
      window.handleLeftDown = null;
    }
    window.handleLeftDown = new Cesium.ScreenSpaceEventHandler(
      window.Viewer.scene.canvas
    );
    var that = this;
    window.handleLeftDown.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(cartesian.id._id)
        }
      }
    }, Cesium.ScreenSpaceEventType.LEFT_DOWN);
  },
  setEditTemporaryLayer(res) {
    // store.state.editTemporaryId = res;
    // console.log(store.state.editTemporaryId)
    if (store.state.editTemporaryId && store.state.editTemporaryId == res) {
      store.state.setEditTemporaryShow = true;
    }
  },
  addMouseMouseMoveEvents() {
    if (window.handleMouseMove) {
      window.handleMouseMove.removeInputAction(
@@ -148,4 +206,4 @@
    console.log(moonPosition);
  },
};
export default InitMap;
export default InitMap;