标注坐标点的图层ItemizedOverlay的使用

1、使用图层ItemizedOverlay标注某个坐标点

// 实现标注item
            /* 生成ItemizedOverlay图层用来标注结果点
             * arg0为mark的Drawable
             * arg1为MapView
             * */
            ItemizedOverlay<OverlayItem> itemOverlay = new ItemizedOverlay<OverlayItem>(
                    null, mMapView);
            /*
             * OverlayItem表示单个overlay数据,如自定义标注,建筑等。是ItemizedOverlay的基本组件,
             * arg0为GeoPoint,确定item的位置
             * arg1为该item的文字片段
             * arg2为该item的标题文本
             */
            OverlayItem item = new OverlayItem(geoPoint, "item的文字片段", "item的标题文本");
            // 得到需要标在地图上的资源
            Drawable marker = getResources().getDrawable(R.drawable.icon_marka);
            // 为maker定义位置和边界(左上右下)
            marker.setBounds(0, 0, marker.getIntrinsicWidth(),
                    marker.getIntrinsicHeight());
            // 给item设置marker
            item.setMarker(marker);
            // 在图层上添加item
            itemOverlay.addItem(item);
            // 清除地图其他图层
            mMapView.getOverlays().clear();
            // 添加一个标注ItemizedOverlay图层
            mMapView.getOverlays().add(itemOverlay);
            // 设置地图默认的缩放级别
            mMapView.getController().setZoom(9);
            // 执行刷新使生效
            mMapView.refresh();

2、使用自定义图层处理点击事件

package com.eroad.component;

import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.baidu.mapapi.map.ItemizedOverlay;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.OverlayItem;
import com.baidu.platform.comapi.basestruct.GeoPoint;

/**
 * @author JL
 * 
 *         要处理overlay点击事件时需要继承ItemizedOverlay 不处理点击事件时可直接生成ItemizedOverlay.
 */
public class MyOverLay extends ItemizedOverlay<OverlayItem> {

    // 处理tap点击的句柄
    private Handler handler_item;

    public MyOverLay(Drawable mark, MapView mapView,Handler handler) {
        super(mark, mapView);
        // TODO Auto-generated constructor stub
        this.handler_item=handler;
    }

    // 在此处理item点击事件,并且一定会触发MapView的点击事件
    //arg0表示多个item中的序号
    @Override
    protected boolean onTap(int index) {
        // TODO Auto-generated method stub
        Log.e("item onTap: " ,""+ index);
        Message message=Message.obtain();
        message.obj=getItem(index);
        handler_item.sendMessage(message);
        return true;
    }

    // 在此处理MapView的点击事件,不一定会触发item点击事件
    @Override
    public boolean onTap(GeoPoint pt, MapView mapView) {
        // TODO Auto-generated method stub
        super.onTap(pt, mapView);
        Log.e("MapView onTap: " ,""+  pt.toString());
        return false;
    }

    public interface CallBack {
        
        public void excuteTap();

    }
}

使用自定义图层

    MyOverLay myOverLay = new MyOverLay(null, mMapView, new Handler() {

                @Override
                public void handleMessage(Message msg) {
                    // TODO Auto-generated method stub
                    super.handleMessage(msg);
                    OverlayItem item = (OverlayItem) msg.obj;
                    Toast.makeText(getApplicationContext(),
                            "坐标点:" + item.getPoint().toString(),
                            Toast.LENGTH_SHORT).show();
                }
            });

Done!

原文地址:https://www.cnblogs.com/xingyyy/p/3617935.html