在使用百度API时,遇到了实现内嵌圆的问题,由于不会用openGL所以只好使用PolygonOptions来实现,我们来看看效果吧:
PolygonOptions是百度提供的多边形绘制类。我们可以把镂空圆分解成两个多边形,即一个半圆弧加上圆弧两端到地图边境的直线再加上地图一半的边界线。
好吧,我也说不清,看代码吧:
private void initSmoke(int acc,Double r,LatLng postion) {
List<LatLng> pts = new ArrayList<LatLng>();
Double latitude = postion.latitude;
Double longitude = postion.longitude;
Double lat = 0.0;
Double lon = 0.0;
for(int i=0;i<acc/2+1;i++){
lat = latitude + r*Math.sin((2*Math.PI)/acc*i);
lon = longitude + r*Math.cos((2*Math.PI)/acc*i);
LatLng pt = new LatLng(lat,lon );
pts.add(pt);
}
LatLng pt1 = new LatLng(lat,180);
pts.add(pt1);
LatLng pt2 = new LatLng(90,180);
pts.add(pt2);
LatLng pt3 = new LatLng(90,-180);
pts.add(pt3);
LatLng pt4 = new LatLng(latitude + r*Math.sin((2*Math.PI)/acc*0),-180);
pts.add(pt4);
for(int i=acc/2;i<acc+1;i++){
lat = latitude + r*Math.sin((2*Math.PI)/acc*i);
lon = longitude + r*Math.cos((2*Math.PI)/acc*i);
LatLng pt = new LatLng(lat,lon );
pts.add(pt);
}
pt1 = new LatLng(lat,180);
pts.add(pt1);
pt2 = new LatLng(-90,180);
pts.add(pt2);
pt3 = new LatLng(-90,-180);
pts.add(pt3);
pt4 = new LatLng(latitude + r*Math.sin((2*Math.PI)/acc*(acc/2)),-180);
pts.add(pt4);
//构建用户绘制多边形的Option对象
OverlayOptions polygonOption = new PolygonOptions()
.points(pts)
.stroke(new Stroke(4, 0))
.fillColor(0x99999900);
//在地图上添加多边形Option,用于显示
mBaiduMap.addOverlay(polygonOption);
}
变量介绍:acc是圆弧精度,acc越高这个内嵌圆就越像圆,r是圆的半径,postion是原点。