? ? ? ?下面匯總的相機(jī)視角跳轉(zhuǎn)方法有很多種,都是根據(jù)某一個經(jīng)緯度高程坐標(biāo)[x,y,z],Entity實(shí)體或者矩形四至范圍[west , south , east , north]作為視圖跳轉(zhuǎn)到目標(biāo)范圍的中心,然后在該位置上設(shè)置相機(jī)相對的偏移量,這個偏移量主要是設(shè)置相機(jī)的偏航角、航向角和翻滾角或者橢球范圍,請大家根據(jù)實(shí)際情況選擇合適的相機(jī)視角跳轉(zhuǎn)方法?。以下方法都不適合一般的運(yùn)動軌跡視角跟隨。
viewer.trackedEntity =entity? ? //注意,這個方法一般用于動畫軌跡視圖跟蹤。此時視圖可以旋轉(zhuǎn)縮放,不能平移,因?yàn)閷?shí)體對象會一直保持在當(dāng)前視圖中心。在一些極端情況下會出些一些bug,比如縮放到距離實(shí)體很近的時候,實(shí)體運(yùn)動會拖影卡頓,并且可以平移地圖使得實(shí)體移除到視圖之外,建議在遠(yuǎn)距離跟蹤的時候使用該方法。
import * as Cesium from "cesium";
/**
* 相機(jī)移動到某一個坐標(biāo)或者矩形范圍內(nèi)
* @param {Cesium.Viewer} viewer -地圖對象
* @param {Object} option -參數(shù)對象
* @param {Number} option.duration -視圖跳轉(zhuǎn)時間(單位/s)
* @param {String} option.type -跳轉(zhuǎn)目標(biāo)類型方式,‘point’:相機(jī)移動到某一個坐標(biāo);‘rectangle’:相機(jī)移動到矩形范圍內(nèi)
* @param {Array} option.xyz -跳轉(zhuǎn)目標(biāo)類型方式:‘point’,則xyz為[x,y,z]
* @param {Array} option.wsen -跳轉(zhuǎn)目標(biāo)類型方式:‘rectangle’,則wsen為[west , south , east , north],(單位/度)
* @param {Number} option.heading -相機(jī)航向角
* @param {Number} option.pitch -相機(jī)俯仰角
* @param {Number} option.roll -相機(jī)翻滾角
*/
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,
},
});
}
/**
* 相機(jī)移動到某一坐標(biāo)點(diǎn)上,可以用于視角跟蹤實(shí)體對象,但是視角是以坐標(biāo)點(diǎn)為中心固定的,不可以平移
* 適合視角跟隨的情況:實(shí)時運(yùn)動軌跡,可以獲取前后兩個點(diǎn),實(shí)時計算偏北角(航向角)
* @param {Cesium.Viewer} viewer -地圖對象
* @param {Object} option -參數(shù)對象
* @param {Array} option.xyz -跳轉(zhuǎn)橢球體中心坐標(biāo)數(shù)組[x,y,z]
* @param {Number} option.heading -相機(jī)航向角
* @param {Number} option.pitch -相機(jī)俯仰角
* @param {Number} option.range -以橢球體中心坐標(biāo)為中心的的范圍大?。▎挝?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
)
);
}
/**
* 相機(jī)移動到某一坐標(biāo)點(diǎn)上,不可用于視角跟蹤實(shí)體對象
* @param {Cesium.Viewer} viewer -地圖對象
* @param {Object} option -參數(shù)對象
* @param {Array} option.xyz -跳轉(zhuǎn)橢球體中心坐標(biāo)數(shù)組[x,y,z]
* @param {Number} option.duration -視圖跳轉(zhuǎn)時間(單位/s)
* @param {Number} option.heading -相機(jī)航向角
* @param {Number} option.pitch -相機(jī)俯仰角
* @param {Number} option.roll -相機(jī)翻滾角
*/
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,
},
});
}
/**
* 相機(jī)視圖移動到移到某一個坐標(biāo)范圍內(nèi),注意可以用來定位用,不可用于視角跟蹤實(shí)體對象!?。?!
* @param {Cesium.Viewer} viewer -地圖對象
* @param {Object} option -參數(shù)對象
* @param {Array} option.xyz -跳轉(zhuǎn)橢球體中心坐標(biāo)數(shù)組[x,y,z]
* @param {Number} option.radius -跳轉(zhuǎn)橢球體半徑(單位/m)
* @param {Number} option.duration -視圖跳轉(zhuǎn)時間(單位/s)
* @param {Number} option.heading -相機(jī)航向角
* @param {Number} option.pitch -相機(jī)俯仰角
* @param {Number} option.range -以跳轉(zhuǎn)坐標(biāo)為中心的的范圍大小(單位/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("飛行取消!");
},
}
);
}
/**
* 相機(jī)移動到某一entity實(shí)體上 === viewer.zoomTo(entity),不可用于視角跟蹤實(shí)體對象
* @param {Cesium.Viewer} viewer -地圖對象
* @param {Object} option -參數(shù)對象
* @param {Object} option.target -target可以是單個或者多個entity對象,以及各自cesium支持的圖層,不能是坐標(biāo)
* @param {Number} option.duration -視圖跳轉(zhuǎn)時間(單位/s)
* @param {Number} option.heading -相機(jī)航向角
* @param {Number} option.pitch -相機(jī)俯仰角
* @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,
},
// 視角跳轉(zhuǎn)最大高度(一般不用)
// maximumHeight: 20000,
});
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-856758.html
文章來源:http://www.zghlxwxcb.cn/news/detail-856758.html
到了這里,關(guān)于cesium相機(jī)視角跳轉(zhuǎn)定位方法匯總的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!