[baidu] 12_百度地图加强_搜索_路线检索_定位

Android 4.0

百度地图加强_搜索_路线检索_定位

1、百度地图定位v4.0开发指南:
http://developer.baidu.com/map/geosdk-android-developv4.0.htm 
2、百度地图SDK从2.0.0版本起,将定位功能进行了分离,开发者在使用过程中,若需要定位功能,请参定位SDK的相关介绍,需要额外添加locSDK_4.0.jar和liblocSDK4.so文件
public class MyLocationOverlay

一个显示用户当前位置的Overlay。

MyLocationOverlay是一个覆盖物,它绘制用户当前在地图上的位置(精准度),和/或一个嵌入的指南针。子类可通过覆盖方法dispatchTap()处理当前位置的点击事件。

MyLocationOverlay不绑定位置数据来源,可通过 setData()方法设置位置信息,通过setMarker()更新位置图标

核心代码:
1、注册服务
<service
     android:name="com.baidu.location.f"
     android:enabled="true"
     android:process=":remote" >
</service>
2、MyLocation.java
package cn.zengfansheng.mybaidumap.location;
 
import android.os.Bundle;
import android.util.Log;
import cn.zengfansheng.mybaidumap.BaseActivity;
import cn.zengfansheng.mybaidumap.ConstantValue;
 
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;
 
/**
* 定位
*/

public class MyLocation extends BaseActivity {
 
    private static final String TAG = "MyLocation";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
 
        // 1、初始化LocationClient,设置key,注册监听
        init();
 
        mapController.setZoom(17);
    }
 
    // NOTES===========================定位代码实现===========================
    // 参照:http://developer.baidu.com/map/geosdk-android-developv4.0.htm
 
    public LocationClient mLocationClient = null;// 类似HttpClient
    public BDLocationListener myListener;
 
    /**
     * 一、初始化LocationClient,设置key,注册监听
     */

    private void init() {
 
        // 1、初始化LocationClient类
        mLocationClient = new LocationClient(getApplicationContext());// LocationClient类必须在主线程中声明。需要Context类型的参数,推荐用getApplicationConext获取全进程有效的context
 
        // 2、设置SDK的KEY
        mLocationClient.setAK(ConstantValue.KEY);
 
        // 3、注册监听函数
        myListener = new MyBDLocationListener();
        mLocationClient.registerLocationListener(myListener);
 
        // 4、设置定位参数
        setLocationOption();
 
        // 5、发起定位请求
        sendRequest();
    }
 
    /**
     * 二、实现BDLocationListener接口
     */

    private class MyBDLocationListener implements BDLocationListener {
 
        // 1.接收异步返回的定位结果,参数是BDLocation类型参数
        @Override
        public void onReceiveLocation(BDLocation location) {
            if (location == null) {
                return;
            }
            StringBuffer sb = new StringBuffer(256);
            sb.append("time : ");
            sb.append(location.getTime());
            sb.append("\nerror code : ");
            sb.append(location.getLocType());
            sb.append("\nlatitude : ");
            sb.append(location.getLatitude());
            sb.append("\nlontitude : ");
            sb.append(location.getLongitude());
            sb.append("\nradius : ");
            sb.append(location.getRadius());
            if (location.getLocType() == BDLocation.TypeGpsLocation) {
                sb.append("\nspeed : ");
                sb.append(location.getSpeed());
                sb.append("\nsatellite : ");
                sb.append(location.getSatelliteNumber());
            } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
                sb.append("\naddr : ");
                sb.append(location.getAddrStr());
            }
            Log.i(TAG, sb.toString());
 
            MyLocationOverlay myLocationOverlay = new MyLocationOverlay(mMapView);
            LocationData data = new LocationData();
            data.latitude = location.getLatitude();
            data.longitude = location.getLongitude();
            myLocationOverlay.setData(data);
 
            mMapView.getOverlays().clear();// 清除之前定位留下来的Overlay覆盖物
            mMapView.getOverlays().add(myLocationOverlay);
            mMapView.refresh();
            mapController.animateTo(new GeoPoint((int)(data.latitude*1E6),(int)(data.longitude*1E6)));
        }
 
        // 2.接收异步返回的POI查询结果,参数是BDLocation类型参数。
        @Override
        public void onReceivePoi(BDLocation poiLocation) {
        }
    }
 
    /**
     * 三、设置定位参数:设置定位参数包括:定位模式(单次定位,定时定位),返回坐标类型,是否打开GPS等等。eg:
     */

    private void setLocationOption() {
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true);
        option.setAddrType("all");// 返回的定位结果包含地址信息
        option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
        option.setScanSpan(3000);// 设置发起定位请求的间隔时间为5000ms
        option.disableCache(true);// 禁止启用缓存定位
        option.setPoiNumber(5); // 最多返回POI个数
        option.setPoiDistance(1000); // poi查询距离
        option.setPoiExtraInfo(true); // 是否需要POI的电话和地址等详细信息
        mLocationClient.setLocOption(option);
    }
 
    /**
     * 四、发起定位请求:发起定位请求。请求过程是异步的,定位结果在上面的监听函数onReceiveLocation中获取。
     */

    private void sendRequest() {
        if (mLocationClient != null && mLocationClient.isStarted())
            mLocationClient.requestLocation();
        else
            Log.d(TAG, "locClient is null or not started");
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        if (mLocationClient == null) {
            mLocationClient = new LocationClient(getApplicationContext());
        }
        mLocationClient.start();
    }
 
    @Override
    protected void onPause() {
        super.onPause();
        if (mLocationClient!=null) {
            mLocationClient.stop();
            mLocationClient = null;
        }
    }
}
结果: