標籤:
package com.qg.lizhanqi.baidumapdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.Toast;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.LogoPosition;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private MapView mMapView; private MapView bmapView; private Button btn_location; private Button btn_traffic; private Button btn_moon; private Button btn_normal; private Button btn_radar; private Button btn_navigation; private BaiduMap mBaiduMap; private Button btn_gap; private Button btn_Heat; boolean isFirstIn = true; private LocationClient mLocationClient; private LatLng latLng;//經緯度資料 private BitmapDescriptor mIconLocation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各組件之前初始化context資訊,傳入ApplicationContext //注意該方法要再setContentView方法之前實現 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); initView(); //更改百度logo的位置 mMapView.setLogoPosition(LogoPosition.logoPostionRightBottom); MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f); mBaiduMap.setMapStatus(msu); //定位到當前 location(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_location://定位 MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);//更新我的狀態位置資料 mBaiduMap.animateMapStatus(msu);//動畫效果的回到當前位置,避免了效果過硬的看起來不太友好 break; case R.id.btn_radar://雷達 break; case R.id.btn_navigation://導航 break; case R.id.btn_traffic: //開啟即時交通圖 mBaiduMap.setTrafficEnabled(true); Toast.makeText(MainActivity.this, "開啟了即時交通圖", Toast.LENGTH_SHORT).show(); break; case R.id.btn_moon: //衛星地圖 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); Toast.makeText(MainActivity.this, "開啟了衛星地圖", Toast.LENGTH_SHORT).show(); break; case R.id.btn_normal: //普通地圖 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); Toast.makeText(MainActivity.this, "開啟了普通地圖", Toast.LENGTH_SHORT).show(); break; case R.id.btn_gap: //空白地圖, 基礎地圖瓦片將不會被渲染。在地圖類型中設定為NONE,將不會使用流量下 // 載基礎地圖瓦片圖層。使用情境:與瓦片圖層一起使用,節省流量,提升自訂瓦片圖下載速度。 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);//空白地圖指的是只顯示道路而不顯示其他任何標誌與建築物 Toast.makeText(MainActivity.this, "開啟了空白地圖", Toast.LENGTH_SHORT).show(); break; case R.id.btn_Heat: if (mBaiduMap.isBaiduHeatMapEnabled()) {//如果開啟就關閉,如果關閉就開啟 btn_Heat.setText("開啟熱力圖"); mBaiduMap.setBaiduHeatMapEnabled(false);//關閉熱力圖 Toast.makeText(MainActivity.this, "關閉熱力圖", Toast.LENGTH_SHORT).show(); } else { //開啟熱力圖 mBaiduMap.setBaiduHeatMapEnabled(true); btn_Heat.setText("關閉熱力圖"); Toast.makeText(MainActivity.this, "開啟熱力圖", Toast.LENGTH_SHORT).show(); } break; } } private void location() { mLocationClient = new LocationClient(this);//建立定位端 MyLocationListener myLocationListener = new MyLocationListener();//建立實現BDLocationListener的類 //定位端的監聽器 mLocationClient.registerLocationListener(myLocationListener); //通過LocationClientOption對象給mLocationClient定位設定重要設定 LocationClientOption mLocationClientOption = new LocationClientOption(); mLocationClientOption.setCoorType("bd09ll");//座標類型 mLocationClientOption.setIsNeedAddress(true);//返回當前的位置 mLocationClientOption.setOpenGps(true);//開啟GPS mLocationClientOption.setScanSpan(1000);//每隔多少秒定位一次 mLocationClient.setLocOption(mLocationClientOption); } //定位成功的回調 private class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { MyLocationData locData = new MyLocationData.Builder() .accuracy(bdLocation.getRadius())//精度 .direction((float) bdLocation.getLatitude())//方向 .longitude(bdLocation.getLongitude()) .build();//建立當前位置資料 mBaiduMap.setMyLocationData(locData);//設定當前位置 // 初始化表徵圖 BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.locationicon); // 設定定位元影像層的配置(定位元模式,是否允許方向資訊,使用者自訂定位元影像標) //MyLocationConfiguration.LocationMode.COMPASS//羅盤模式,FOLLOWING跟隨模式 MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL, true, mCurrentMarker); mBaiduMap.setMyLocationConfigeration(config); //獲得經緯度座標 latLng = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); if (isFirstIn) {//使用者第一次進來後定位到當前,因為會即時定位不需要每次定位都設定到當前位置,否則的話使用者拖拽到其他位置還會被拉回來,所以又一次就行了 MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);//更新我的狀態位置資料 mBaiduMap.animateMapStatus(msu);//動畫效果的回到當前位置,避免了效果過硬的看起來不太友好 Toast.makeText(MainActivity.this, "你當前在:" + bdLocation.getAddrStr(), Toast.LENGTH_SHORT).show(); isFirstIn = false; } } } @Override protected void onStart() { super.onStart(); // 開啟定位元影像層 mBaiduMap.setMyLocationEnabled(true); if (!mLocationClient.isStarted()) { mLocationClient.start(); } } @Override protected void onDestroy() { super.onDestroy(); //在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理 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(); if (mLocationClient.isStarted()) { // 當不需要定位元影像層時關閉定位元影像層 mBaiduMap.setMyLocationEnabled(false); } } private void initView() { //擷取地圖控制項引用 mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); btn_location = (Button) findViewById(R.id.btn_location); btn_traffic = (Button) findViewById(R.id.btn_traffic); btn_moon = (Button) findViewById(R.id.btn_moon); btn_normal = (Button) findViewById(R.id.btn_normal); btn_radar = (Button) findViewById(R.id.btn_radar); btn_navigation = (Button) findViewById(R.id.btn_navigation); btn_location.setOnClickListener(this); btn_traffic.setOnClickListener(this); btn_moon.setOnClickListener(this); btn_normal.setOnClickListener(this); btn_radar.setOnClickListener(this); btn_navigation.setOnClickListener(this); btn_gap = (Button) findViewById(R.id.btn_gap); btn_gap.setOnClickListener(this); btn_Heat = (Button) findViewById(R.id.btn_Heat); btn_Heat.setOnClickListener(this); }}
百度地圖基本使用