cesium相机视角跳转定位方法汇总

这篇具有很好参考价值的文章主要介绍了cesium相机视角跳转定位方法汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       下面汇总的相机视角跳转方法有很多种,都是根据某一个经纬度高程坐标[x,y,z],Entity实体或者矩形四至范围[west , south , east , north]作为视图跳转到目标范围的中心,然后在该位置上设置相机相对的偏移量,这个偏移量主要是设置相机的偏航角、航向角和翻滚角或者椭球范围,请大家根据实际情况选择合适的相机视角跳转方法 。以下方法都不适合一般的运动轨迹视角跟随。
viewer.trackedEntity =entity    //注意,这个方法一般用于动画轨迹视图跟踪。此时视图可以旋转缩放,不能平移,因为实体对象会一直保持在当前视图中心。在一些极端情况下会出些一些bug,比如缩放到距离实体很近的时候,实体运动会拖影卡顿,并且可以平移地图使得实体移除到视图之外,建议在远距离跟踪的时候使用该方法。
import * as Cesium from "cesium";

/**
 * 相机移动到某一个坐标或者矩形范围内
 * @param {Cesium.Viewer} viewer -地图对象
 * @param {Object} option -参数对象
 * @param {Number} option.duration -视图跳转时间(单位/s)
 * @param {String} option.type -跳转目标类型方式,‘point’:相机移动到某一个坐标;‘rectangle’:相机移动到矩形范围内
 * @param {Array} option.xyz -跳转目标类型方式:‘point’,则xyz为[x,y,z]
 * @param {Array} option.wsen -跳转目标类型方式:‘rectangle’,则wsen为[west , south , east , north],(单位/度)
 * @param {Number} option.heading -相机航向角
 * @param {Number} option.pitch -相机俯仰角
 * @param {Number} option.roll -相机翻滚角
 */
export function cameraFlyTo(viewer, option) {
  let destination;
  if ((option.type == "point")) {
    destination = Cesium.Cartesian3.fromDegrees(...option.xyz);
  } else if ((option.type == "rectangle")) {
    destination = Cesium.Rectangle.fromDegrees(...option.ewsn);
  }
  viewer.camera.flyTo({
    duration: option.duration,
    destination,
    orientation: {
      heading: Cesium.Math.toRadians(option.heading),
      pitch: Cesium.Math.toRadians(option.pitch),
      roll: option.roll,
    },
  });
}

/**
 * 相机移动到某一坐标点上,可以用于视角跟踪实体对象,但是视角是以坐标点为中心固定的,不可以平移
 * 适合视角跟随的情况:实时运动轨迹,可以获取前后两个点,实时计算偏北角(航向角)
 * @param {Cesium.Viewer} viewer -地图对象
 * @param {Object} option -参数对象
 * @param {Array} option.xyz -跳转椭球体中心坐标数组[x,y,z]
 * @param {Number} option.heading -相机航向角
 * @param {Number} option.pitch -相机俯仰角
 * @param {Number} option.range -以椭球体中心坐标为中心的的范围大小(单位/m)
 */
export function cameraLookAt(viewer, option) {
  viewer.camera.lookAt(
    Cesium.Cartesian3.fromDegrees(...option.xyz),
    new Cesium.HeadingPitchRange(
      Cesium.Math.toRadians(option.heading),
      Cesium.Math.toRadians(option.pitch),
      option.range
    )
  );
}

/**
 * 相机移动到某一坐标点上,不可用于视角跟踪实体对象
 * @param {Cesium.Viewer} viewer -地图对象
 * @param {Object} option -参数对象
 * @param {Array} option.xyz -跳转椭球体中心坐标数组[x,y,z]
 * @param {Number} option.duration -视图跳转时间(单位/s)
 * @param {Number} option.heading -相机航向角
 * @param {Number} option.pitch -相机俯仰角
 * @param {Number} option.roll -相机翻滚角
 */
export function cameraSetView(viewer, option) {
  viewer.camera.setView({
    destination: Cesium.Cartesian3.fromDegrees(...option.xyz),
    orientation: {
      heading: Cesium.Math.toRadians(option.heading),
      pitch: Cesium.Math.toRadians(option.pitch),
      roll: option.roll,
    },
  });
}

/**
 * 相机视图移动到移到某一个坐标范围内,注意可以用来定位用,不可用于视角跟踪实体对象!!!!
 * @param {Cesium.Viewer} viewer -地图对象
 * @param {Object} option -参数对象
 * @param {Array} option.xyz -跳转椭球体中心坐标数组[x,y,z]
 * @param {Number} option.radius -跳转椭球体半径(单位/m)
 * @param {Number} option.duration -视图跳转时间(单位/s)
 * @param {Number} option.heading -相机航向角
 * @param {Number} option.pitch -相机俯仰角
 * @param {Number} option.range -以跳转坐标为中心的的范围大小(单位/m)
 */
export function cameraflyToBoundingSphere(viewer, option) {
  viewer.camera.flyToBoundingSphere(
    new Cesium.BoundingSphere(
      Cesium.Cartesian3.fromDegrees(...option.xyz),
      option.radius
    ),
    {
      duration: option.duration,
      offset: {
        heading: Cesium.Math.toRadians(option.heading),
        pitch: Cesium.Math.toRadians(option.pitch),
        range: option.range,
      },
      complete: function () {
        console.log("飞行完成!");
      },
      cancel: function () {
        console.log("飞行取消!");
      },
    }
  );
}

/**
 * 相机移动到某一entity实体上 === viewer.zoomTo(entity),不可用于视角跟踪实体对象
 * @param {Cesium.Viewer} viewer -地图对象
 * @param {Object} option -参数对象
 * @param {Object} option.target -target可以是单个或者多个entity对象,以及各自cesium支持的图层,不能是坐标
 * @param {Number} option.duration -视图跳转时间(单位/s)
 * @param {Number} option.heading -相机航向角
 * @param {Number} option.pitch -相机俯仰角
 * @param {Number} option.range -以entity为中心的的范围大小(单位/m)
 */
export function viewerFlyTo(viewer, option) {
  viewer.flyTo(option.target, {
    duration: option.duration,
    offset: {
      heading: Cesium.Math.toRadians(option.heading),
      pitch: Cesium.Math.toRadians(option.pitch),
      range: option.range,
    },
    // 视角跳转最大高度(一般不用)
    // maximumHeight: 20000,
  });
}

文章来源地址https://www.toymoban.com/news/detail-856758.html

到了这里,关于cesium相机视角跳转定位方法汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Cesium 视角切换到实体(entity)/ dataSources / 定位到模型(3DTiles)

    Cesium 的 camera.flyTo 是不可以直接飞到实体的。但是 viewer.flyTo 可以直接飞到实体。 viewer.flyTo (target, options) :将相机飞到提供的实体、实体或数据源。如果数据源仍在加载过程中或可视化仍在加载中,则此方法在执行飞行之前等待数据准备好 viewer.flyTo 的 target` 可以是:要查看

    2024年02月11日
    浏览(30)
  • Cesium 问题:加载 gltf 格式的模型之后太小,如何让相机视角拉近

    刚加载的模型太小,如何拉近视角放大 在这里有两种方式进行拉近视角, 一种是点击复位进行视角拉近 一种是刚加载就直接拉近视角

    2024年02月22日
    浏览(50)
  • Cesium屏幕中心、相机坐标和距离计算

    moveRotation方法参数中第一个参数step是移动步长,第二个参数i是判断是否是俯仰角还是航向角进行绕中心点进行翻滚,entity可以另外分离出来做一个方法,这样避免每次调用moveRotation方法都生成一个entity覆盖物。 该方法的参数distance接受正负数,对应上升和下降

    2024年01月18日
    浏览(28)
  • 从不同场景地图的视角对单目相机进行重定位的方案综述

    文章:A Survey on Monocular Re-Localization: From the Perspective of Scene Map Representation 作者:Jinyu Miaoa, Kun Jianga, Tuopu Wena, Yunlong Wanga, Peijing Ji 编辑:点云PCL 欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。 公众号致力于点云处理,SLAM,三维

    2024年01月19日
    浏览(33)
  • 齐次坐标变换的理解以及在无人机相机定位坐标系转换中的应用

    4*4矩阵的右边三个数表示平移,如果原来的向量u的w=0,那么就是u+(ai+bj+ck) 对应xyz三个轴的循环变换,注意负号的位置 用描述空间一点的变换方法来描述物体在空间的位置和方向。 先变换的矩阵乘在右边。 A p = B p + A p B o {}^{A}p={}^{B}p+{}^{A}p_{B_{o}} A p = B p + A p B o ​ ​ 从

    2024年04月15日
    浏览(49)
  • UE4 运行后视角切换到Cinecamera相机的三种方法

    目的:解决运行后Cinecamera相机无法自动切换到玩家视角 方法: 1.调用这个蓝图节点,这个最简单(适合只考虑切换视角的需求) 2.制作并播放关卡序列,这个有点麻烦(适合需要做关卡序列动画) 3.创建GameMode和Pawn(添加Cinecamera组件),选择“玩家0”(适合需要使用自定义

    2024年02月13日
    浏览(30)
  • Matlab相机标定方法及主要参数含义,坐标变换过程

    网上有很多关于matlab相机标定的资料,但找了很久没有相应的参数说明:怎样利用获得参数从世界坐标系变换到图像坐标系,所以这里为了记录一下,也方便新人理解。 首先由图像到参数的获取部分在网上有很多资料,也很容易,在这就不再赘述,我利用的标定板的格子大小

    2024年02月05日
    浏览(30)
  • Selenium常用元素定位方法汇总

    目录 一、webdriver定位方法 1、xpath基本定位用法 2、xpath相对路径/绝对路径定位 3、xpath文本、模糊、逻辑定位 1、 id 定位 2、 name定位 3、 class定位 4、 link定位 --精准定位 5、 partial_link定位 --模糊定位 6、 tag_name定位 --标签名定位 找到页面上所有标签名为input的标签,返回一个列

    2024年02月02日
    浏览(36)
  • 4种方法实现html 页面内锚点定位及跳转

    不知道你有没有遇到这样的需求:锚点定位?进入页面某个元素需要出现在可视区?…这一类的需求归根结底就是处理元素与可视区域的关系。我接触了很多前端小伙伴,实现的方式有各种各样的,比如使用 scrollTop、监听滚动等等,这也是很多小伙伴第一个想到的。 今天我

    2024年02月11日
    浏览(23)
  • 解决cesium中3dtiles模型随视角移动

    我们在使用cesium的时候有时会遇到一个问题就是模型导入之后,模型没有固定住会随着视角的变化而移动,研究发现模型在地底下。我认为是建模的问题有可能是建模软件使用的坐标不是wgs84导致高程不一的原因,但我没试过。 解决方案是:1.打开深度检测 2.手动把模型提上

    2024年02月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包