乐趣区

关于javascript:openlayers绘制圆形时设置半径以米为单位

ol.geom.Circle 半径参数 radius 单位是什么?

ol.geom.Circle 办法有三个参数其中 radius 便是半径,然而官网文档没有明确阐明其单位,只是说 radius 是 number 类型,很坑。

ol.geom.Circle 设置半径的单位是随投影的单位。

而后持续看 api 文档发现 setRadius 这个办法是设置图形的半径。而后一句要害的话,官网原话:
Set the radius of the circle. The radius is in the units of the projection.
翻译过去也就是 ol.geom.Circle 设置半径的单位是随投影的单位。
那么咱们就有思路了,就先获取到以后投影而后在获取以后投影的单位,在进行单位转换。

获取以后投影的单位 getUnits

在 ol.proj.Projection 找到 getUnits 办法能够获取以后投影的单位

投影有哪些单位?

Projection units: 'degrees', 'ft', 'm', 'pixels', 'tile-pixels' or 'us-ft'.

ol.proj.Units 能够查看有哪些单位,发现其中有 'm' 就是米这个单位。

单位转换?

那么如果将以后投影的单位转换成 'm' 米呢?
持续寻找 api 发现在 ol.proj.Projection 有 getMetersPerUnit()办法
Get the amount of meters per unit of this projection.
这样不论以后投影是什么单位都能够设置以米为单位的半径值了。
因为 ol.geom.Circle 设置半径的单位是随投影的单位,所以须要将单位 m 转换成投影的单位
到此问题曾经解决,代码如下:

/**
* 获取转换后单位的半径
* @param {Number} radius 以米为单位的半径的值
* @returns {Number} circleRadius 以投影的单位为单位的半径的值
*/
let getRadius = (radius)=>{let metersPerUnit = map.getView().getProjection().getMetersPerUnit();
    let circleRadius =  radius / metersPerUnit;
    return circleRadius;
}
退出移动版