百度地图之自定义绘制功能(一)

2014-11-24 09:24:19 · 作者: · 浏览: 3
我们可以在地图上绘制各种自定义的图形,包括点、折线、圆、多边形等等,尤其绘制点和折线非常实用,点可以用来标识所处的位置,折线可以用来描述走过的轨迹,结合前面GPS定位功能可以做出一些非常有意思的应用,下面应用百度Demo实现绘制的基本功能,代码如下:
Activity:
package com.home;  
  
import android.app.Activity;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
  
import com.baidu.mapapi.map.Geometry;  
import com.baidu.mapapi.map.Graphic;  
import com.baidu.mapapi.map.GraphicsOverlay;  
import com.baidu.mapapi.map.MapView;  
import com.baidu.mapapi.map.Symbol;  
import com.baidu.mapapi.map.TextItem;  
import com.baidu.mapapi.map.TextOverlay;  
import com.baidu.platform.comapi.basestruct.GeoPoint;  
  
/** 
 * 此demo用来展示如何在地图上用GraphicsOverlay添加点、线、多边形、圆 同时展示如何在地图上用TextOverlay添加文字 
 *  
 */  
public class GeometryActivity extends Activity implements OnClickListener {  
  
    // 地图相关  
    private MapView mMapView = null;  
  
    private Button resetBtn = null;  
    private Button clearBtn = null;  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_geometry);  
        CharSequence titleLable = "自定义绘制功能";  
        setTitle(titleLable);  
  
        // 初始化地图  
        mMapView = (MapView) findViewById(R.id.bmapView);  
        mMapView.getController().setZoom(12.5f);  
        mMapView.getController().enableClick(true);  
  
        // UI初始化  
        clearBtn = (Button) findViewById(R.id.btn_clear);  
        resetBtn = (Button) findViewById(R.id.btn_reset);  
        clearBtn.setOnClickListener(this);  
        resetBtn.setOnClickListener(this);  
        resetBtn.setEnabled(false);  
  
        // 界面加载时添加绘制图层  
        addCustomElementsDemo();  
    }  
  
    @Override  
    public void onClick(View v) {  
        if (v == clearBtn) {  
            clearClick();  
            clear
Btn.setEnabled(false); resetBtn.setEnabled(true); } if (v == resetBtn) { resetClick(); clearBtn.setEnabled(true); resetBtn.setEnabled(false); } } /** * 清除所有图层 */ public void clearClick() { mMapView.getOverlays().clear(); } /** * 添加绘制元素 */ public void resetClick() { addCustomElementsDemo(); } /** * 添加点、线、多边形、圆、文字 */ public void addCustomElementsDemo() { GraphicsOverlay graphicsOverlay = new GraphicsOverlay(mMapView); mMapView.getOverlays().add(graphicsOverlay); // 添加点 graphicsOverlay.setData(drawPoint()); // 添加折线 graphicsOverlay.setData(drawLine()); // 添加多边形 graphicsOverlay.setData(drawPolygon()); // 添加圆 graphicsOverlay.setData(drawCircle()); // 绘制文字 TextOverlay textOverlay = new TextOverlay(mMapView); mMapView.getOverlays().add(textOverlay); textOverlay.addText(drawText()); // 执行地图刷新使生效 mMapView.refresh(); } /** * 绘制折线,该折线状态随地图状态变化 * * @return 折线对象 */ public Graphic drawLine() { double mLat = 39.97923; double mLon = 116.357428; int lat = (int) (mLat * 1E6); int lon = (int) (mLon * 1E6); GeoPoint pt1 = new GeoPoint(lat, lon); mLat = 39.94923; mLon = 116.397428; lat = (int) (mLat * 1E6); lon = (int) (mLon * 1E6); GeoPoint pt2 = new GeoPoint(lat, lon); mLat = 39.97923; mLon = 116.437428; lat = (int) (mLat * 1E6); lon = (int) (mLon * 1E6); GeoPoint pt3 = new GeoPoint(lat, lon); // 构建线 Geometry lineGeometry = new Geometry(); // 设定折线点坐标 GeoPoint[] linePoints = new GeoPoint[3]; linePoints[0] = pt1; linePoints[1] = pt2; linePoin