Android 百度地圖開發(二)

上一篇把使用百度地圖的基本使用方法介紹了,這一篇繼續上一篇的.
當咱們把百度地圖跑起來了發現,哦!地圖竟然上顯示的竟然是咱們大天朝的帝都,但是我想定位我本身的位置啊!好下來我就說一下如何定位.
    /*************定義的所使用的變量 START**********************************/
    // 百度地圖控件
    private MapView mMapView = null;
    private BaiduMap mBaiduMap;
    private BitmapDescriptor mCurrentMarker;
    private LocationMode mCurrentMode;


    //定位的監聽器
    public MyLocationListener mMyLocationListener;


    //定位的客戶端
    private LocationClient mLocationClient;


    //是不是第一次定位
    private volatile boolean isFristLocation = true;
    private BDLocation mBdLocation;


    private ImageView mImageView;
    /*************定義的所使用的變量 END***********************************/


    private void initBaiduMap() {
        mMapView = (MapView) findViewById(R.id.bmapview);
        /**
         * mCurrentMode = LocationMode.FOLLOWING; // 跟隨模式
         * mCurrentMode = LocationMode.COMPASS; // 羅盤模式
         */
mCurrentMode = LocationMode.NORMAL; // 普通模式LocationMode
        mMyLocationListener = new MyLocationListener();
        mCurrentMarker = BitmapDescriptorFactory.fromResource(R.mipmap.ic_location); // 自定義圖標
        mBaiduMap = mMapView.getMap();
        mBaiduMap.setMyLocationEnabled(true);//設置是否容許定位圖層
        mLocationClient = new LocationClient(this);
        mLocationClient.registerLocationListener(mMyLocationListener);//註冊定位監聽
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true);//打開GPS
        /**
         * setCoorType座標類型分爲三種:
         * bd09ll百度加密經緯度座標
         * bd09百度加密墨卡託座標
         * gcj02國測局加密經緯度座標
         */
        option.setCoorType("bd0911");//設置座標類型
        option.setScanSpan(5000);//定位的時間間隔,單位是mm
        mLocationClient.setLocOption(option);
        mLocationClient.start();
    }
上面的有些類的介紹或者使用方法,參數不明白的能夠參考 http://developer.baidu.com/map/index.php?title=androidsdk百度的官方文檔,比較全面.

    public class MyLocationListener implements BDLocationListener {
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            mBdLocation = bdLocation;
            // MapView 銷燬後不在處理新接收的位置
            if (bdLocation == null || mMapView == null) {
                return;
            }
            // 構造定位數據
            MyLocationData locationData = new MyLocationData.Builder()
                    .accuracy(bdLocation.getRadius())
                    // 此處設置開發者獲取到的方向信息,順時針0-360
                    .direction(0).latitude(bdLocation.getLatitude())
                    .longitude(bdLocation.getLongitude()).build();
            // 設置定位數據
            mBaiduMap.setMyLocationData(locationData);
            // 設置自定義圖標
            mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));
            // 第一次定位時,將地圖位置移動到當前位置
            if (isFristLocation) {
                isFristLocation = false;
                LatLng latLng = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());
                MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);
                mBaiduMap.animateMapStatus(mapStatusUpdate);
            }
            showOtherLocation ();
            showTextOverlay();
        }
    }
MyLocationData的direction方法能夠之後開發根據收據sensor來實時的改變圖標的方向的需求.這樣打開地圖時就能夠定位了.這是有的同窗會發現咱們定位後在把地圖劃到別的地方時,唉咱們彷佛少了一個定位按鈕.是的百度圖的view上彷佛是沒有自帶這個東東的反正我是沒有找到.因此我本身寫了一個這個按鈕,其實很簡單.咱們在xml文件中添加了一個ImageView,其餘的初始化過程就再也不多寫了.
    @Override
    public void onClick(View v) {
        if (mImageView.getId() == v.getId()) {
            requestLocation();
        }
    }
   /**
     * 請求定位
     */
    private void requestLocation() {
        if (mBdLocation != null) {
            //地理座標-->LatLng
            //latitude - 緯度
            //longitude - 經度
            LatLng latLng = new LatLng(mBdLocation.getLatitude(), mBdLocation.getLongitude());
            MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);
            mBaiduMap.animateMapStatus(mapStatusUpdate);
            Toast.makeText(this,"定位成功",Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this,"定位失敗", Toast.LENGTH_SHORT).show();
        }
    }
你們看到了我寫的其實就是使用第一次定位同樣的方式方法.在此我總以爲代碼上有些冗餘.若是有誰有更高明的定位方法給我指點一二!
此次代碼粘貼的比較多介紹的少了些,有的方法不知道怎麼使用或者參數不明確的你們能夠參考: http://developer.baidu.com/map/index.php?title=androidsdk
畢竟鄙人能力時間有限只看了與使用相關的一些方法.OK,你們在使用百度地圖時有時想顯示一下其餘的位置.對於這些開發須要用到圖層.下次爲你們介紹一下圖層的做用和使用.唉個人項目新的功能需求來嘍!又要忙一陣了.其實忙感受挺充實的.
php

相關文章
相關標籤/搜索