Android 百度地图添加多个Mark点并且Mark点的点击事件

本文介绍在百度地图基础地图上循环添加多个Mark点并设置点击事件的方法。业务场景包括请求服务器获取地址、地理编码得到经纬度、循环添加Mark点和设置点击事件。开发步骤有加载基础地图、新建实体类、遍历地址编码、在回调中添加Mark及设置点击事件,最后用Bundle传递数据。

在百度地图的基础地图上循环添加多个Mark点,并且对每个Mark点进行点击事件。

业务场景描述:

1.请求服务器得到多个地址(最好比较详细的地址)

2.拿到地址进行地理编码得到经纬度

3.循环添加Mark点

4.对Mark点进行点击事件

废话少说先来几张效果图:

 

开发步骤:

1.加载基础地图 (不多说)

2.新建地图要展示的实体类Bean对象  如下:

public class mapInfoBean implements Serializable{
    public  String debtor;
    public String  visitState;
    public  String customer;
    public  String addressDeail;
    public  String caseCodeNumber;
    public  String batchNumber;
    public String getDebtor() {
        return debtor;
    }
    
    public void setDebtor(String debtor) {
        this.debtor = debtor;
    }
    
    public String getVisitState() {
        return visitState;
    }

    public void setVisitState(String visitState) {
        this.visitState = visitState;
    }

    public String getCustomer() {
        return customer;
    }

    public void setCustomer(String customer) {
        this.customer = customer;
    }

    public String getAddressDeail() {
        return addressDeail;
    }

    public void setAddressDeail(String addressDeail) {
        this.addressDeail = addressDeail;
    }

    public String getCaseCodeNumber() {
        return caseCodeNumber;
    }

    public void setCaseCodeNumber(String caseCodeNumber) {
        this.caseCodeNumber = caseCodeNumber;
    }

    public String getBatchNumber() {
        return batchNumber;
    }

    public void setBatchNumber(String batchNumber) {
        this.batchNumber = batchNumber;
    }

    public mapInfoBean(String debtor, String visitState, String customer, String addressDeail, String caseCodeNumber, String batchNumber) {
        this.debtor = debtor;
        this.visitState = visitState;
        this.customer = customer;
        this.addressDeail = addressDeail;
        this.caseCodeNumber = caseCodeNumber;
        this.batchNumber = batchNumber;
    }
}

3. 遍历服务器地址 ,并进行编码  这里是循环添加多个展示对象 和遍历多个地址  ,主题代码为:

if (!TextUtils.isEmpty(address)){
    if (!addressData.contains(address)){  //过滤掉相同的地址信息
        addressData.add(address);
        mSearch.geocode(new GeoCodeOption()     //进行编码
                .city("")
                .address(address));
        logUtils.d("地址反编码"+":"+address);
        mapInfoData.add(new mapInfoBean(name,next.getVisitStatusText(),next.getCustomerName(),next.getAddress(),next.getCaseCode(),next.getVisitGuid()));      
    }
          }

4.在编码的回调方法中循环添加Mark

    OnGetGeoCoderResultListener GeoListener = new OnGetGeoCoderResultListener() {
        @Override
        public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
            if (null != geoCodeResult && null != geoCodeResult.getLocation()) {
                if (geoCodeResult == null || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
                    //没有检索到结果
                    return;
                } else {
                    service_flag=true;
                    double latitude = geoCodeResult.getLocation().latitude;
                    double longitude = geoCodeResult.getLocation().longitude;
                    LatLng latLng=new LatLng(latitude,longitude );
                    logUtils.d("地理反编码地址"+"latitude"+latitude+"longitude"+longitude);
                    servicePoint = new LatLng(latitude, longitude);
                    //创建OverlayOptions属性
                     //  lv_mainItemPostion
                    mapInfoBean mapInfoBean=null;
                    if (!click_address_item_flag){

                        mapInfoBean = mapInfoData.get(currrentCount);
                        currrentCount++;    //循环 
                    }else {
                        mapInfoBean = mapInfoData.get(lv_mainItemPostion);
                    }
                        BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.man);
                        OverlayOptions option1 =  new MarkerOptions()
                                .position(servicePoint)
                                .icon(bitmap);
                        marker = (Marker) map.addOverlay(option1);
                        Bundle bundle=new Bundle();
                        bundle.putSerializable("info", mapInfoBean);   //携带对象数据
                        marker.setExtraInfo(bundle);
                    MapStatus mMapStatus = new MapStatus.Builder()
                            .target(latLng)
                            .zoom(15)
                            .build();
                    //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
                    MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//改变地图状态
                    map.animateMapStatus(mMapStatusUpdate);

                }
            }
        }

        @Override
        public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {

        }
    };

5. 对mark 的点击事件

private void onClickMark(Marker marker) {
    Bundle bundle = marker.getExtraInfo();
    if (bundle !=null) {
   final mapInfoBean  bean = (mapInfoBean) bundle.getSerializable("info");  //拿到实体类  就好办事

}

总结:

就是用Bundle传递数据,得到对应的实体

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值