百度地图sdk使用(2) 定位
\
百度地图开放地位指南:点击打开链接
(1)LocationtClient
DBLocationListener
设置位置定位回调 LocationClinet.registerLocationListener(DBLocationListener);
(2)通过BaiduMap 设置比例;
//设置缩放比例
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
mBaiduMap.setMapStatus(msu);//设置地图的比例\
(3) LocationClientOption 用来设置sdk的定位方式:
定位模式,返回数据类型, 是否打开GPS,返回地址信息。。。
(4)在清单文件中要定位服务
<!-- 设置定位服务 -->
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>\
\
注意定位的生命周期与Activity绑定
@Override protected void onStart() { super.onStart(); mBaiduMap.setMyLocationEnabled(true); if(!mLocationClient.isStarted()){ mLocationClient.start(); } } @Override protected void onStop() { super.onStop(); mBaiduMap.setMyLocationEnabled(false); if(mLocationClient.isStarted()){ mLocationClient.stop(); } }\
\
\
第一步: LocationClient LocationClient类必须在主线程中声明。需要Context类型的参数。\设置DBLocationListener;
BDLocationListener接口有1个方法需要实现:
1.接收异步返回的定位结果,参数是BDLocation类型参数。
第二步,配置定位SDK参数
设置定位参数包括:定位模式(高精度定位模式,低功耗定位模式和仅用设备定位模式),返回坐标类型,是否打开GPS,是否返回地址信息、位置语义化信息、POI信息等等。
LocationClientOption类,该类用来设置定位SDK的定位方式
\
\
\
\
\
\
package com.chb.mybaiduditu; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.Window; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.location.LocationClientOption.LocationMode; 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; public class MainActivity extends Activity { /** * 百度地图控件 */ private MapView mapView; private BaiduMap mBaiduMap; //定位相关的类 public LocationClient mLocationClient = null; /** * 定位回调事件监听 * @author Administrator */ class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation Location) { Log.i("tag", "--->"+Location.toString()); } } public MyLocationListener myListener ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); //在使用SDK各组件之前初始入Ap化context信息,传plicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); //获取地图控件 mapView = (MapView) findViewById(R.id.main_bmapView); mBaiduMap = mapView.getMap(); //初始化定位 initLocation(); } public void initLocation() { try{ mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类 //设置缩放比例 MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f); mBaiduMap.setMapStatus(msu);//设置地图的比例 myListener = new MyLocationListener(); mLocationClient.registerLocationListener(myListener); //注册监听函数 LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationMode.Hight_Accuracy); /*//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 */ option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系 int span=1000; option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要 option.setOpenGps(true);//可选,默认false,设置是否使用gps option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集 option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要 mLocationClient.setLocOption(option); }catch(Exception e){ e.printStackTrace(); } } @Override protected void onStart() { super.onStart(); mBaiduMap.setMyLocationEnabled(true); if(!mLocationClient.isStarted()){ mLocationClient.start(); } } @Override protected void onStop() { super.onStop(); mBaiduMap.setMyLocationEnabled(false); if(mLocationClient.isStarted()){ mLocationClient.stop(); } } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mapView.onPause(); } /** * 初始化菜单 */ @Override public boolean onCreateOptionsMenu(Menu menu) { //加载菜单 getMenuInflater().inflate(R.menu.main, menu); return true; } /** * 菜单选项 */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_ditu_none: //设置地图类型,为空白地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE); break; case R.id.menu_ditu_normal: //设置地图类型,为正常地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); break; case R.id.menu_ditu_satellite: //设置地图类型,为卫星地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); break; case R.id.menu_ditu_traffic: if (mBaiduMap.isTrafficEnabled()) {//交通地图关闭 mBaiduMap.setTrafficEnabled(false); item.setTitle("交通地图(off)"); }else{//交通地图开启 mBaiduMap.setTrafficEnabled(true); item.setTitle("交通地图(on)"); } break; default: break; } return super.onOptionsItemSelected(item); } }\
\
\
\
\
第一步: