Android 百度地圖簡單定位
阿新 • • 發佈:2019-01-25
package com.example.map__; import java.util.List; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CompoundButton; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.location.Poi; 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.MapStatus; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationConfiguration; import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng; public class MainActivity extends Activity { private MapView mMapView; private BaiduMap mBaiduMap; private LocationClient mLocationClient; private Button requestLocButton; private RadioGroup group; private RadioButton r1; private RadioButton r2; private LocationMode mCurrentMode; private LocationClient mLocClient; public MyLocationListenner myListener = new MyLocationListenner(); private BitmapDescriptor mCurrentMarker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 在使用SDK各元件之前初始化context資訊,傳入ApplicationContext // 注意該方法要再setContentView方法之前實現 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); requestLocButton = (Button) findViewById(R.id.btn); group = (RadioGroup) findViewById(R.id.group); r1 = (RadioButton) findViewById(R.id.r1);r1.setChecked(true); r2 = (RadioButton) findViewById(R.id.r2); mCurrentMode = LocationMode.NORMAL; requestLocButton.setText("普通"); //按鈕的一個監聽,改變改變定點陣圖標的模式 OnClickListener btnClickListener=new OnClickListener() { @Override public void onClick(View v) { switch (mCurrentMode) { case NORMAL: //正常模式 requestLocButton.setText("跟隨"); mCurrentMode=LocationMode.FOLLOWING; mBaiduMap .setMyLocationConfigeration(new MyLocationConfiguration( mCurrentMode, true, mCurrentMarker)); break; case COMPASS: //羅盤模式 requestLocButton.setText("普通"); mCurrentMode = LocationMode.NORMAL; mBaiduMap .setMyLocationConfigeration(new MyLocationConfiguration( mCurrentMode, true, mCurrentMarker)); break; case FOLLOWING: //跟隨模式 requestLocButton.setText("羅盤"); mCurrentMode = LocationMode.COMPASS; mBaiduMap .setMyLocationConfigeration(new MyLocationConfiguration( mCurrentMode, true, mCurrentMarker)); break; default: break; } } }; requestLocButton.setOnClickListener(btnClickListener); OnCheckedChangeListener radioButtonListener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if (checkedId==R.id.r1) { // 傳入null則,恢復預設圖示 mCurrentMarker = null; mBaiduMap .setMyLocationConfigeration(new MyLocationConfiguration( mCurrentMode, true, null)); }else if (checkedId==R.id.r2) { // 修改為自定義marker,即自定義圖示 mCurrentMarker = BitmapDescriptorFactory .fromResource(R.drawable.ic_launcher); mBaiduMap .setMyLocationConfigeration(new MyLocationConfiguration( mCurrentMode, true, mCurrentMarker, Color.RED,Color.YELLOW )); } } }; group.setOnCheckedChangeListener(radioButtonListener); mMapView = (MapView) findViewById(R.id.bmapView); //找到我們的地圖控制元件 mBaiduMap = mMapView.getMap(); //獲得地圖 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); //設定為普通模式的地圖 // 開啟定點陣圖層 mBaiduMap.setMyLocationEnabled(true); mLocClient = new LocationClient(this); //定位用到的一個類 mLocClient.registerLocationListener(myListener); //註冊監聽 ///LocationClientOption類用來設定定位SDK的定位方式, LocationClientOption option = new LocationClientOption(); //以下是給定位設定引數 option.setOpenGps(true); // 開啟gps option.setCoorType("bd09ll"); // 設定座標型別 option.setScanSpan(1000); mLocClient.setLocOption(option); mLocClient.start(); } boolean isFirstLoc = true; // 是否首次定位 public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // map view 銷燬後不在處理新接收的位置 if (location == null || mMapView == null) { return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此處設定開發者獲取到的方向資訊,順時針0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); if (isFirstLoc) { isFirstLoc = false; LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(18.0f); mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } } public void onReceivePoi(BDLocation poiLocation) { } } @Override protected void onDestroy() { super.onDestroy(); // 退出時銷燬定位 mLocClient.stop(); // 關閉定點陣圖層 mBaiduMap.setMyLocationEnabled(false); mMapView.onDestroy(); mMapView = null; } @Override protected void onResume() { super.onResume(); // 在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); // 在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理 mMapView.onPause(); } }