Cesium 相机视角与 Mapbox 视角转换

4 篇文章 0 订阅
3 篇文章 0 订阅

pre. 先看成果

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

1. 理论

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

以下计算均为角度计算。

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

cesium.heading−mapbox.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
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值