添加定位功能
package com.sjy.baidumap;
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.MapStatusUpdate;
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.model.LatLng;
import com.baidu.mapapi.map.MyLocationData;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.Toast;
public class MainActivity extends Activity {
private MapView mMapView = null;// 一個顯示地圖的視圖(View)
private BaiduMap mBaiduMap;
private Context context;
// 定位相關(guān)
private LocationClient mLocationClient;
private MyLocationListener mLocationListener;
private boolean isFirstIn = true;
private double mLatitude;// 緯度
private double mLongtitude;// 經(jīng)度
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 在使用SDK各組件之前初始化context信息,傳入ApplicationContext
// 注意該方法要再setContentView方法之前實現(xiàn)
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
this.context = this;
initView();
initLocation();
}
private void initLocation() {
mLocationClient = new LocationClient(this);
mLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mLocationListener);
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
option.setOpenGps(true);
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
}
private void initView() {
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();// 獲取地圖控制器
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15.0f);// 設(shè)置地圖縮放級別
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
// 開始定位
mBaiduMap.setMyLocationEnabled(true);
if (!mLocationClient.isStarted())
mLocationClient.start();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
// 停止定位
mBaiduMap.setMyLocationEnabled(false);
mLocationClient.stop();
}
@Override
protected void onDestroy() {
super.onDestroy();
// 在activity執(zhí)行onDestroy時執(zhí)行mMapView.onDestroy(),實現(xiàn)地圖生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
// 在activity執(zhí)行onResume時執(zhí)行mMapView. onResume (),實現(xiàn)地圖生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
// 在activity執(zhí)行onPause時執(zhí)行mMapView. onPause (),實現(xiàn)地圖生命周期管理
mMapView.onPause();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.id_map_commen:
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case R.id.id_map_site:
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
case R.id.id_map_traffic:
if (mBaiduMap.isTrafficEnabled()) {
mBaiduMap.setTrafficEnabled(false);
item.setTitle("實時交通(off)");
} else {
mBaiduMap.setTrafficEnabled(true);
item.setTitle("實時交通(on)");
}
break;
case R.id.id_map_location:
centerToMyLocation();
break;
}
return super.onOptionsItemSelected(item);
}
// 定位到我的位置
private void centerToMyLocation() {
LatLng latLng = new LatLng(mLatitude, mLongtitude);// 地理坐標基本數(shù)據(jù)結(jié)構(gòu)
MapStatusUpdate msu // 描述地圖狀態(tài)將要發(fā)生的變化
= MapStatusUpdateFactory.newLatLng(latLng);// 設(shè)置地圖新中心點
mBaiduMap.animateMapStatus(msu);// 以動畫方式更新地圖狀態(tài),動畫耗時 300 ms
}
private class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
MyLocationData data = new MyLocationData.Builder()// 定位數(shù)據(jù)
.accuracy(location.getRadius())// 設(shè)置定位數(shù)據(jù)的精度信息,單位:米
.latitude(location.getLatitude())// 設(shè)置定位數(shù)據(jù)的緯度
.longitude(location.getLongitude())// 設(shè)置定位數(shù)據(jù)的經(jīng)度
.build();// 構(gòu)建生成定位數(shù)據(jù)對象
mBaiduMap.setMyLocationData(data);// 設(shè)置定位數(shù)據(jù), 只有先允許定位圖層后設(shè)置數(shù)據(jù)才會生效
mLatitude = location.getLatitude();
mLongtitude = location.getLongitude();
// MyLocationConfiguration config = new
// MyLocationConfiguration(LocationMode.NORMAL, ar, arg2)
if (isFirstIn) {
// LatLng latLng = new LatLng(location.getLatitude(),
// location.getLongitude());
// MapStatusUpdate msu =
// MapStatusUpdateFactory.newLatLng(latLng);
// mBaiduMap.animateMapStatus(msu);
centerToMyLocation();
isFirstIn = false;
Toast.makeText(context, location.getAddrStr(), Toast.LENGTH_SHORT).show();
}
}
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。