首页 / 浏览问题 / 三维GIS / 问题详情
有关二维和三维的地图缩放问题
32EXP 2017年10月20日
我现在在做类似于二三维漫游的功能,但是我没有完全用示例的代码,而是根据获取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);

2 个回答

您好,你是在用 3d 插件客户端吗
匿名
2017年10月20日
您好,根据您的描述,推测您切换二三维的时候是不是对地图做了缩放操作,建议您调试代码仔细看看。
3,389EXP 2017年10月20日
没有对地图进行缩放操作,从一开始的加载页面开始,鼠标就一直在切换按钮上,没有碰到地图
...