百度离线地图根据角度画扇形区域

项目中有需要在百度地图上根据坐标和角度画扇形图的需求,因为离线地图API暂时没有此方法和功能,所以就在离线地图的基础上,加入了此方法,代码拥有较为详细的注释:

/*
 * 离线地图扩展功能函数
 *
 * 拓展功能基于 map.js 。
 */

/**
 * 画扇形,实际返回一个多边形。最后要通过全局的地图组件 map的addOverlay方法添加。(部分参数可缺省)
 * 终止角度缺省,则在起始角度上+60
 * @param {Object} lng 经度
 * @param {Object} lat 纬度
 * @param {Object} sDegree 起始角度(方向:正东到正北)
 *
 */
function drawSectorOmit(lng, lat, sDegree) {
    var radius = 100; //单位米
   //对传入的角度从减去90度,由从正东起始,转为正北起始
    sDegree = sDegree - 90;
    eDegree = sDegree + 60;
    var color = "blue";
    return drawSector(lng, lat, radius, sDegree, eDegree, color);
}

/**
 * 画扇形,实际返回一个多边形。最后要通过全局的地图组件 map的addOverlay方法添加
 * @param {Object} lng 经度
 * @param {Object} lat 纬度
 * @param {Object} radius 半径
 * @param {Object} sDegree 起始角度(方向:正东到正北)
 * @param {Object} eDegree 终止角度
 * @param {Object} color 颜色
 *
 */
function drawSector(lng, lat, radius, sDegree, eDegree, color) {
    if (eDegree < sDegree) {
        console.log("drawSector() ----> 终止角度应大于起始角度");
        return "-1";
    }

    var point = new BMap.Point(lng, lat);

    var strokeColor = color; //边线颜色
    var strokeWeight = 1; //边线宽度
    var strokeOpacity = 0.8; //边线透明度,取值范围0 - 1。
    var strokeStyle = 'solid'; //边线的样式,solid或dashed。
    var fillColour = color; //填充颜色
    var fillOpacity = 0.4; //填充透明度


    var points = []; //创建构成多边形的点数组
    var step = ((eDegree - sDegree) / 1000) || 1000; //根据扇形的总夹角确定每步夹角度数,最大为1000

    points.push(point); //设置第一点(原点)

    //根据步长计算,循环获取每步的圆弧上点的坐标,存入点数组
    for (var i = sDegree; i < eDegree + 0.001; i += step) {
        points.push(EOffsetBearing(point, radius, i));
    }

    points.push(point); //设置最后一点(原点)

    //根据构成的点数组以及其他参数画多边形
    var polygon = new BMap.Polygon(
        points, {
            strokeColor: strokeColor,
            strokeWeight: strokeWeight,
            strokeOpacity: strokeOpacity,
            strokeStyle: strokeStyle,
            fillColor: fillColour,
            fillOpacity: fillOpacity
        });

    return polygon;
}

//使用数学的方法计算需要画扇形的圆弧上的点坐标
//point:原点; dist:半径距离; angle:角度 (方向:纬度差为180时,逆时针;纬度差为-180时,顺时针 )
function EOffsetBearing(point, dist, angle) {
    var lngConv = map.getDistance(point, new BMap.Point(point.lng + 0.1, point.lat)) * 10; //计算1经度与原点的距离
    var latConv = map.getDistance(point, new BMap.Point(point.lng, point.lat + 0.1)) * 10; //计算1纬度与原点的距离
    var lat = dist * Math.sin(angle * Math.PI / 180) / latConv; //正弦计算待获取的点的纬度与原点纬度差
    var lng = dist * Math.cos(angle * Math.PI / 180) / lngConv; //余弦计算待获取的点的经度与原点经度差
    return new BMap.Point(point.lng + lng, point.lat + lat);
}

在C#中,要根据给定的角度计算扇形的原点垂直于弧面的高度,我们需要利用三角函数中的正弦(sin)函数。首先,我们需要明确扇形的半径长度(记作r),然后根据角度(记作θ,以弧度为单位)计算原点到弧面的垂直高度(记作h)。在直角三角形中,正弦值是对边与斜边的比值,所以原点到弧面的垂直高度h可以表示为: h = r * sin(θ) 这里θ是扇形的中心角对应的弧度值,r是扇形的半径长度。假设扇形角度已经给出,并且是以度数为单位,我们需要先将角度转换为弧度,因为C#的Math库中的三角函数都是基于弧度的。角度转换为弧度的公式是: 弧度 = 度数 * (π / 180) 接下来,我们可以使用C#代码来实现这个计算: ```csharp using System; public class SectorHeightCalculator { public static double CalculateHeight(double radius, double angleDegrees) { // 将角度转换为弧度 double radians = angleDegrees * (Math.PI / 180.0); // 计算高度 double height = radius * Math.Sin(radians); return height; } } class Program { static void Main() { double radius = 5.0; // 假设扇形半径为5单位长度 double angleDegrees = 90.0; // 假设角度为90度 double height = SectorHeightCalculator.CalculateHeight(radius, angleDegrees); Console.WriteLine($"扇形原点垂直于弧面的高度为: {height}"); } } ``` 在这个例子中,我们创建了一个名为`SectorHeightCalculator`的类,它有一个静态方法`CalculateHeight`用于计算高度。然后在`Main`方法中,我们用具体的数值调用该方法,并输出计算结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MichaelYZ111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值