Cesium DC-SDK解决viewer.flyToPosition俯仰角不是90°不会对准目标点的问题
通过viewer.flyToPosition定位至目标的,如果俯仰角不是90°,不会对准目标点。经过各种查找资料,百度搜了一大堆都没有结果,后来用Google搜索,终于找到解决办法:
参考链接地址:https://www.cnblogs.com/sanhuamao/p/18127858
通过点击定位到目标点(地图中心)
label.on(DC.MouseEventType.CLICK, (e) => {
const { attr, position } = e.overlay
const { alt, heading, roll, pitch } = viewer.cameraPosition
const offsetLat = getOffsetLat({
lat: position.lat,
alt,
pitch
})
console.log(offsetLat)
viewer.flyToPosition(DC.Position.fromArray([position.lng, offsetLat, alt,
heading, pitch, roll]))
})
转换方法(对纬度进行转换)
const getOffsetLat = (options) => {
const ONE_LAT_TO_METERS = 111 * 1000 // 1纬度对应的距离 111km
// 如果是90或者0度,不发生偏移
if (Math.abs(options.pitch % 90) === 0) {
return options.lat
}
// tan用的是弧度,这里要将角度转为弧度
const latOffsetMeters = options.alt / Math.tan((options.pitch * Math.PI) / 180)
const lat = Number((latOffsetMeters / ONE_LAT_TO_METERS).toFixed(12))
return options.lat + lat
}
该篇文章如果对你有用,点个赞再走呗。
完结,撒花✿✿ヽ(°▽°)ノ✿