我现在在做类似于二三维漫游的功能,但是我没有完全用示例的代码,而是根据获取bounds来做的,二维:map.zoomToExtent(boundsToMap, false);,三维:scene.get_flyingOperator().flyToBounds(boundsToScene),同一个屏幕全屏同时加载二维地图和三维地图,根据按钮控制二维地图和三维地图的显示隐藏,我的问题是:每次在二维和三维切换时地图都在往全景缩小,这是怎么回事?
这是我用到的代码:
查看二维时:boundsToMap是全局变量,var boundsToMap = null;
SceneToMap();
// 二维三维切换按键
$(".sanwei").css("display", "none");
$(".erwei").css("display", "block");
map.zoomToExtent(boundsToMap, false);
function SceneToMap(){
//获取场景相机
var camera = scene.get_camera();
//获取场景高度
var altitude = camera.get_altitude();
//获取经度
var longitude = camera.get_longitude();
//获取纬度
var latitude = camera.get_latitude();
//根据给定的场景高度计算地图中显示范围的宽度
var size = _calculateSizeFromAltitude(altitude);
size = size * 0.5;
//设置地图显示范围
var bounds = new SuperMap.Bounds(longitude - size, latitude - size, longitude + size, latitude + size);
// map.zoomToExtent(bounds, false);
boundsToMap = bounds;
camera.set_heading(0);
sceneControl.get_scene().set_camera(camera);
}
function _calculateSizeFromAltitude(altitude) {
var _PI = 3.1415926;
var _earthRadius = 6378137;
var size;
if (altitude >= _earthRadius) {//当场景高度大于可全幅显示整球的高度时
var ratio = (altitude + _earthRadius) * 0.5;
size = 120 * ratio / _earthRadius
}
else {//当场景高度小于可全幅显示整球的高度时,即无法看到整球时
var tan30 = Math.tan(_PI / 6);
//设置方程组的a,b,c
var a = (Math.pow(tan30, 2) + 1) * Math.pow(_earthRadius, 2);
var b = -2 * (_earthRadius + altitude) * _earthRadius * Math.pow(tan30, 2);
var c = Math.pow(tan30, 2) * Math.pow(_earthRadius + altitude, 2) - Math.pow(_earthRadius, 2.0);
//解一元二次方程,取锐角,因此余弦值较大
var cosd = (-b + Math.sqrt(Math.pow(b, 2) - 4 * a * c)) / (2 * a);
var d = Math.acos(cosd);
var widthd = 2 * d * _earthRadius;
size = (widthd / (_PI * _earthRadius)) * 180;
}
return size;
}
查看三维时:boundsToScene 是全局变量,var boundsToScene = null;
boundsToScene = map.getExtent();
$(".erwei").css("display", "none");
$(".sanwei").css("display", "block");
scene.get_flyingOperator().flyToBounds(boundsToScene);