Cesium 獲取屏幕窗口經緯度範圍(2D和3D)

背景:

由於entity實體過多,而又要一次性加載,所以用聚合(後臺聚合),前端cesium也可以聚合,但是由於請求後臺時數據量太大,光請求時間都很長。不能忍受,所以改爲後臺聚合。後臺聚合用的是pg的空間函數。前端去後臺請求時  需要要攜帶當前屏幕所在地理範圍參數 

獲取當前屏幕所在地理範圍

getViewExtend() {
      let params = {};
      let extend = viewer.camera.computeViewRectangle();
      if (typeof extend === "undefined") {
        //2D下會可能拾取不到座標,extend返回undefined,所以做以下轉換
        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世界座標

        var upperLeftCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(
          upperLeft3
        );//3D世界座標轉弧度
        var 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);//弧度轉經緯度

        console.log("經度:" + minx + "----" + maxx);
        console.log("緯度:" + miny + "----" + maxy);

        params.minx = minx;
        params.maxx = maxx;
        params.miny = miny;
        params.maxy = maxy;
      } else {
        //3D獲取方式
        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);
      }
      return params;//返回屏幕所在經緯度範圍
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章