百度地圖

    很多應用都有獲取自己位置的功能,比如QQ,微信等等都能獲取到自己的位置
 一、核心類簡介
    1.SDKInitializer:初始化SDK配置
    2.MapView:地圖數據顯示
    3.BaiduMap:控制地圖狀態
 二、原理
    Ⅰ.前期準備
      jar包、庫文件引入,key值獲取
    Ⅱ.地圖顯示
	
private BaiduMap baiduMap;
	private MapView mapView;

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

		initSDK();
		setContentView(R.layout.common);

		init();
	}

	private void init() {
		// BaiduMap 管理具體的某一個MapView 操作:旋轉、縮放、移動
		mapView = (MapView) findViewById(R.id.mapview);
		// mapView.showScaleControl(false);// 設置比例尺是否顯示 默認是true
		// mapView.showZoomControls(false);// 設置縮放按鈕是否顯示 默認是true
		baiduMap = mapView.getMap();

		// 改變當前地圖的狀態
		MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15);// 設置縮放到15級,默認是12級
		baiduMap.setMapStatus(mapStatusUpdate);

		// 設置中心點 默認是天安門
		MapStatusUpdate mapStatusUpdatePoint = MapStatusUpdateFactory
				.newLatLng(null);
		baiduMap.setMapStatus(mapStatusUpdatePoint);
	}

	private void initSDK() {
		// 初始化地圖引擎 校驗KEY
		SDKInitializer.initialize(getApplicationContext());// 必須傳遞全局Context
		//創建廣播,返回地圖打開狀態
		IntentFilter filter = new IntentFilter();
		filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
		filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
		registerReceiver(new SDKBroadCast(), filter);
	}
	class SDKBroadCast extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			String result = intent.getAction();
			// 網絡錯誤廣播
			if (result.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
				Toast.makeText(getApplicationContext(), "無網絡", Toast.LENGTH_SHORT).show();
			}
			// KEY 校驗失敗
			else if (result.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
				Toast.makeText(getApplicationContext(), "校驗失敗", Toast.LENGTH_SHORT).show();
			}
		}

	}
	/**
	 * MapView的生命週期與activity一致
	 */
	@Override
	protected void onResume() {
		mapView.onResume();
		super.onResume();
	}
	/**
	 * MapView的生命週期與activity一致
	 */
	@Override
	protected void onPause() {
		mapView.onPause();
		super.onPause();
	}

	/**
	 * MapView的生命週期與activity一致
	 */
	@Override
	protected void onDestroy() {
		mapView.onDestroy();
		super.onDestroy();
	}

     1.首先初始化地圖引擎和校驗key值;並且註冊一個廣播接收者,接收校驗結果和網絡情況等
     2.生成MapView(本質是百度提供的一個佈局文件),通過findViewById返回即可
     3.通過mapView得到地圖狀態控制器BaiduMap
     4.通過MapStatusUpdate設置地圖的狀態
     5.把設置的狀態傳遞給baiduMap.setMapStatus()顯示出地圖
     注意:
	SDKInitializer校驗一定要儘早,否則會出現校驗信息還沒返回就請求數據的情況
	MapView的聲明週期要和activity一樣,否則會有異常拋出
     Ⅲ.設置我的位置
	
private void locate() {
		LocationClient mLocationClient = new LocationClient(getApplicationContext());
		mLocationClient.registerLocationListener(new MyLocationListener());

		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(LocationMode.Hight_Accuracy);// 設置定位模式
		option.setCoorType("bd09ll");// 返回的定位結果是百度經緯度,默認值gcj02
		option.setScanSpan(5000);// 設置發起定位請求的間隔時間爲5000ms
		option.setIsNeedAddress(true);// 返回的定位結果包含地址信息
		option.setNeedDeviceDirect(true);// 返回的定位結果包含手機機頭的方向
		mLocationClient.setLocOption(option);

		baiduMap.setMyLocationEnabled(true);// 打開定位圖層
		//設置我的位置圖標
		icon = BitmapDescriptorFactory
				.fromResource(R.drawable.icon_geo);
		MyLocationConfiguration config = new MyLocationConfiguration(
				MyLocationConfiguration.LocationMode.NORMAL, true, icon);
		baiduMap.setMyLocationConfigeration(config);
	}
	class MyLocationListener implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation result) {
			//得到我的位置數據
			MyLocationData dada = new MyLocationData.Builder()
					.latitude(result.getLatitude())// 設置緯度
					.longitude(result.getLongitude())// 設置經度
					.build();
			baiduMap.setMyLocationData(dada);// 顯示定位信息 只有打開定位圖層 纔有效果
		}

	}

	1.創建LocationClient對象(專門用於位置顯示類)
	2.設置位置監聽器DBLocationListener
	3.通過LocationClientOption設置一些顯示的數據
	4.通過控制器baiduMap把設置的數據呈現在地圖上
  三、小結
	位置的顯示在很多app上應用都很廣泛,此外地圖還有一些其他的內容
	1.圖層設置:衛星圖,交通圖,普通圖
	2.覆蓋物:文字,Marker,泡泡顯示等等
	3.搜索的設置:
		興趣點:在一個範圍內搜索位置
		路線:駕車,公交,步行
	對於每一個內容百度都給出了相應的api來實現,用法都是大同小異的
	剛開始接觸地圖的時候有點蒙逼,不過反覆看了看代碼,自己也敲了敲發現原來步驟都是固定的


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章