[baidu] 03_百度地图加强_覆盖物_GraphicsOverlay

Android 4.0

百度地图加强_覆盖物_GraphicsOverlay


0、Overlay
Overlay是一个基类,它表示可以显示在地图上方的覆盖物。
从2.0.0开始,SDK不支持直接继承Overlay , 用户可通过继承ItemizedOverlay来添加覆盖物。
因为Overlay里面什么都没有,只是用来标记该类是一个覆盖物
1、GraphicsOverlay
用于绘制点、线、面的overlay
public GraphicsOverlay(MapView mapView) 构造
public long setData(Graphic g)  添加一个图形

Graphic  图形类
public Graphic(Geometry g,Symbol s)   g -几何元素  s -样式

Geometry  几何图形类
public void setCircle(GeoPoint geoPoint ,int radius) 设置图形为圆
geoPoint - 地理坐标  radius - 圆的半径,单位:米

Symbol 样式类
public void setSurface(Symbol.Color  color, int status,int linewidth)设置面样式
color - 颜色  status - 填充状态,0表示不填充,1表示填充  linewidth - 线宽,当填充状态为填充(1)时线宽无意义
设置为1,填充后,线条的宽度就没有意义了
核心代码:
package cn.zengfansheng.mybaidumap.overlay;
import java.util.List;
import android.os.Bundle;
import cn.zengfansheng.mybaidumap.BaseActivity;
import com.baidu.mapapi.map.Geometry;
import com.baidu.mapapi.map.Graphic;
import com.baidu.mapapi.map.GraphicsOverlay;
import com.baidu.mapapi.map.Overlay;
import com.baidu.mapapi.map.Symbol;
import com.baidu.mapapi.map.Symbol.Color;
/**
 * 用于绘制点、线、面的overlay覆盖面
 */
public class GraphicsOverlayDemo extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addGraphicsOverlay();
    }
    // 1、获取MapView中的Overlay集合
    // 2、在集合中添加要显示的内容
    // 3、刷新界面
    /**
     * 添加GraphicsOverlay覆盖层
     */
    private void addGraphicsOverlay() {
        // 1、获取MapView中的Overlay集合
        List<Overlay> overlays = mMapView.getOverlays();
        
        // 2、在集合中添加要显示的内容
        GraphicsOverlay overlay = new GraphicsOverlay(mMapView);
        //设置数据
        setOverlayData(overlay);
        // 添加到集合中去
        overlays.add(overlay);
        
        // 3、刷新界面
        mMapView.refresh();
    }
    /**
     * 设置GraphicsOverlay的数据
     * @param overlay
     */
    private void setOverlayData(GraphicsOverlay overlay) {
        
        // 画一个圆
        Geometry geometry = new Geometry();
        int radius = 1000;
        geometry.setCircle(geoPoint, radius);
        
        // 样式类
        Symbol symbol = new Symbol();
        Symbol.Color color = getColor();
        int status = 1;// 填充状态,0表示不填充,1表示填充
        int linewidth = 0;// 线宽,当填充状态为填充时线宽无意义
        symbol.setSurface(color, status, linewidth);
        Graphic graphic = new Graphic(geometry, symbol);// 设置面样式
        overlay.setData(graphic);// 添加一个图形
    }
    /**
     * 获取颜色
     * @return
     */
    private Color getColor() {
        Symbol.Color color = new Symbol().new Color();// 颜色
        color.red = 255;
        color.green = 0;
        color.blue = 0;
        color.alpha = 100;// 透明度
        return color;
    }
}
结果: