在系统开发中,有时会碰到二三维联动的功能开发,具体就是二维地图移动时,三维移动随着移动,三维地图移动,二维地图也变化。

二维地图的视角,是一个从上往下直立观看的方向,三维地图可以不断的变化的观看方向,所以,在联动的过程中,二维控制三维时,三维的视角只能保持一个直立向下的方向,才能和二维保持较好的一致。

二维地图在移动的过程中,可以获得地图的四至坐标,即XMax,XMin,YMax,YMin,根据此范围,可以在TE中计算出一个大致的范围,进行地图定位。

具体的代码实现如下(C#):

//XMax,XMin,YMax,YMin为4个坐标

      double pcenterX = (XMax+XMin) / 2;

      double pcenterY = (YMax +YMin) / 2;

      //计算地图的横向距离

     double pdistance = SGWorld.CoordServices.GetDistance(XMaxYMaxXMin,YMax);

    //根据横向观看距离和TE的观看范围,计算垂直观看高度

    double pviewHeight = pdistance / 2 / Math.Tan(Math.PI *      SGWorld.Navigate.FieldOfView / 360);
//根据中心点和观看高度计算观看位置

    var newPos = SGWorld.Creator.CreatePosition(pcenterX, pcenterY, pviewHeight, AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE, 0, -89, 0, 0);

//定位到新位置

 SGWorld61.Navigate.SetPosition(newPos);


从三维地图坐标转换到二维地图的四至坐标,有时会根据观看角度不同,有兴趣者可以自己写一下。


技术交流群:665060698

微信公众号:

二维地图Extent转换TE观看位置算法_第1张图片