百度地图绘制扇形

复制代码
function Sector1(point2, radius, sDegree, eDegree, pointCount) {
    let points = []; //创建构成多边形的点数组  
    let step = ((eDegree - sDegree) / pointCount) || pointCount; //根据扇形的总夹角确定每步夹角度数 
    points.push(point2);
    for (let i = sDegree; i < eDegree + 0.001; i += step) { //循环获取每步的圆弧上点的坐标,存入点数组 
        points.push(EOffsetBearing(point2, radius * 1000, i));
    }
    points.push(point2);
    //根据构成的点数组以及其他参数画多边形
    let polygon = new BMapGL.Polygon(
        points, {
            strokeColor: "blue",
            strokeWeight: 3,
            strokeOpacity: 0.7,
            fillColor: 'rgb(40,75,151)'
        });
    map.addOverlay(polygon)
    console.log(points)
    return polygon;
}
//使用数学的方法计算需要画扇形的圆弧上的点坐标
function EOffsetBearing(point3, dist, bearing) {
    let lngConv = map.getDistance(point3, new BMapGL.Point(point3.lng + 0.1, point3.lat)) * 10; //计算1经度与原点的距离
    let latConv = map.getDistance(point3, new BMapGL.Point(point3.lng, point3.lat + 0.1)) * 10; //计算1纬度与原点的距离
    let lat = dist * Math.cos(bearing * Math.PI / 180) / latConv; //正弦计算待获取的点的纬度与原点纬度差
    let lng = dist * Math.sin(bearing * Math.PI / 180) / lngConv; //余弦计算待获取的点的经度与原点经度差
    return new BMapGL.Point(point3.lng + lng, point3.lat + lat);
}
Sector1(new BMapGL.Point(119.20920035759737, 38.6103169759151), 50, 58, 176, 50)
复制代码

 

posted @   ALin_Da  阅读(445)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示