【用java进行百度地图二次开发之一】任意角度画扇形,添加覆盖层

【用java进行百度地图二次开发之一】任意角度画扇形,添加覆盖层


给定方向和角度。以该方向为扇形中心,2倍的角度为扇形的角度。代码中每一步的注释很清楚思想很简单,具体实现如下:

 //绘出扇形
    List<Polygon>Polygonlist=new ArrayList<>();
    //以画多边形区域的方法画扇形区域 画出以point2点为圆心,半径为radius,夹角从sDegree到eDegree的扇形
    void Sector1(float s,float e,LatLng p,double r) {
        List<LatLng> points = new ArrayList<LatLng>(); //创建构成多边形的点数组
        float step = (float)((e - s)/50); //根据扇形的总夹角确定每步夹角度数,最大为10
      //  LatLng point2 = new LatLng(39.94923, 116.397428);
        points.add(p);
        for (float i = s; i < e + 0.001; i += step) { //循环获取每步的圆弧上点的坐标,存入点数组
            points.add(EOffsetBearing(p, r, i));
        }
        //根据构成的点数组以及其他参数画多边形
        OverlayOptions ooPolygon1= new PolygonOptions().points(points)
                .stroke(new Stroke(5, 0x33808080)).fillColor(0x33808080);
        Polygon marker = (Polygon)mBaiduMap.addOverlay(ooPolygon1);    
        Polygonlist.add(marker);
    }
     //使用数学的方法计算需要画扇形的圆弧上的点坐标
    LatLng EOffsetBearing(LatLng point3, double dist, float bearing) {
        double latConv = DistanceUtil.getDistance(point3, new LatLng(point3.latitude + 0.1, point3.longitude)) * 10;  //计算1经度与原点的距离
        double  lngConv= DistanceUtil.getDistance(point3, new LatLng(point3.latitude , point3.longitude + 0.1)) * 10;  //计算1纬度与原点的距离
        double lat = dist * Math.cos(bearing * Math.PI / 180) / latConv;  //正弦计算待获取的点的纬度与原点纬度差
        double lng = dist * Math.sin(bearing * Math.PI / 180) / lngConv;  //余弦计算待获取的点的经度与原点经度差
        return new LatLng (point3.latitude + lat,point3.longitude + lng);
    }

效果图如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值