来源
这篇文章和[[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
库来计算一个圆的边界范围矩形框。具体步骤如下:
输入参数:
center
:中心点的经纬度数组,例如[112.3652, 36.1245]
。radius
:圆的半径,默认值为10
公里。
检查输入有效性:
- 如果
center
数组为空或radius
为0
,则返回空数组。
- 如果
生成圆形:
- 使用
turf.circle
方法生成一个圆形,参数包括中心点、半径、步数和单位。 steps: 72
表示圆形将被分成 72 个线段来近似。
- 使用
计算边界框:
- 使用
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
})