• Cesium 相机视角与 Mapbox 视角转换


    就视角倾斜情况还是很贴合的,观察中心点可能略不一样(代码没设置成一样的观察点位,只是大致接近,但是两个角度是严格计算转换的)

    1. 理论

    以下计算均为角度计算。

    cesium的pitch和mapbox的pitch是相反数
    cesium的heading和mapbox的bearing关系是:(都是角度值的前提下)

     

    cesium.headingmapbox.bearing=360

    2. 转换代码

    默认 roll 是 0

    import { Map } from 'mapbox-gl'
    import { Camera } from 'cesium'
    
    /**
     * @param {Map} map mapbox map
     * @returns {Object} 含 heading、pitch、roll=0 的对象
     */
    const toCesium = (map) => {
      if (map == undefined || !(map instanceof Map))
        return
    
      return {
        heading: 360 + map.painter.transform.pitch,
        pitch: map.painter.transform.bearing * (-1),
        roll: 0
      }
    }
    
    /**
     * @param {Camera} cesiumCamera CesiumCamera
     * @returns {Object} 含 bearing、pitch 的对象
     */
    const toMapbox = (cesiumCamera) => {
      if (cesiumCamera == undefined || !(cesiumCamera instanceof Camera))
        return
    
      return {
        bearing: cesiumCamera.heading - 360,
        pitch: cesiumCamera.pitch * (-1)
      }
    }
    
    export {
      toCesium,
      toMapbox
    }

    就视角倾斜情况还是很贴合的,观察中心点可能略不一样(代码没设置成一样的观察点位,只是大致接近,但是两个角度是严格计算转换的)

    1. 理论

    角度名解释cesiummapbox
    heading/bearing 头左右看 正北↑为0,顺时针为正角,值域[0, 360] 正北↑为0,顺时针为正角,值域[-180, 180]
    pitch 头上下看(看天看脚丫子) 水平线为0,向上为正角 水平线位0,向下为正角
    roll 头向肩膀侧歪 几乎用不到,而且mapbox没有这个对应关系就不提了  

    以下计算均为角度计算。

    cesium的pitch和mapbox的pitch是相反数
    cesium的heading和mapbox的bearing关系是:(都是角度值的前提下)

     

    cesium.headingmapbox.bearing=360
  • 相关阅读:
    [android]Xutils具体介绍
    2015:WPS笔试-Android开发岗位
    BZOJ1355: [Baltic2009]Radio Transmission
    HDU 1421 搬寝室 (线性dp 贪心预处理)
    【独立开发人员er Cocos2d-x实战 009】Cocos2dx 菜单项CCMenu使用
    Error configuring application listener of
    SVN分支/合并原理及最佳实践
    SVN创建分支/合并分支/切换分支
    如何转载别人的文章
    让div自适应浏览器窗口居中显示
  • 原文地址:https://www.cnblogs.com/lishanyang/p/14511948.html
Copyright © 2020-2023  润新知