Android 百度地图开发(二)

前面我们一起了解了百度地图的申请与集成Android 百度地图开发(一),今天我们接着来学习百度地图。

今天主要来了解如下问题:

1.百度地图的生命周期控制

上一篇张我们已经在布局文件里增加了mapView对象,现在我们通过findViewById拿到mapView对象,可以控制mapView的生命周期,然后又可以通过mapView的getmap方法获取到BaiduMap对象,可以对地图进行设置。

 mapView = findViewById(R.id.mapView);
        mBaiduMap = mapView.getMap();

在onResume ,onPause,onDestroy中分别设置MapView的生命周期

 @Override
    protected void onResume() {
        mapView.onResume();
        super.onResume();


    }


    @Override
    protected void onPause() {
        mapView.onPause();
        super.onPause();

    }

    @Override
    protected void onDestroy() {
        mLocationClient.stop();
        mBaiduMap.setMyLocationEnabled(false);

        mapView.onDestroy();
        mapView = null;
        super.onDestroy();

    }

2.百度地图的一些属性设置

交通图,热力图,图层定位等,具体可看官方文档

   //开启交通图,可看路况情况
        mBaiduMap.setTrafficEnabled(true);
        //开启热力图
//        mBaiduMap.setBaiduHeatMapEnabled(true);

        //开启图层定位
        mBaiduMap.setMyLocationEnabled(true);
        mBaiduMap.setIndoorEnable(true);//打开室内图,默认为关闭状态
        mUisettings = mBaiduMap.getUiSettings();
        mUisettings.setCompassEnabled(true);//显示指南针

        mBaiduMap.setOnMapClickListener(onMapClickListener);
        mBaiduMap.setOnMarkerClickListener(onMarkerClickListener);

3.百度地图定位以及中心位置控制

定位需要开启GPS,打开app的位置权限,然后借助百度的BDAbstractLocationListener监听定位的信息,听歌对LocationClient设置监听接收每次定位的位置

 public class MylocationListener extends BDAbstractLocationListener {

        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            //mapView 销毁后不在处理新接收的位置
            if (bdLocation == null || mapView == null) {
                return;
            }
            if (isFirst) {
                isFirst = false;
                SetCenter(bdLocation.getLatitude(), bdLocation.getLongitude());
            }
            MyLocationData locData = new MyLocationData.Builder()
//                    .accuracy(bdLocation.getRadius())
//                    // 此处设置获取到的方向信息,顺时针0-360
//                    .direction(bdLocation.getDirection())
                    .latitude(bdLocation.getLatitude())
                    .longitude(bdLocation.getLongitude()).build();
            mBaiduMap.setMyLocationData(locData);
        }
    }


 //初始化中心位置
    private void SetCenter(double lat, double lon) {
        LatLng cenpt = new LatLng(lat, lon); //设定中心点坐标
        //图标  设置中心覆盖物
//        BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.man);
//        // 构建MarkerOption,用于在地图上添加
//        OverlayOptions option = new MarkerOptions().position(cenpt).icon(bitmap).draggable(true);
//        // 在地图上添加Marker,并显示
//        mBaiduMap.addOverlay(option);


        //移动到中心点
        MapStatus mMapStatus = new MapStatus.Builder()//定义地图状态
                .target(cenpt)
                .zoom(16)
                .build();  //定义Map对象StatusUpdate,以便描述地图状态将要发生的变化
        MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
        mBaiduMap.setMapStatus(mMapStatusUpdate);//改变地图状态

        AddOverLays();


    }

 //定位
    private void GetLocations() {
        mLocationClient = new LocationClient(this);
        LocationClientOption option = new LocationClientOption();
        //开启gps
        option.setOpenGps(true);
        //设置坐标类型
        option.setCoorType("bd0911");
        //设置刷新时间
        option.setScanSpan(1000);

        mLocationClient.setLocOption(option);

        //注册位置信息监听
        MylocationListener mylocationListener = new MylocationListener();
        mLocationClient.registerLocationListener(mylocationListener);

        mLocationClient.start();
    }

4.百度地图overlays

地图的marker有点、线,弧线,各种面等,详情请看http://lbsyun.baidu.com/index.php?title=androidsdk/guide/render-map/point

下面简单的绘制一下点、线

 private void AddOverLays() {
        //绘制点
        MapUtils.getInstance().DrawMarkersPoint(R.mipmap.ic_bjsj,22.532d,114.0088d,mBaiduMap);
        List<LatLng> points=new ArrayList<>();
        points.add(new LatLng(22.530d,114.0007d));
        points.add(new LatLng(22.551d,114.01101d));
        points.add(new LatLng(22.541d,114.00087d));
//        绘制线
        MapUtils.getInstance().DrawMarkerLine(points, Color.parseColor("#0000ff"),12,mBaiduMap);

    }

MapUtils代码:

package com.kty.inspection.Utils;

import android.graphics.Point;
import android.os.Bundle;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.PolygonOptions;
import com.baidu.mapapi.map.PolylineOptions;
import com.baidu.mapapi.model.LatLng;

import java.util.List;

/**
 * author   : 肖波
 * e-mail   : xiaoboabc168@163.com
 * date     :  2019/2/22.
 */

public class MapUtils {

    private MapUtils() {

    }

    public static MapUtils getInstance() {
        return MapUtilsManager.instance;
    }

    public static class MapUtilsManager {
        private static final MapUtils instance = new MapUtils();
    }

    /**
     * 地图上添加标记点
     *
     * @param drawableId 要描绘的图片资源id
     * @param latitude   纬度
     * @param longitude  经度
     * @param baiduMap   百度地图对象
     */
    public void DrawMarkersPoint(int drawableId, double latitude, double longitude, BaiduMap baiduMap) {
        if (baiduMap == null) {
            return;
        }
        //定义Maker坐标点
        LatLng latLng = new LatLng(latitude, longitude);
        //构建Marker图标
        BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(drawableId);
        //构建MarkerOption,用于在地图上添加Marker
        OverlayOptions options = new MarkerOptions().position(latLng).icon(bitmap).animateType(MarkerOptions.MarkerAnimateType.jump).visible(true);

        //在地图上添加Marker,并显示
        baiduMap.addOverlay(options);

    }


    /**
     * 画marker点
     * @param options OverlayOptions
     * @param baiduMap 地图对象
     */
    public void DrawMarkerPoint(OverlayOptions options,BaiduMap baiduMap){
        if (baiduMap==null || options==null){
            return;
        }
//        OverlayOptions op=new MarkerOptions()
                .position()//位置坐标,latLng对象
//                .alpha(0.8f)//透明度0-1
//                .anchor(0.8f,1)//描点比例
//                .animateType(MarkerOptions.MarkerAnimateType.jump)//动画类型,none  drop grow jump
//                .draggable(true)//是否可拖拽
//                .extraInfo(new Bundle())//额外信息
//                .fixedScreenPosition(new Point(40,80))//位于屏幕位置,参数坐标点point
//                .flat(true)//是否平贴地图
//                .icon(BitmapDescriptorFactory.fromResource(0))//ico,BitmapDescriptor对象
                .icons()//
//                .perspective(true)//是否开启近大远小效果
//                .rotate(270)//旋转角度
//                .title("maker1")//标题
//                .visible(true);//是否显示

        baiduMap.addOverlay(options);


    }

    /**
     * 地图marker画线
     * @param points
     * @param color
     * @param width
     * @param baiduMap
     */
    public void DrawMarkerLine(List<LatLng> points,int color,int width,BaiduMap baiduMap){

        OverlayOptions options=new PolylineOptions()
                .width(12)
                .points(points)
                .color(color);
        baiduMap.addOverlay(options);

    }




}

以上为今天的内容,感谢阅读! 

 

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值