Android中对百度地图进行标示

本篇文章主要介绍如何在百度地图上添加Overlay(即图层或覆盖物)。

     最新的百度API请进入:http://developer.baidu.com/map/sdkandev-6.htm#.E7.AE.80.E4.BB.8B3

Overlay简介
      Overlay通常被译为“图层”或“覆盖物”。所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线、多边形和圆)、定位图标等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。
      目前百度地图SDK支持多种类型的覆盖物,可以满足用户的各种需求。用户可根据自己的实际需求自由添加各种类型的覆
 盖物,且不会产生冲突。此外,用户可以根据添加图层的顺序来控制覆盖物显示的顺序(图片图层除外)。                 

百度地图SDK为开发者们提供了如下类型的地图覆盖物:

  • 我的位置图层(MyLocationOverlay):用于显示用户当前位置的图层(支持自定义位置图标);

  • Poi搜索结果图层(PoiOverlay):用于显示兴趣点搜索结果的图层;                

  • 路线图层(RouteOverlay):公交、步行和驾车线路图层,将公交、步行和驾车出行方案的路线及关键点显示在地图上(起、终点图标用户可自定义);

  • 公交换乘图层(TransitOverlay):公交换乘线路图层,将某一特定地区的公交出行方案的路线及换乘位置显示在地图上(起、终点图标用户可自定义);

  • 自定义图层(ItemizedOverlay):可将一个或多个兴趣点绘制到地图上,且支持自定义图标(支持动态更新Item位置、图标);

  • 弹出窗图层(PopupOverlay):在地图上显示一个弹出窗口;                

  • 几何图形绘制图层(GraphicsOverlay):用于绘制点、线、圆、矩形、凸多边形等几何图形的图层;                

  • 文字绘制图层(TextOverlay):用于绘制文字的图层。

  • 图片图层(GroundOverlay):用于展示用户传入图片的图层。

注:除弹出窗图层外,其他各个图层均已实现多实例。

MapView使用一个List管理覆盖物,通过向MapView.getOverlays() add或remove上述类或其基类的实例即可向地图添加或删除覆盖物。在更新地图覆盖物后,需调用MapView.refresh() 使更新生效。

 

 .自定义图层编程方法:ItemizedOverlay

自v2.1.2开始,自定义图层支持动态更新Item位置、图标。

在地图上显示一个或一组覆盖物。

从2.0.0版本开始,SDK不支持直接继承Overlay , 用户可通过继承ItemizedOverlay来添加覆盖物。

添加覆盖物的一般流程如下:

1. 创建OverlayItem,准备overlay数据;

2. 创建ItemizedOverlay实例,调用 addItem(OverlayItem) 接口添加overlay。

3. 调用MapView.getOverlays().add()方法添加overlay到mapview中。

4. 调用MapView.refresh() 使Overlay生效

 

/* 
 * 要处理overlay点击事件时需要继承ItemizedOverlay 
 * 不处理点击事件时可直接生成ItemizedOverlay. 
 */  
class OverlayTest extends ItemizedOverlay<OverlayItem> {  
    //用MapView构造ItemizedOverlay  
    public OverlayTest(Drawable mark,MapView mapView){  
            super(mark,mapView);  
    }  
    protected boolean onTap(int index) {  
        //在此处理item点击事件  
        System.out.println("item onTap: "+index);  
        return true;  
    }  
        public boolean onTap(GeoPoint pt, MapView mapView){  
                //在此处理MapView的点击事件,当返回 true时  
                super.onTap(pt,mapView);  
                return false;  
        }  
        // 自2.1.1 开始,使用 add/remove 管理overlay , 无需重写以下接口  
        /* 
        @Override 
        protected OverlayItem createItem(int i) { 
                return mGeoList.get(i); 
        } 
        
        @Override 
        public int size() { 
                return mGeoList.size(); 
        } 
        */  
}          
   
/** 
 *  在想要添加Overlay的地方使用以下代码, 
 *  比如Activity的onCreate()中 
 */  
//准备要添加的Overlay  
double mLat1 = 39.90923;  
double mLon1 = 116.397428;  
double mLat2 = 39.9022;  
double mLon2 = 116.3922;  
double mLat3 = 39.917723;  
double mLon3 = 116.3722;  
// 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)  
GeoPoint p1 = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6));  
GeoPoint p2 = new GeoPoint((int) (mLat2 * 1E6), (int) (mLon2 * 1E6));  
GeoPoint p3 = new GeoPoint((int) (mLat3 * 1E6), (int) (mLon3 * 1E6));  
//准备overlay图像数据,根据实情情况修复  
Drawable mark= getResources().getDrawable(R.drawable.icon_marka);  
//用OverlayItem准备Overlay数据  
OverlayItem item1 = new OverlayItem(p1,"item1","item1");  
//使用setMarker()方法设置overlay图片,如果不设置则使用构建ItemizedOverlay时的默认设置  
OverlayItem item2 = new OverlayItem(p2,"item2","item2");  
item2.setMarker(mark);  
OverlayItem item3 = new OverlayItem(p3,"item3","item3");  
   
//创建IteminizedOverlay  
OverlayTest itemOverlay = new OverlayTest(mark, mMapView);  
//将IteminizedOverlay添加到MapView中  
  
mMapView.getOverlays().clear();  
mMapView.getOverlays().add(itemOverlay);  
   
//现在所有准备工作已准备好,使用以下方法管理overlay.  
//添加overlay, 当批量添加Overlay时使用addItem(List<OverlayItem>)效率更高  
itemOverlay.addItem(item1);  
itemOverlay.addItem(item2);  
itemOverlay.addItem(item3);  
mMapView.refresh();  
//删除overlay .  
//itemOverlay.removeItem(itemOverlay.getItem(0));  
//mMapView.refresh();  
//清除overlay  
// itemOverlay.removeAll();  
// mMapView.refresh(); 

 


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值