const 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世界坐標 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) //弧度轉經緯度 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 } // 獲取四至坐標 const { minx, miny, maxx, maxy } = getViewExtend() // bbox const bbox = [minx, miny, maxx, maxy].join(',') console.log(bbox)
