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

一、viewer

flyTotarget:Entity | Array.< Entity > | EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud | Promise.<( Entity |Array.< Entity >| EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud )>options:duration(3s),offset(HeadingPitchRange)zoomTotarget:Entity | Array.< Entity > | EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud | Promise.<( Entity |Array.< Entity >| EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud )>offset(HeadingPitchRange)

1.1 flyTo (target, options ) → Promise.

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

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

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

参数

NameTypetargetEntity | Array.< Entity > | EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud | Promise.<( Entity |Array.< Entity >| EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud )>实体,实体阵列,实体集合,数据源,要查看的Cesium3DTileset,点云或图像层。您还可以传递一个可以解决上述类型之一的承诺。optionsObject可选

options具有以下属性的对象:

名称类型默认说明duration数字3.0可选飞行持续时间(以秒为单位)。maximumHeight数字可选飞行高峰时的最大高度。offsetHeadingPitchRange可选在局部东北朝上的参考框中,距目标的偏移量。

Returns:

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

1.2 zoomTo (target, offset ) → Promise.

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

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

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

参数

NameTypeDescriptiontargetEntity | Array.< Entity > | EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud | Promise.<( Entity |Array.< Entity >| EntityCollection | DataSource | ImageryLayer | Cesium3DTileset | TimeDynamicPointCloud )>实体,实体阵列,实体集合,数据源,要查看的Cesium3DTileset,点云或图像层。您还可以传递一个可以解决上述类型之一的承诺。offsetHeadingPitchRange可选在局部东北向上参考系中,距实体中心的偏移量。

Returns:

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

二、camera

方法参数区别flyTo

options: destination,orientation,durationflyToBoundingSphere

boundingSphere

options: duration, offsetlookAt

target

offsetlookAtTransform

transform

offset setView

options: destination, direction

2.1 flyTo (options)

将相机从当前位置移动到新位置。

参数

NameTypeDescriptiondestinationCartesian3 | Rectangle摄像机在WGS84(世界)坐标中的最终位置或从上向下视图中可见的矩形。orientationObject可选包含方向和向上属性或航向,俯仰和横滚属性的对象。默认情况下,方向将指向在3D中朝向帧中心,在哥伦布视图中沿负z方向。向上方向将指向3D局部正北哥伦布视图中的y方向。在无限滚动模式下,二维不使用方向。durationNumber可选飞行持续时间(以秒为单位)。如果省略,Cesium会尝试根据航班飞行的距离来计算理想持续时间。completeCamera~FlightCompleteCallback可选飞行结束后执行的功能。cancelCamera~FlightCancelledCallback可选取消航班后执行的功能。endTransformMatrix4可选表示飞行完成后相机将位于的参考帧的变换矩阵。maximumHeightNumber可选飞行高峰时的最大高度。pitchAdjustHeightNumber可选如果相机的飞行角度高于该值,请在飞行过程中调整俯仰角度以向下看,并将地球保持在视口中。flyOverLongitudeNumber可选地球上2点之间总是有两种方法。此选项会迫使相机选择战斗方向以在该经度上飞行。flyOverLongitudeWeightNumber可选仅在通过flyOverLongitude指定的lon上飞过,只要该方式的时间不超过flyOverLongitudeWeight的短途时间。convertBoolean可选是否将目的地从世界坐标转换为场景坐标(仅在不使用3D时相关)。默认为 true 。easingFunctionEasingFunction | EasingFunction~Callback可选控制在飞行过程中如何插值时间。

Throws:

DeveloperError :如果给出方向或向上,则都需要。

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视图中,必须有一个俯视图。摄像机将被放置在目标上方并向下看。上方的高度目标将是范围。标题将与当地北部对齐。

参数

NameTypeDescriptionboundingSphereBoundingSphere要查看的边界球,以世界坐标表示。optionsObject可选具有以下属性的对象:

名称类型说明duration数字可选飞行持续时间(以秒为单位)。如果省略,Cesium会尝试根据航班飞行的距离来计算理想持续时间。offsetHeadingPitchRange可选在局部东北朝上的参考框中,距目标的偏移量。completeCamera〜FlightCompleteCallback可选飞行结束后执行的功能。cancelCamera〜FlightCancelledCallback可选取消航班后执行的功能。endTransformMatrix4可选表示飞行完成后相机将位于的参考帧的变换矩阵。maximumHeight数字可选飞行高峰时的最大高度。pitchAdjustHeight数字可选如果相机的飞行角度高于该值,请在飞行过程中调整俯仰角度以向下看,并将地球保持在视口中。flyOverLongitude数字可选地球上2点之间总是有两种方法。此选项会迫使相机选择战斗方向以在该经度上飞行。flyOverLongitudeWeight数字可选仅在通过flyOverLongitude指定的lon上飞过,只要该方式的时间不超过flyOverLongitudeWeight的短途时间。easingFunctionEasingFunction | EasingFunction〜Callback可选控制在飞行过程中如何插值时间。

2.3 lookAt (target, offset)

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

参数

NameTypeDescriptiontargetCartesian3世界坐标中的目标位置。offsetCartesian3 | HeadingPitchRange在局部东北朝上的参考框中,距目标的偏移量。

Throws:

DeveloperError :变形时不支持lookAt。

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中,必须有一个俯视图。相机将放置在参考框中心上方。上方的高度目标将是偏移量的大小。航向将根据偏移量确定。如果标题不能根据偏移量确定,航向将为北。

参数

NameTypeDescriptiontransformMatrix4定义参考框架的变换矩阵。offsetCartesian3 | HeadingPitchRange可选在以目标为中心的参考帧中与目标的偏移。

Throws:

DeveloperError :变形时不支持lookAtTransform。

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)

名称类型说明destinationCartesian3 | 矩形可选摄像机在WGS84(世界)坐标中的最终位置或从上向下视图中可见的矩形。direction对象可选包含方向和向上属性或航向,俯仰和横滚属性的对象。默认情况下,方向将指向在3D中朝向帧中心,在哥伦布视图中沿负z方向。向上方向将指向3D局部正北哥伦布视图中的y方向。在无限滚动模式下,二维不使用方向。endTransformMatrix4可选转换代表摄像机参考帧的矩阵。转换布尔值可选是否将目的地从世界坐标转换为场景坐标(仅在不使用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

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。