suerprisePlus
2024-05-30 7452857e6eb0d23dbd71a29f25985ada5208f25d
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
// 地图初始化,数据加载功能
import mapData from './mapData.js';
import store from './../../store/store.js';
import mapLayer from './mapLayer.js';
import mapMenu from './mapMenu.js';
import { showToast } from 'vant';
const mapView = {
  checkentity: null,
  init() {
    window.earthCtrl = new SmartEarth.EarthCtrl('sdkContainer', {
      // 隐藏默认底图
      defaultImagery: false,
      // 隐藏logo
      printLog: false
      // sceneMode: SmartEarth.Cesium.SceneMode.SCENE2D
    });
    window.Cesium = SmartEarth.Cesium;
    window.Viewer = earthCtrl.viewer;
    Viewer.scene.globe.baseColor = Cesium.Color.fromCssColorString('#A9A9A9'); //设置地球颜色
    // 设置场景显示高度
    Viewer.scene.screenSpaceCameraController.maximumZoomDistance = 30000;
    // 清空默认底图
    Viewer.imageryLayers.removeAll();
 
    // Viewer.scene.screenSpaceCameraController.enableRotate = true; //禁止旋转
    // 开启深度检测,默认是关闭的
    // Viewer.scene.globe.depthTestAgainstTerrain = true;
    //范围限制
    earthCtrl.camera.createRectanglelbj(
      {
        id: 0,
        rectangle: {
          min: [117.18456811131752, 38.99131117296185],
          max: [117.32249678417742, 39.22350574645287]
        }
      },
      function (data) {
        // 禁止倾斜相机
        Viewer.scene.screenSpaceCameraController.enableTilt = false;
      }
    );
    // 场景初始化底图
    // earthCtrl.factory.createImageryLayer({
    //   sourceType: 'wmts',
    //   url: config.mapServer.DTUrl,
    //   tileMatrixSetID: 'EPSG:4326',
    //   tilingScheme: new SmartEarth.Cesium.GeographicTilingScheme()
    // });
    // 添加影像/适量图
    // this.addImageLayers();
    store.state.setLoadFlag = true;
 
    // 数据请求初始化
    mapData.init();
    // var coffeeBeltRectangle = Cesium.Rectangle.fromDegrees(config.extend.minx, config.extend.miny, config.extend.maxx, config.extend.maxy);
    // Viewer.scene.globe.cartographicLimitRectangle = coffeeBeltRectangle;
    // 添加鼠标点击事件
    this.addHandlerClick();
    // 添加场景移动事件
    // this.addCameraChange();
  },
  addCameraChange() {
    const that = this;
    Viewer.camera.changed.addEventListener(() => {
      that.refreshViewRectangle();
    });
    Viewer.camera.moveStart.addEventListener(() => {
      that.refreshViewRectangle();
    });
    Viewer.camera.moveEnd.addEventListener(() => {
      that.refreshViewRectangle();
    });
  },
  refreshViewRectangle() {
    let params = {};
    const extent = config.extend;
    let extend = Viewer.camera.computeViewRectangle();
 
    // 三维开发模式
    if (extend) {
      params.maxx = Cesium.Math.toDegrees(extend.east);
      params.maxy = Cesium.Math.toDegrees(extend.north);
 
      params.minx = Cesium.Math.toDegrees(extend.west);
      params.miny = Cesium.Math.toDegrees(extend.south);
    } else {
      //二维开发模式
      let canvas = Viewer.scene.canvas;
      let upperLeft = new Cesium.Cartesian2(0, 0); //canvas左上角坐标转2d坐标
      let lowerRight = new Cesium.Cartesian2(canvas.clientWidth, canvas.clientHeight); //canvas右下角坐标转2d坐标
 
      let ellipsoid = Viewer.scene.globe.ellipsoid;
      let upperLeft3 = Viewer.camera.pickEllipsoid(upperLeft, ellipsoid); //2D转3D世界坐标
 
      let lowerRight3 = Viewer.camera.pickEllipsoid(lowerRight, ellipsoid); //2D转3D世界坐标
 
      let upperLeftCartographic = Viewer.scene.globe.ellipsoid.cartesianToCartographic(upperLeft3); //3D世界坐标转弧度
      let lowerRightCartographic = Viewer.scene.globe.ellipsoid.cartesianToCartographic(lowerRight3); //3D世界坐标转弧度
 
      let minx = Cesium.Math.toDegrees(upperLeftCartographic.longitude); //弧度转经纬度
      let maxx = Cesium.Math.toDegrees(lowerRightCartographic.longitude); //弧度转经纬度
 
      let miny = Cesium.Math.toDegrees(lowerRightCartographic.latitude); //弧度转经纬度
      let maxy = Cesium.Math.toDegrees(upperLeftCartographic.latitude); //弧度转经纬度
      params.minx = minx;
      params.maxx = maxx;
      params.miny = miny;
      params.maxy = maxy;
    }
  },
  addImageLayers() {
    // var mapUrl = config.mapServer;
    // earthCtrl.factory.createImageryLayer({
    //   sourceType: 'wmts',
    //   url: mapUrl.SLUrl,
    //   tileMatrixSetID: 'EPSG:4326',
    //   tilingScheme: new SmartEarth.Cesium.GeographicTilingScheme()
    // });
    // earthCtrl.factory.createImageryLayer({
    //   sourceType: 'wmts',
    //   url: mapUrl.YXUrl,
    //   tileMatrixSetID: 'EPSG:4326',
    //   tilingScheme: new SmartEarth.Cesium.GeographicTilingScheme()
    // });
    // Viewer.imageryLayers._layers[0].show = false;
    // Viewer.imageryLayers._layers[1].show = false;
  },
  addHandlerClick() {
    const handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas);
    // 处理用户输入事件
    handler.setInputAction(event => {
      var pick = Viewer.scene.pick(event.position); //拾取鼠标所在的entity
      if (Cesium.defined(pick)) {
        if (!pick.id._properties) return;
        const obj = mapData.listData.filter(res => {
          if (res.attributes.FID == pick.id._properties.FID) {
            return res;
          }
        });
        if (obj.length > 0) {
          var val_data = obj[0];
          store.state.setCellItem = val_data;
          const res = val_data.geometry;
          const judgeMentData = mapData.setJudgmentData(res);
          if (judgeMentData) {
            mapData.setMqpJump({
              x: res.coordinates[0],
              y: res.coordinates[1]
            });
            mapLayer.getlocationEntity(val_data);
          } else {
            showToast('该资产缺少坐标!');
          }
          mapMenu.setMenuChange('details');
        }
      }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
  }
};
export default mapView;