【用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);
}
效果图如下: