Skip to content
Cesium通过经纬度点和半径获取边界范围

来源

这篇文章和[[Cesium绘制图形:圆形和水滴形]]这个是相关的,因为那篇是用primitive来实现的,然后现在这个是用entity的rectangle来实现的

获取边界范围矩形框

javascript
    /**

     * 获取边界范围矩形框

     * @param {Array} center 经纬度,[112.3652, 36.1245]

     * @param {number} radius 范围半径,10

     * @returns array 坐标数组

     */

    _getBoundRect(center, radius = 10) {

        if (!center.length || !radius) return []

        const circle = turf.circle(center, radius, {

            steps: 72,

            units: 'kilometers',

        });

  

        return turf.bbox(circle);

    }

}

AI针对这段的解释

这段代码使用 turf.js 库来计算一个圆的边界范围矩形框。具体步骤如下:

  1. 输入参数

    • center:中心点的经纬度数组,例如 [112.3652, 36.1245]
    • radius:圆的半径,默认值为 10 公里。
  2. 检查输入有效性

    • 如果 center 数组为空或 radius 为 0,则返回空数组。
  3. 生成圆形

    • 使用 turf.circle 方法生成一个圆形,参数包括中心点、半径、步数和单位。
    • steps: 72 表示圆形将被分成 72 个线段来近似。
  4. 计算边界框

    • 使用 turf.bbox 方法计算圆形的边界框,返回一个包含边界框坐标的数组。
关于 steps: 72
  • steps 参数决定了圆形的近似精度。值越大,圆形越接近真实的圆。
  • 72 是一个常用的值,表示将圆形分成 72 个线段。这个值足够高,可以生成一个较为平滑的圆形,同时计算效率也较高。
优化建议

如果不需要特别高的精度,可以适当减少 steps 的值以提高计算效率;如果需要更高的精度,可以增加 steps 的值。

加载

这里加载Image和上一篇的图形获取的方法是一致的

effectRadius是最大的半径影响范围获取

javascript

            const modelAnalysis = this._createImage(options)

            const bbox = this._getBoundRect([longitude, latitude], effectRadius)

            const RectangleOptions = {

                coordinates: Cesium.Rectangle.fromDegrees(bbox[0], bbox[1], bbox[2], bbox[3]),

                material: new Cesium.ImageMaterialProperty({

                    image: modelAnalysis,

                    color: Cesium.Color.WHITE.withAlpha(opacity)

                })

            }
           viewer.entities.add({

                id,

                show: isShow,

                rectangle: RectangleOptions

            })

Updated at: