Android 百度地图 多个marker点以及点击事件

百度地图的接入,我这边就不多bb了,网上很多,官方文档也能看的七七八八。

使用之前除了清单文件配置好的话,还有一点就是初始化,尽量再Application中去做初始化

public class MyApp extends Application {
    public static Context myApplication;

    @Override
    public void onCreate() {
        super.onCreate();
        myApplication = getApplicationContext();
        SDKInitializer.initialize(myApplication);
        SDKInitializer.setCoordType(CoordType.BD09LL);
    }
}

 开始进入今天的主题

首先初始地图,这个方法直接copy就行,多的设置也可以再这个方法中去做

private BaiduMap mBaiduMap;
private LocationClient mLocationClient;   

 private void initMap() {
        //设置定位图标
//        MyLocationConfiguration myLocationConfiguration = new //MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL, true, null, 00000000, 00000000);
        // 不显示百度地图Logo
        mapView.removeViewAt(1);
        mBaiduMap = mapView.getMap();

        mBaiduMap.setMyLocationEnabled(true);
//        mBaiduMap.setMyLocationConfiguration(myLocationConfiguration);
        //定位初始化
        mLocationClient = new LocationClient(this);


        //通过LocationClientOption设置LocationClient相关参数
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true); // 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(1000);


        //设置locationClientOption
        mLocationClient.setLocOption(option);

        //注册LocationListener监听器
        mLocationClient.registerLocationListener(mListener);
        //开启地图定位图层
        mLocationClient.start();

        setMaker();//设置marker
    }

 这个方法中去设置marker,以及他的监听,

private List<LatLng> latLngList = new ArrayList<>();
private List<OverlayOptions> optionsList = new ArrayList<>();

private void setMaker() {
    mBaiduMap.clear();//先清除 地图上的覆盖物
    //定义Maker坐标点
    LatLng point = new LatLng(34.8972, 113.9117);
    latLngList.add(new LatLng(34, 113));
    latLngList.add(new LatLng(35, 113));
    latLngList.add(new LatLng(36, 113));
    latLngList.add(new LatLng(37, 113));
    latLngList.add(new LatLng(38, 113)); //一般都是接口请求的数据 我这边自己填充的数据
    //构建Marker图标
    BitmapDescriptor bitmap = BitmapDescriptorFactory
            .fromResource(R.mipmap.icon_safe_type_one);
    //构建MarkerOption,用于在地图上添加Marker
    for (int i = 0; i < 5; i++) {
        Bundle mBundle = new Bundle(); //用来传值 也可以识别点击的是哪一个marker
        mBundle.putString("title", "第" + i + "个marker");
        mBundle.putDouble("lat", latLngList.get(i).latitude);
        mBundle.putDouble("lng", latLngList.get(i).longitude);

        OverlayOptions option = new MarkerOptions()
                .extraInfo(mBundle) //这里bundle 跟maker关联上
    //                    .title("lat="+latLngList.get(i).latitude+"---lng="+latLngList.get(i).longitude) //也可以用title,但是官方提示已经过时了
                .position(latLngList.get(i)) //设置经纬度
                .icon(bitmap);//设置marker图标
        optionsList.add(option);
    }

    //在地图上添加Marker,并显示
    //        mBaiduMap.addOverlay(option);  添加一个marker使用这个
    mBaiduMap.addOverlays(optionsList); //添加marker list 的话,用这个
    mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            Bundle extraInfo = marker.getExtraInfo(); //通过这个方法获取到,你前面塞的值
            String title = extraInfo.getString("title");
            double lat = extraInfo.getDouble("lat");
            double lng = extraInfo.getDouble("lng");
            Toast.makeText(MainActivity.this, title + " ---- " + lat + "----" + lng, Toast.LENGTH_SHORT).show();
            return false;
        }
    });
}

 到此为止,可以运行一下看看结果了,我这边就不多做展示,

 //注册监听器 官方文档上就有的东西,省的大家再去找

private BDAbstractLocationListener mListener = new BDAbstractLocationListener() {
    @Override
    public void onReceiveLocation(BDLocation location) {
        //mapView 销毁后不在处理新接收的位置
        if (location == null || mapView == null) {
            return;
        }
        Log.e("fhxx", location.getLatitude() + " ------------" + location.getLongitude());

        MyLocationData locData = new MyLocationData.Builder()
                .accuracy(location.getRadius())
                // 此处设置开发者获取到的方向信息,顺时针0-360
                .direction(location.getDirection()).latitude(location.getLatitude())
                .longitude(location.getLongitude()).build();
        mBaiduMap.setMyLocationData(locData);

        if (isFirstLoc) {
            isFirstLoc = false;
            LatLng ll = new LatLng(location.getLatitude(),
                    location.getLongitude());
            MapStatus.Builder builder = new MapStatus.Builder();
            builder.target(ll).zoom(19.0f);
            mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
        }
    }
};

猜你喜欢

转载自blog.csdn.net/jiexiao4151/article/details/105688448
今日推荐