实现地图上显示多mark点,自定义infoWindow,跳转高德地图和百度地图

本文介绍了如何在地图上实现多个标记点的绘制,自定义infoWindow,以及根据用户设备情况跳转至高德地图或百度地图进行导航。详细步骤包括解析网点数据、设置mark点点击事件、利用自定义布局创建infoWindow,以及判断并启动相应地图应用进行导航。同时还提供了经纬度转换的工具类和相关参考资料。
摘要由CSDN通过智能技术生成

这里写图片描述
实现功能如上图所示
1.需要绘制多个mark点,
2.可以点击生成一个自定义的infowindow
3.点击可以根据本机状况跳转高德地图或者百度地图


实现功能
一,绘制多个mark点
前提条件,我们继承好了高德地图和实现了地图绘制,实现了地图蓝点绘制

我们根据接口得到了网点的json数据
这里写图片描述
数据结构是这样的
于是我们解析下数据,

if(netWorkEntity.code.equals("2000")){
data = netWorkEntity.data;                           LoggerUtil.systemOut("AmapNetWorkEntity",netWorkEntity.toString());
if(data!=null){
    for(int i=0;i<data.size();i++){
   
        String position= data.get(i).position;
        String drivingSchoolName=data.get(i).latnames;
        String[] LatLng = positionToLatlng(position);
        Double Markerlongitude = Double.valueOf(LatLng[0].trim());
        Double Markerlatitude = Double.valueOf(LatLng[1].trim());
        aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f)
             .position(new LatLng(Markerlatitude, Markerlongitude))
             .title(drivingSchoolName)
             .draggable(true)                                            
             .icon(BitmapDescriptorFactory.fromResource(R.drawable.mark3)));
                                }
                            }
                        }

在绘制mark点的时候就把,网点的name取出来,以后绘制infowindow的时候有用


二。给mark上绘制自定义的infowindow
在mark点上绘制点击事件

// 定义 Marker 点击事件监听
    AMap.OnMarkerClickListener markerClickListener = new AMap.OnMarkerClickListener() {
        // marker 对象被点击时回调的接口
        // 返回 true 则表示接口已响应事件,否则返回false
        @Override
        public boolean onMarkerClick(Marker marker) {
            marker.showInfoWindow(); // 显示点对应 的infowindow
            return false;

        }
    };
/**
     * 监听自定义infowindow窗口的infowindow事件回调
     */
    @Override
    public View getInfoWindow(Marker marker) {
        View    infoWindow=LayoutInflater.from(this).inflate(R.layout.map_bubble_back,null);//custom_info_window为自定义的layout文件
        TextView name=(TextView)infoWindow.findViewById(R.id.inforwindow_text);
        name.setText( marker.getTitle());
        return infoWindow;
    }

在重写父类的getInfoWindow方法中,我们用自定义的布局做背景,并且吧绘制mark点时候存入的网点名称取了出来

在infowindow的点击回调里边,我们判断当前时候安装了高德地图或者百度地图

  AMap.OnInfoWindowClickListener listener = new AMap.OnInfoWindowClickListener() {

        @Override
        public void onInfoWindowClick(Marker marker) {
            if(isAvilible(MapActivity.this,"com.baidu.BaiduMap")&&isAvilible(MapActivity.this,"com.autonavi.minimap")){
                showPopupWindow(marker.getPosition().latitude,marker.getPosition().longitude);
            }else if(isAvilible(MapActivity.this,"com.baidu.BaiduMap")&&!isAvilible(MapActivity.this,"com.autonavi.minimap")){
                showPopupWindowBaiDu(marker.getPosition().latitude,marker.getPosition().longitude);
            }else if (!isAvilible(MapActivity.this,"com.baidu.BaiduMap")&&isAvilible(MapActivity.this,"com.autonavi.minimap")){
                showPopupWindowGaoDe(marker.getPosition().latitude,marker.getPosition().longitude);
            }else if(!isAvilible(MapActivity.this,"com.baidu.BaiduMap")&&!isAvilible(MapActivity.this,"com.autonavi.minimap")){
            }
        }
    };

跳转不同的popuwindow,
我们把mark点里边的经纬度取出来,赋值给popuwindow,

private void showPopupWindow(double latitude, double longitude) {
        LoggerUtil.i( "fenglatlon",latitude+"");
        LoggerUtil.i( "fenglatlon",longitude+"");
        markLongitude=longitude;
        markLatitude=latitude;
        View contentView= LayoutInflater.from(MapActivity.this).inflate(R.layout.popu_map,null);
        mPopWindow = new PopupWindow(contentView,
                WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, true);
        mPopWindow.setContentView(contentView);
        View map_gaode=(View)contentView.findViewById(R.id.map_gaode);
        View map_baidu=(View)contentView.findViewById(R.id.map_baidu);
        map_gaode.setOnClickListener(this);
        map_baidu.setOnClickListener(this);
        //显示popupwindow
        View rootview=LayoutInflater.from(MapActivity.this).inflate(R.layout.activity_map,null);
        mPopWindow.setAnimationStyle(R.style.contextMenuAnim);
        mPopWindow.showAtLocation(rootview, Gravity.CENTER,0,0);
    }

在popuwindow的创建之后,我们把这个mark点的经纬度取出来,掉时候传输给高德地图或者百度地图

下面是popuwindow两个item的点击事件,分别传递给了高德地图和百度地图

@Override
    public void onClick(View v) {
        int id=v.getId();
        switch (id){
            case R.id.map_gaode:
                double a[]= GPSUtil.gcj02_To_Gps84(markLatitude,markLongitude);//lon 维度  lat 经度
                double lat=a[0];
                double lon=a[1];
                LoggerUtil.i("latlon",lat+"   "+lon);
                Uri mUri = Uri.parse("geo:"+lat+""+
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值