本文介绍: Cesium飞行定位,主要通过Viewer、Camera两个实现的。其中这三个方法会有一个飞行动画效果,所以会有飞行持续时间参数duration默认是3秒。

Cesium的飞行定位,主要通过Viewer、Camera两个实现的。其中viewer.flyTo()、camera.flyTo()、camera.flyToBoundingSphere()这三个方法会有一个飞行动画的效果,所以会有飞行持续时间参数duration默认是3秒。

一、viewer

flyTo

targetEntity | Array.&lt; Entity &gt; | EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud | Promise.&lt;( Entity |Array.< Entity &gt;| EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud )&gt;

optionsduration(3soffsetHeadingPitchRange

zoomTo

targetEntity | Array.< Entity > | EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud | Promise.<( Entity |Array.< Entity >| EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud )>

offsetHeadingPitchRange)

1.1 flyTo (target, options ) → Promise.<Boolean>

相机移到提供的一个多个实体数据源。如果数据源仍在加载过程中,或者可视化仍在加载中,此方法执行飞行之前等待数据准备就绪

偏移量是在以边界中心中心局部东北向上参考框中的航向/俯仰/范围。航向角和俯仰角在局部的北北向上参考系中定义。航向是从y轴到x轴的角度间距是从xy平面开始的旋转。正螺距角度平面上方。负俯仰角在平面下方。范围是距中心距离。如果范围是零,则将计算范围以使整个边界球都可见。

在2D模式下,必须有一个视图摄像机将被放置目标上方并向下看。上方的高度目标将是范围。航向将根据偏移量确定。如果标题不能根据偏移量确定,航向将为北。

参数

Name

Type

target

Entity | Array.< Entity > | EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud | Promise.<( Entity |Array.< Entity >| EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud )>

实体实体阵列,实体集合数据源,要查看的Cesium3DTileset点云图像层。您还可以传递一个可以解决上述类型之一的承诺。

options

Object

可选

options具有以下属性对象:

名称

类型

默认

说明

duration

数字

3.0

可选飞行持续时间(以秒为单位)。

maximumHeight

数字

可选行高峰时的最大高度

offset

HeadingPitchRange

可选在局部东北朝上的参考框中,距目标偏移量

Returns:

如果飞行成功则解析true的承诺,如果当前未在场景可视化目标取消飞行,则为false的承诺。 //TODO:清理实体提及

1.2 zoomTo (target, offset ) → Promise.<Boolean>

异步设置摄像机查看提供的一个或多个实体或数据源。如果数据源仍在加载过程中,或者可视化仍在加载中,此方法执行缩放之前等待数据准备就绪

偏移量是在以边界中心为中心的局部东北向上参考框中的航向/俯仰/范围。航向角和俯仰角在局部的北北向上参考系中定义。航向是从y轴到x轴的角度间距是从xy平面开始的旋转。正螺距角度平面上方。负俯仰角在平面下方。范围是距中心的距离。如果范围是零,则将计算范围以使整个边界球都可见。

在2D模式下,必须有一个俯视图摄像机将被放置目标上方并向下看。上方的高度目标将是范围。航向将根据偏移量确定。如果标题不能根据偏移确定,航向将为北。

参数

Name

Type

Description

target

Entity | Array.< Entity > | EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud | Promise.<( Entity |Array.< Entity >| EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud )>

实体,实体阵列,实体集合数据源,要查看的Cesium3DTileset,点云图像层。您还可以传递一个可以解决上述类型之一的承诺。

offset

HeadingPitchRange

可选在局部东北向上参考系中,距实体中心的偏移量。

Returns:

一个Promise,如果缩放成功,则解析true;如果当前未在场景可视化目标,或者取消了缩放,则为false

二、camera

2.1 flyTo (options)

相机当前位置移动到新位置

参数

Name

Type

Description

destination

Cartesian3 | Rectangle

摄像机在WGS84(世界)坐标中的最终位置或从上向下视图中可见的矩形

orientation

Object

可选包含方向向上属性或航向,俯仰和横滚属性对象。默认情况下,方向指向在3D中朝向帧中心,在哥伦布视图中沿负z方向向上方向指向3D局部正北哥伦布视图中的y方向。在无限滚动模式下,二维使用方向

duration

Number

可选飞行持续时间(以秒为单位)。如果省略,Cesium会尝试根据航班飞行的距离来计算理想持续时间

complete

Camera~FlightCompleteCallback

可选飞行结束执行功能

cancel

Camera~FlightCancelledCallback

可选取消航班后执行功能

endTransform

Matrix4

可选表示飞行完成相机将位于的参考帧的变换矩阵

maximumHeight

Number

可选行高峰时的最大高度

pitchAdjustHeight

Number

可选如果相机的飞行角度高于该值,请在飞行过程中调整俯仰角度以向下看,并将地球保持在视口中。

flyOverLongitude

Number

可选地球上2点之间总是有两种方法。此选项会迫使相机选择战斗方向以在该经度上飞行。

flyOverLongitudeWeight

Number

可选仅在通过flyOverLongitude指定的lon上飞过,只要该方式时间不超过flyOverLongitudeWeight的短途时间

convert

Boolean

可选是否目的地从世界坐标转换为场景坐标(仅在不使用3D时相关)。默认为 true

easingFunction

EasingFunction | EasingFunction~Callback

可选控制在飞行过程中如何插值时间

Throws:

Example:

// 1. Fly to a position with a top-down view
viewer.camera.flyTo({
    destination : Cesium.Cartesian3.fromDegrees(-117.16,32.71,15000.0)
});

// 2. Fly to a Rectangle with a top-down view
viewer.camera.flyTo({
    destination : Cesium.Rectangle.fromDegrees(west, south, east, north)
});

// 3. Fly to a position with an orientation using unit vectors.
viewer.camera.flyTo({
    destination : Cesium.Cartesian3.fromDegrees(-122.19,46.25,5000.0),
    orientation :{
        direction :newCesium.Cartesian3(-0.04231243104240401,-0.20123236049443421,-0.97862924300734),
        up :newCesium.Cartesian3(-0.47934589305293746,-0.8553216253114552,0.1966022179118339)
    }
});

// 4. Fly to a position with an orientation using heading, pitch and roll.
viewer.camera.flyTo({
    destination : Cesium.Cartesian3.fromDegrees(-122.19,46.25,5000.0),
    orientation :{
        heading : Cesium.Math.toRadians(175.0),
        pitch : Cesium.Math.toRadians(-35.0),
        roll :0.0
   }
   });

2.2 flyToBoundingSphere (boundingSphere, options )

相机移到当前视图包含所提供的包围球的位置

偏移是在以边界球的中心为中心的局部东-北-上参考系中的航向/俯仰/范围。航向角和俯仰角在局部的北北向上参考系中定义。航向是从y轴到x轴的角度。间距是从xy平面开始的旋转。正螺距角度在平面下方。负俯仰角在平面上方。范围是距中心的距离。如果范围是零,则将计算范围以使整个边界球都可见。

在2D和Columbus视图中,必须有一个俯视图。摄像机将被放置目标上方并向下看。上方的高度目标将是范围。标题将与当地北部对齐

参数

Name

Type

Description

boundingSphere

BoundingSphere

查看的边界球,以世界坐标表示。

options

Object

可选具有以下属性对象:

名称

类型

说明

duration

数字

可选飞行持续时间(以秒为单位)。如果省略,Cesium会尝试根据航班飞行的距离来计算理想持续时间。

offset

HeadingPitchRange

可选在局部东北朝上的参考框中,距目标的偏移量。

complete

Camera〜FlightCompleteCallback

可选飞行结束执行功能

cancel

Camera〜FlightCancelledCallback

可选取消航班后执行功能

endTransform

Matrix4

可选表示飞行完成相机将位于的参考帧的变换矩阵

maximumHeight

数字

可选行高峰时的最大高度

pitchAdjustHeight

数字

可选如果相机的飞行角度高于该值,请在飞行过程中调整俯仰角度以向下看,并将地球保持在视口中。

flyOverLongitude

数字

可选地球上2点之间总是有两种方法。此选项会迫使相机选择战斗方向以在该经度上飞行。

flyOverLongitudeWeight

数字

可选仅在通过flyOverLongitude指定的lon上飞过,只要该方式的时间不超过flyOverLongitudeWeight的短途时间。

easingFunction

EasingFunction | EasingFunction〜Callback

可选控制在飞行过程中如何插值时间。

2.3 lookAt (target, offset)

使用目标和偏移量设置摄像机的位置和方向。目标必须在世界坐标。偏移可以是笛卡尔坐标系,也可以是以目标为中心的局部北北向上参考系中的航向/俯仰/范围。如果偏移量是笛卡尔坐标,则它是相对转换矩阵定义的参考帧中心的偏移量。如果偏移如果是航向/俯仰/范围,则航向和俯仰角在变换矩阵定义的参考系中定义。航向是从y轴到x轴的角度。间距是从xy平面开始的旋转。正螺距角度在平面下方。负俯仰角在平面上方。范围是距中心的距离。在2D中,必须有一个俯视图。摄像机将被放置在目标上方并向下看。上方的高度目标将是偏移量的大小。航向将根据偏移量确定。如果标题不能根据偏移量确定,航向将为北。

参数

Name

Type

Description

target

Cartesian3

世界坐标中的目标位置。

offset

Cartesian3 | HeadingPitchRange

在局部东北朝上的参考框中,距目标的偏移量。

Throws:

Example:

// 1. Using a cartesian offset
var center = Cesium.Cartesian3.fromDegrees(-98.0,40.0);
viewer.camera.lookAt(center,newCesium.Cartesian3(0.0,-4790000.0,3930000.0));
// 2. Using a HeadingPitchRange offset
var center = Cesium.Cartesian3.fromDegrees(-72.0,40.0);var heading = Cesium.Math.toRadians(50.0);var pitch = Cesium.Math.toRadians(-20.0);var range =5000.0;
viewer.camera.lookAt(center,newCesium.HeadingPitchRange(heading, pitch, range));

2.4 lookAtTransform (transform, offset )

使用目标和变换矩阵设置相机的位置和方向。偏移可以是笛卡尔坐标或航向/俯仰/范围。如果偏移量是笛卡尔坐标,则它是相对转换矩阵定义的参考帧中心的偏移量。如果偏移如果是航向/俯仰/范围,则航向和俯仰角在变换矩阵定义的参考系中定义。航向是从y轴到x轴的角度。间距是从xy平面开始的旋转。正螺距角度在平面下方。负俯仰角在平面上方。范围是距中心的距离。在2D中,必须有一个俯视图。相机将放置在参考框中心上方。上方的高度目标将是偏移量的大小。航向将根据偏移量确定。如果标题不能根据偏移量确定,航向将为北。

参数

Name

Type

Description

transform

Matrix4

定义参考框架的变换矩阵。

offset

Cartesian3 | HeadingPitchRange

可选在以目标为中心的参考帧中与目标的偏移。

Throws:

Example:

// 1. Using a cartesian offset
var transform = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(-98.0,40.0));
viewer.camera.lookAtTransform(
transform,
new Cesium.Cartesian3(0.0,-4790000.0,3930000.0)
);
// 2. Using a HeadingPitchRange offset
var transform = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(-72.0,40.0));
var heading = Cesium.Math.toRadians(50.0);
var pitch = Cesium.Math.toRadians(-20.0);
var range =5000.0;
viewer.camera.lookAtTransform(
transform,
new Cesium.HeadingPitchRange(heading, pitch, range)
);

2.5 setView (options)

设置相机的位置,方向和变换。

参数

options(Object)

名称

类型

说明

destination

Cartesian3 | 矩形

可选摄像机在WGS84(世界)坐标中的最终位置或从上向下视图中可见的矩形

direction

对象

可选包含方向和向上属性或航向,俯仰和横滚属性对象。默认情况下,方向将指向在3D中朝向帧中心,在哥伦布视图中沿负z方向。向上方向将指向3D局部正北哥伦布视图中的y方向。在无限滚动模式下,二维使用方向。

endTransform

Matrix4

可选转换代表摄像机参考帧的矩阵。

转换

布尔值

可选是否目的地从世界坐标转换为场景坐标(仅在不使用3D时相关)。默认为 true

Example:

// 1. Set position with a top-down view
viewer.camera.setView({
    destination : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0)
});

// 2 Set view with heading, pitch and roll
viewer.camera.setView({
    destination : cartesianPosition,
    orientation: {
        heading : Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)
        pitch : Cesium.Math.toRadians(-90),    // default value (looking down)
        roll : 0.0                             // default value
    }
});

// 3. Change heading, pitch and roll with the camera position remaining the same.
viewer.camera.setView({
    orientation: {
        heading : Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)
        pitch : Cesium.Math.toRadians(-90),    // default value (looking down)
        roll : 0.0                             // default value
    }
});


// 4. View rectangle with a top-down view
viewer.camera.setView({
    destination : Cesium.Rectangle.fromDegrees(west, south, east, north)
});

// 5. Set position with an orientation using unit vectors.
viewer.camera.setView({
    destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),
    orientation : {
        direction : new Cesium.Cartesian3(-0.04231243104240401, -0.20123236049443421, -0.97862924300734),
        up : new Cesium.Cartesian3(-0.47934589305293746, -0.8553216253114552, 0.1966022179118339)
    }
});

相机参数

我们不管使用哪种方式基本上都是先确定相机要飞到的某一个位置,如点、矩形、包围球等,然后结合相机的三个参数heading、pitch、roll或range实现某一位置视角的计算。下面主要介绍这三个参数。

我们知道Cesium使用的是笛卡尔空间直角坐标系,X、Y、Z三个轴的正方向如下图所示

相机的三个参数heading、pitch、roll的值是针对坐标轴旋转的弧度数,示意图如下所示

heading:偏航角(弧度)——左右摇头

绕负Z轴旋转,顺时针为正,默认为正北方向0,其中正角向东增加。控制机体头的朝向位置,即左右方向的改变。

pitch:俯仰角(弧度)——上下点头

绕负Y轴旋转,顺时针为正,默认为俯视-90。正俯仰角在飞机上方,负俯仰角在飞机下方。可简单理解成前空翻、后空翻。

roll:翻滚角(弧度)——左右偏头(歪头),注意左右摇头区别

绕正x轴旋转,顺时针为正,默认为0。可简单理解成侧空翻。

range:范围(米)

代表相机距离目标的距离。

https://zhuanlan.zhihu.com/p/351731187

原文地址:https://blog.csdn.net/linxilinyu/article/details/129375752

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_40414.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注