• cesium相机视角跳转和缩放至entity方法汇总


           下面汇总的相机视角跳转方法有很多种,都是根据某一个经纬度高程坐标[x,y,z],Entity实体或者矩形四至范围[west , south , east , north]作为视图跳转到目标范围的中心,然后在该位置上设置相机相对的偏移量,这个偏移量主要是设置相机的偏航角、航向角和翻滚角或者椭球范围,请大家根据实际情况选择合适的相机视角跳转方法 。以下方法都不适合一般的运动轨迹视角跟随。
    viewer.trackedEntity =entity    //注意,这个方法一般用于动画轨迹视图跟踪。此时视图可以旋转缩放,不能平移,因为实体对象会一直保持在当前视图中心。在一些极端情况下会出些一些bug,比如缩放到距离实体很近的时候,实体运动会拖影卡顿,并且可以平移地图使得实体移除到视图之外,建议在远距离跟踪的时候使用该方法。
    1. import * as Cesium from "cesium";
    2. /**
    3. * 相机移动到某一个坐标或者矩形范围内
    4. * @param {Cesium.Viewer} viewer -地图对象
    5. * @param {Object} option -参数对象
    6. * @param {Number} option.duration -视图跳转时间(单位/s)
    7. * @param {String} option.type -跳转目标类型方式,‘point’:相机移动到某一个坐标;‘rectangle’:相机移动到矩形范围内
    8. * @param {Array} option.xyz -跳转目标类型方式:‘point’,则xyz为[x,y,z]
    9. * @param {Array} option.wsen -跳转目标类型方式:‘rectangle’,则wsen为[west , south , east , north],(单位/度)
    10. * @param {Number} option.heading -相机航向角
    11. * @param {Number} option.pitch -相机俯仰角
    12. * @param {Number} option.roll -相机翻滚角
    13. */
    14. export function cameraFlyTo(viewer, option) {
    15. let destination;
    16. if ((option.type = "point")) {
    17. destination = Cesium.Cartesian3.fromDegrees(...option.xyz);
    18. } else if ((option.type = "rectangle")) {
    19. destination = Cesium.Cartesian3.fromDegrees(...option.ewsn);
    20. }
    21. viewer.camera.flyTo({
    22. duration: option.duration,
    23. destination,
    24. orientation: {
    25. heading: Cesium.Math.toRadians(option.heading),
    26. pitch: Cesium.Math.toRadians(option.pitch),
    27. roll: option.roll,
    28. },
    29. });
    30. }
    31. /**
    32. * 相机移动到某一坐标点上,可以用于视角跟踪实体对象,但是视角是固定的,
    33. * 适合视角跟随的情况:实时运动轨迹,可以获取前后两个点,实时计算偏北角(航向角)
    34. * @param {Cesium.Viewer} viewer -地图对象
    35. * @param {Object} option -参数对象
    36. * @param {Array} option.xyz -跳转椭球体中心坐标数组[x,y,z]
    37. * @param {Number} option.heading -相机航向角
    38. * @param {Number} option.pitch -相机俯仰角
    39. * @param {Number} option.range -以椭球体中心坐标为中心的的范围大小(单位/m)
    40. */
    41. export function cameraLookAt(viewer, option) {
    42. viewer.camera.lookAt(
    43. Cesium.Cartesian3.fromDegrees(...option.xyz),
    44. new Cesium.HeadingPitchRange(
    45. Cesium.Math.toRadians(option.heading),
    46. Cesium.Math.toRadians(option.pitch),
    47. option.range
    48. )
    49. );
    50. }
    51. /**
    52. * 相机移动到某一坐标点上,不可用于视角跟踪实体对象
    53. * @param {Cesium.Viewer} viewer -地图对象
    54. * @param {Object} option -参数对象
    55. * @param {Array} option.xyz -跳转椭球体中心坐标数组[x,y,z]
    56. * @param {Number} option.duration -视图跳转时间(单位/s)
    57. * @param {Number} option.heading -相机航向角
    58. * @param {Number} option.pitch -相机俯仰角
    59. * @param {Number} option.roll -相机翻滚角
    60. */
    61. export function cameraSetView(viewer, option) {
    62. viewer.camera.setView({
    63. destination: Cesium.Cartesian3.fromDegrees(...option.xyz),
    64. orientation: {
    65. heading: Cesium.Math.toRadians(option.heading),
    66. pitch: Cesium.Math.toRadians(option.pitch),
    67. roll: option.roll,
    68. },
    69. });
    70. }
    71. /**
    72. * 相机视图移动到移到某一个坐标范围内,注意可以用来定位用,不可用于视角跟踪实体对象!!!!
    73. * @param {Cesium.Viewer} viewer -地图对象
    74. * @param {Object} option -参数对象
    75. * @param {Array} option.xyz -跳转椭球体中心坐标数组[x,y,z]
    76. * @param {Number} option.radius -跳转椭球体半径(单位/m)
    77. * @param {Number} option.duration -视图跳转时间(单位/s)
    78. * @param {Number} option.heading -相机航向角
    79. * @param {Number} option.pitch -相机俯仰角
    80. * @param {Number} option.range -以跳转坐标为中心的的范围大小(单位/m)
    81. */
    82. export function cameraflyToBoundingSphere(viewer, option) {
    83. viewer.camera.flyToBoundingSphere(
    84. new Cesium.BoundingSphere(
    85. Cesium.Cartesian3.fromDegrees(...option.xyz),
    86. option.radius
    87. ),
    88. {
    89. duration: option.duration,
    90. offset: {
    91. heading: Cesium.Math.toRadians(option.heading),
    92. pitch: Cesium.Math.toRadians(option.pitch),
    93. range: option.range,
    94. },
    95. complete: function () {
    96. console.log("飞行完成!");
    97. },
    98. cancel: function () {
    99. console.log("飞行取消!");
    100. },
    101. }
    102. );
    103. }
    104. /**
    105. * 相机移动到某一entity实体上 === viewer.zoomTo(entity),不可用于视角跟踪实体对象
    106. * @param {Cesium.Viewer} viewer -地图对象
    107. * @param {Object} option -参数对象
    108. * @param {Object} option.target -target可以是单个或者多个entity对象,以及各自cesium支持的图层,不能是坐标
    109. * @param {Number} option.duration -视图跳转时间(单位/s)
    110. * @param {Number} option.heading -相机航向角
    111. * @param {Number} option.pitch -相机俯仰角
    112. * @param {Number} option.range -以entity为中心的的范围大小(单位/m)
    113. */
    114. export function viewerFlyTo(viewer, option) {
    115. viewer.flyTo(option.target, {
    116. duration: option.duration,
    117. offset: {
    118. heading: Cesium.Math.toRadians(option.heading),
    119. pitch: Cesium.Math.toRadians(option.pitch),
    120. range: option.range,
    121. },
    122. // 视角跳转最大高度(一般不用)
    123. // maximumHeight: 20000,
    124. });
    125. }

  • 相关阅读:
    C#实现最大公约数和最小公倍数
    银河麒麟V10 + 飞腾D2000(ARM64) 安装Qt
    C#WPF通知更改公共类使用实例
    【图解】JavaScript加法问题
    开源模型应用落地-LangChain高阶-事件回调-合规校验
    洛谷P1058 立体图
    【word技巧】word文档如何转换为ppt文件?
    Linux 网络虚拟化 Macvlan(基于物理网络接口虚拟网络接口) 认知
    玩全栈,做自己喜欢做的事,写自己喜欢写的代码
    深入浅出学Verilog--数据类型
  • 原文地址:https://blog.csdn.net/qq_48273925/article/details/136325028