百度地圖的使用-定位-獲取位置信息

目標:實現定位到當前所在位置git

  1. 實現當前定位
  2. 獲取當前地址,省份,街道等
  3. 獲取經緯度
  4. 修改縮放比例
  5. 去除百度地圖logo
  6. 修改定位圖片以下:

    clipboard.png

效果圖:ide

clipboard.png

上代碼函數

public class MainActivity extends AppCompatActivity {

    private MapView mMapView = null;
    BaiduMap mBaiduMap;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //在使用SDK各組件以前初始化context信息,傳入ApplicationContext
        //注意該方法要再setContentView方法以前實現
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        //獲取地圖控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();
        //移除baidu的logo
        mMapView.removeViewAt(1);
        mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(20.0f).build()));
        mLocationClient = new LocationClient(getApplicationContext());
        //聲明LocationClient類
        mLocationClient.registerLocationListener(myListener);
        // 開啓定位圖層
        mBaiduMap.setMyLocationEnabled(true);
        //註冊監聽函數
        // 設置定位圖層的配置(定位模式,是否容許方向信息,用戶自定義定位圖標)
        BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory
                .fromResource(R.drawable.aa);
        MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.FOLLOWING, true, mCurrentMarker);
        mBaiduMap.setMyLocationConfiguration(config);
//        getLocation();
        getlatAndLng();
//        mLocationClient.start();


    }

    private void showMyLocate(MyLocationData location) {


        MyLocationData locData = new MyLocationData.Builder()
                .accuracy(location.accuracy)
                // 此處設置開發者獲取到的方向信息,順時針0-360
                .direction(location.direction).latitude(location.latitude)
                .longitude(location.longitude).build();
        // 設置定位數據
        mBaiduMap.setMyLocationData(locData);



//        mBaiduMap.setMyLocationEnabled(false);

    }


    public LocationClient mLocationClient = null;
    private MyLocationListener myListener = new MyLocationListener();

    private void getLocation() {

        LocationClientOption option = new LocationClientOption();

        option.setIsNeedAddress(true);
        //可選,是否須要地址信息,默認爲不須要,即參數爲false
        //若是開發者須要得到當前點的地址信息,此處必須爲true

        mLocationClient.setLocOption(option);
        //mLocationClient爲第二步初始化過的LocationClient對象
        //需將配置好的LocationClientOption對象,經過setLocOption方法傳遞給LocationClient對象使用
        //更多LocationClientOption的配置,請參照類參考中LocationClientOption類的詳細說明

        mLocationClient.start();

    }

    private void getlatAndLng() {


        LocationClientOption option = new LocationClientOption();

        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        //可選,設置定位模式,默認高精度
        //LocationMode.Hight_Accuracy:高精度;
        //LocationMode. Battery_Saving:低功耗;
        //LocationMode. Device_Sensors:僅使用設備;

        option.setCoorType("bd09ll");
        //可選,設置返回經緯度座標類型,默認gcj02
        //gcj02:國測局座標;
        //bd09ll:百度經緯度座標;
        //bd09:百度墨卡託座標;
        //海外地區定位,無需設置座標類型,統一返回wgs84類型座標

        option.setScanSpan(1000);
        //可選,設置發起定位請求的間隔,int類型,單位ms
        //若是設置爲0,則表明單次定位,即僅定位一次,默認爲0
        //若是設置非0,需設置1000ms以上纔有效

        option.setOpenGps(true);
        //可選,設置是否使用gps,默認false
        //使用高精度和僅用設備兩種定位模式的,參數必須設置爲true

        option.setLocationNotify(true);
        //可選,設置是否當GPS有效時按照1S/1次頻率輸出GPS結果,默認false

        option.setIgnoreKillProcess(false);
        //可選,定位SDK內部是一個service,並放到了獨立進程。
        //設置是否在stop的時候殺死這個進程,默認(建議)不殺死,即setIgnoreKillProcess(true)

        option.SetIgnoreCacheException(false);
        //可選,設置是否收集Crash信息,默認收集,即參數爲false

        option.setWifiCacheTimeOut(5 * 60 * 1000);
        //可選,7.2版本新增能力
        //若是設置了該接口,首次啓動定位時,會先判斷當前WiFi是否超出有效期,若超出有效期,會先從新掃描WiFi,而後定位

        option.setEnableSimulateGps(false);
        //可選,設置是否須要過濾GPS仿真結果,默認須要,即參數爲false

        mLocationClient.setLocOption(option);
        //mLocationClient爲第二步初始化過的LocationClient對象
        //需將配置好的LocationClientOption對象,經過setLocOption方法傳遞給LocationClient對象使用
        //更多LocationClientOption的配置,請參照類參考中LocationClientOption類的詳細說明
        mLocationClient.start();
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理
        // 當不須要定位圖層時關閉定位圖層
        mBaiduMap.setMyLocationEnabled(false);
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理
        mMapView.onPause();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_map_normal:
                mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
                break;
            case R.id.menu_map_satellite:
                mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
                break;
            case R.id.menu_map_none:
                mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);
                break;

        }
        return true;
    }


    class MyLocationListener extends BDAbstractLocationListener {


        @Override
        public void onReceiveLocation(BDLocation bdLocation) {

            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(bdLocation.getRadius())
                    // 此處設置開發者獲取到的方向信息,順時針0-360
                    .direction(bdLocation.getDirection()).latitude(bdLocation.getLatitude())
                    .longitude(bdLocation.getLongitude()).build();
            mBaiduMap.setMyLocationData(locData);

            String addr = bdLocation.getAddrStr();    //獲取詳細地址信息
            String country = bdLocation.getCountry();    //獲取國家
            String province = bdLocation.getProvince();    //獲取省份
            String city = bdLocation.getCity();    //獲取城市
            String district = bdLocation.getDistrict();    //獲取區縣
            String street = bdLocation.getStreet();    //獲取街道信息
            showMyLocate(locData);
        }
    }
}
相關文章
相關標籤/搜索