Android 利用百度地图SDK实现定位功能

发布时间:2019-06-16 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android 利用百度地图SDK实现定位功能脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

SDK使用说明及下载地址:http://developer.baidu.com/map/sdk-android.htm
map.XMl:

<?xML version="1.0" encoding="utf-8"?>
<LinearLayout >"http://schemas.andROId.COM/apk/res/android"
android_layout_width="match_parent"
android_layout_height="match_parent"
android_orientation="vertical" >
    <com.baidu.mapapi.map.Mapview               <!--地图控件-->
        android_id="@+id/map_view"
        android_layout_width="match_parent"
        android_layout_height="200dp"
        android_clickable="true" />
</LinearLayout>

Map.java:

public class HouseKeeperSeArch extends ActivITy {
PRivate MapView mMapView;
private MapController mMapController = null;
// 定位相关
private LocationClient mLocClient;
private LocationData locData = null;
public MyLocationListener myListener = new MyLocationListener();
boolean isFirstLoc = true;// 是否首次定位
private MyLocationOverlay myLocationOverlay = null; // 定点标志
private BMapManager mBMapMan = null;
private ProgreSSDiaLOG pd;
@override
protected void onCreate(Bundle savedInstancestate) {
    super.onCreate(savedInstanceState);
    mBMapMan = new BMapManager(getApplication());
    mBMapMan.init("Ut5QiVKCvqiXol4Ph6uW3N3h", null);
    pd = new ProgressDialog(this);
    pd.setIndeterminate(true);
    pd.setMessage(getString(R.string.loading_location));
    pd.setCancelable(true);
    pd.show();
    setContentView(R.layout.activity_housekeeper_search);
    initMap();
}

private void initMap() {
    // 地图初始化
    mMapView = (MapView) findViewById(R.id.map_view);
    mMapController = mMapView.getController();
    mMapView.getController().setZoom(16);
    mMapView.getController().enableClick(true);
    mMapView.setBuiltInZoomControls(true);
    // 定位初始化
    mLocClient = new LocationClient(this);
    locData = new LocationData();
    mLocClient.registerLocationListener(myListener);
    LocationClientOption option = new LocationClientOption();
    option.setOpenGps(true);// 打开gps
    option.setCoorType("bd09ll"); // 设置坐标类型
    option.setScanSpan(1000);
    mLocClient.setLocOption(option);
    mLocClient.start();           //启动

    // 定位图层初始化
    myLocationOverlay = new MyLocationOverlay(mMapView);
    // 设置定位数据
    myLocationOverlay.setMarker(getResources().getDrawable(
            R.drawable.location));
    // 添加定位图层
    mMapView.getOverlays().add(myLocationOverlay);
    myLocationOverlay.enablecompass();
    // 修改定位数据后刷新图层生效
    mMapView.refresh();       //加载
}
/**
 * 定位SDK监听函数
 */
public class MyLocationListener implements BDLocationListener {

    @Override
    public void onReceiveLocation(BDLocation location) {
        if (location == null)
            return;
        locData.latitude = location.getLatitude();
        locData.longitude = location.getLongitude();
        // 如果不显示定位精度圈,将accuracy赋值为0即可
        locData.accuracy = location.getRadius();
        // 此处可以设置 locData的方向信息, 如果定位 SDK 未返回方向信息,用户可以自己实现罗盘功能添加方向信息。
        locData.direction = location.getDerect();
        myLocationOverlay.setData(locData);
        // 更新图层数据执行刷新后生效
        mMapView.refresh();
        // 是手动触发请求或首次定位时,移动到定位点
        if (isFirstLoc) {
            // 移动地图到定位点
            Log.d("LocationOverlay", "receive location, aniMATE to it");
            mMapController.animateTo(new GeoPoint(
                    (int) (locData.latitude * 1e6),
                    (int) (locData.longitude * 1e6)));
            if (pd.isShowing())
                pd.dismiss();
        }
        // 首次定位完成
        isFirstLoc = false;

    }

    public void onReceivePoi(BDLocation poiLocation) {
        if (poiLocation == null) {
            return;
        }
    }

}

@Override
protected void onPause() {
    mMapView.onPause();
    if (mBMapMan != null) {
        mBMapMan.stop();
    }
    super.onPause();
}

@Override
protected void onResume() {
    mMapView.onResume();
    if (mBMapMan != null) {
        mBMapMan.start();
    }
    super.onResume();
}

@Override
protected void onDestroy() {
    // 退出时销毁定位
    if (mLocClient != null)
        mLocClient.stop();
    mMapView.destroy();
    if (mBMapMan != null) {
        mBMapMan.destroy();
        mBMapMan = null;
    }
    super.onDestroy();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    mMapView.onSaveInstanceState(outState);

}

@Override
protected void onReStoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    mMapView.onRestoreInstanceState(savedInstanceState);
}

}
效果图:

Android 利用百度地图SDK实现定位功能

脚本宝典总结

以上是脚本宝典为你收集整理的Android 利用百度地图SDK实现定位功能全部内容,希望文章能够帮你解决Android 利用百度地图SDK实现定位功能所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。