获取当前视图区域范围

1.获取当前视图区域范围

// 获取当前camera视野区域

let rectangle = window.viewer.scene.camera.computeViewRectangle();

2.获取当前视图区域范围

getCurrentExtent() {

// 范围对象

var extent = {};

// 得到当前三维场景

var scene = window.viewer.scene;

// 得到当前三维场景的椭球体

var ellipsoid = scene.globe.ellipsoid;

var canvas = scene.canvas;

// canvas左上角

var car3_lt = window.viewer.camera.pickEllipsoid(new NF.Cartesian2(0,0), ellipsoid);

// canvas右下角

var car3_rb = window.viewer.camera.pickEllipsoid(new NF.Cartesian2(canvas.width,canvas.height), ellipsoid);

// 当canvas左上角和右下角全部在椭球体上

if (car3_lt && car3_rb) {

var carto_lt = ellipsoid.cartesianToCartographic(car3_lt);

var carto_rb = ellipsoid.cartesianToCartographic(car3_rb);

extent.xmin = NF.Math.toDegrees(carto_lt.longitude);

extent.ymax = NF.Math.toDegrees(carto_lt.latitude);

extent.xmax = NF.Math.toDegrees(carto_rb.longitude);

extent.ymin = NF.Math.toDegrees(carto_rb.latitude);

}

// 当canvas左上角不在但右下角在椭球体上

else if (!car3_lt && car3_rb) {

var car3_lt2 = null;

var yIndex = 0;

do {

// 这里每次10像素递加,一是10像素相差不大,二是为了提高程序运行效率

yIndex <= canvas.height ? yIndex += 10 : canvas.height;

car3_lt2 = window.viewer.camera.pickEllipsoid(new NF.Cartesian2(0,yIndex), ellipsoid);

}while (!car3_lt2);

var carto_lt2 = ellipsoid.cartesianToCartographic(car3_lt2);

var carto_rb2 = ellipsoid.cartesianToCartographic(car3_rb);

extent.xmin = NF.Math.toDegrees(carto_lt2.longitude);

extent.ymax = NF.Math.toDegrees(carto_lt2.latitude);

extent.xmax = NF.Math.toDegrees(carto_rb2.longitude);

extent.ymin = NF.Math.toDegrees(carto_rb2.latitude);

}

// 获取高度

extent.height = Math.ceil(window.viewer.camera.positionCartographic.height);

return extent;

},

你可能感兴趣的:(Cesiumjs)