首页 / 浏览问题 / 三维GIS / 问题详情
3DWebGL中能否获取垂直视角下地图和bounds
252EXP 2021年08月25日
如题。现在需要实现2d3d地图互相切换时,保留切换前的地图的位置和缩尺的效果。

地图中心点已经保留成功了,将2d地图的中心点和3d地图的相机位置联动就好

但3d场景中没有比例尺,所以缩尺不知道应该如何保留。请问有没有方法,可以获取当前三维场景中的bounds

1个回答

您好,可以根据二维里面的bounds来换算出三维里面相机对应的altitude;可以参考代码:

function _calculateAltitudeFromBounds(bounds) {
		var _PI = 3.1415926;
		var _earthRadius = 6378137;
		var altitude = _earthRadius;
		var boundsWidth = bounds._northEast.lng - bounds._southWest.lng;
		//bounds._northEast.lng - bounds._southWest.lat
		if(boundsWidth >= 120) {
			altitude = (_earthRadius * boundsWidth) / 60 - _earthRadius;
		} else if(boundsWidth != 0) {
			var angle1 = (boundsWidth / 360) * _PI;
			var height = Math.sin(angle1) * _earthRadius;
			var a = height / Math.tan(angle1);
			var b = height / Math.tan(_PI / 6);
			altitude = a + b - _earthRadius;
		}
		return altitude;
	}

康鑫
1
6,077EXP 2021年08月25日
您好,二维转三维这样做确实可以实现.非常感谢

请问从三维转回二维时,应该怎样逆推这个算式获取bounds,从而通过iClient获得最接近的缩放等级呢
var rectangle = viewer.camera.computeViewRectangle();
// 弧度转为经纬度,west为左(西)侧边界的经度,以下类推
var west = (rectangle.west / Math.PI) * 180;
var north = (rectangle.north / Math.PI) * 180;
var east = (rectangle.east / Math.PI) * 180;
var south = (rectangle.south / Math.PI) * 180;

map.fitBounds([
 [north, east],
 [south, west]
], false);

您用这个看看

多谢,可以了
...