Cesium 实战 - 获取 Cartesian3s 四至范围(extent)

Cesium 实战 - 获取 Cartesian3s 四至范围(extent)

    • 核心代码
    • 在线示例

在 Cesium 实际项目中,定位和飞行定位是非常常用的功能,很多对象都可以直接使用 viewer.flyTo 进行定位(比如:Entity)。

但是还有很多对象是不支持直接定位(比如:primitive)的,这样的对象需要通过其他方式进行定位。

常用的有 Camera 的 flyTo、setView 等,一般都是定位至点或者范围。

笔者习惯使用范围来定位,在 Openlayers 中以 extent 来表示,在 Cesium 中以 rectangle 来表示。

在 Cesium 中 Cartesian3 为最常用的对象之一,本文介绍获取 Cartesian3 数据的四至范围(extent)。

本文包括核心代码和在线示例两部分。


核心代码

这里贴上核心代码,具体解释详见注释信息。


/**
 * @todo 获取点数据数组的范围
 * @param {Array} points - 坐标数组
 * @returns {[]} extent - 数组范围
 */
static getExtentByPoints(points) {
    if (points) {
    	// 指定世界范围
        let lonMin = 180;
        let lonMax = -180;
        let latMin = 90;
        let latMax = -180;
        points.forEach(function (point) {
            const longitude = point[0];
            const latitude = point[1];
            // 计算边界
            lonMin = longitude < lonMin ? longitude : lonMin;
            latMin = latitude < latMin ? latitude : latMin;
            lonMax = longitude > lonMax ? longitude : lonMax;
            latMax = latitude > latMax ? latitude : latMax;
        });
        const xRange = lonMax - lonMin ? lonMax - lonMin : 1;
        const yRange = latMax - latMin ? latMax - latMin : 1;
        // 返回数据
        return [lonMin - xRange / 10, latMin - yRange / 10, lonMax + xRange / 10, latMax + yRange / 10];
    }
    return Constant.EXTENT_WORLD;
}

/**
 * @todo 获取 Cartesian3 四至范围
 * @param {Cartesian3} cartesian3s - 世界坐标对象
 * @return {*[]}
 */
static getExtentByCartesian3(cartesian3s) {

    if(cartesian3s instanceof Array && cartesian3s.length>0){
        const points = [];
        for (let i = 0; i < cartesian3s.length; i++) {
            const cartesian3 = cartesian3s[i];
            // 将 cartesian3 转为经纬度数组
            const point = CesiumUtil.cartesian3ToDegrees(cartesian3);
            points.push([point.longitude,point.latitude]);
        }
        return CesiumUtil.getExtentByPoints(points);
    }
}


在线示例

示例中展示了, 获取 Cartesian3s 四至范围并定位

Cesium 沙盒测试

Cesium 实战 - 获取 Cartesian3s 四至范围(extent)_第1张图片


你可能感兴趣的:(Cesium,学习教程,cesium,定位,cesium,extent,cesium四至范围,Cartesian3,四至范围,世界坐标extent)