cesium如何通过二维层级计算高度

计算高度

function getHeightByLevel(level) {
	var A = 40487.57
	var B = 0.00007096758
	var C = 91610.74
	var D = -40467.74
	return Math.pow((A - D) / (level - D) - 1, 1 / B) * C
}

两种飞行方式
第一种,直接cesium.flyTo或cesium.camera.flyTo
第二种,根据一系列的经纬度坐标点,取中心范围值来飞行,cesium.camera.flyToBoundingSphere

function flyTo(option) {
        return new Promise(function (resolve, reject) {
            var destination = option.destination
            if (!option.objects) {
                if (option.position) {
                    option.position.forEach((x, index) => {
                        option.position[index] = parseFloat(x)
                    })
                    if (option.position.length == 2) {
                        option.position.push(0)
                    }
                    if (!isNaN(option.level)) {
                        option.position[2] = getHeightByLevel(option.level)
                    }
                    if (!isNaN(option.height)) {
                        option.position[2] = option.height
                    }
                    destination = Cesium.Cartesian3.fromDegrees(
                        option.position[0],
                        option.position[1],
                        option.position[2],
                    )
                }

                var config = {
                    destination: destination,
                    duration: isNaN(option.duration) ? 3 : option.duration,
                    complete: function () {
                        resolve()
                    },
                    easingFunction: option.easingFunction
                        ? option.easingFunction
                        : Cesium.EasingFunction.EXPONENTIAL_IN_OUT,
                }
                if (option.up && option.direction) {
                    config.orientation = {
                        direction: option.direction,
                        up: option.up,
                    }
                } else if (!isNaN(option.heading) && !isNaN(option.pitch) && !isNaN(option.roll)) {
                    config.orientation = {
                        heading: option.heading,
                        pitch: option.pitch,
                        roll: option.roll,
                    }
                }
                window._cesium.camera.flyTo(config)
            } else {
                let config = {
                    duration: isNaN(option.duration) ? 3 : option.duration,
                }

                if (!isNaN(option.heading) && !isNaN(option.pitch) && !isNaN(option.distance)) {
                    config.offset = new Cesium.HeadingPitchRange(option.heading, option.pitch, option.distance)
                }
                if (Array.isArray(option.objects)) {
                    window._cesium.flyTo(option.objects, config).then(function () {
                        resolve()
                    })
                } else if (option.objects instanceof Cesium.BoundingSphere) {
                    config.complete = function () {
                        resolve()
                    }
                    window._cesium.camera.flyToBoundingSphere(option.objects, config)
                }
            }
        })
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小仙有礼了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值