您的位置:首页 > 其它

简单的百度定位

2016-03-07 09:04 274 查看
package com.android1405a.baidumap;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import baidumapsdk.demo.R;

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.map.BaiduMap;

import com.baidu.mapapi.map.BitmapDescriptor;

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.map.MyLocationData;

import com.baidu.mapapi.model.LatLng;

/**

 * 最简单的定位功能

 * 

 */

public class MyLocationDemo extends Activity {

// 定位相关
LocationClient mLocClient; //定位的客户端
public MyLocationListenner myListener = new MyLocationListenner();  //定位监听
BitmapDescriptor mCurrentMarker;  //图片模式信息

MapView mMapView;
BaiduMap mBaiduMap;

boolean isFirstLoc = true;// 是否首次定位

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.myactivity_location);

        

           // 地图初始化

      mMapView = (MapView) findViewById(R.id.bmapView);

      mBaiduMap = mMapView.getMap();

         // 开启定位图层

    mBaiduMap.setMyLocationEnabled(true);

    //设置定位模式,定位图片

    mBaiduMap

           .setMyLocationConfigeration(new MyLocationConfiguration(

           
LocationMode.NORMAL, true, null));

   

    // 定位初始化

    mLocClient = new LocationClient(this);

    mLocClient.registerLocationListener(myListener);

       

    LocationClientOption option = new LocationClientOption();

    option.setOpenGps(true);// 打开gps

   

    option.setCoorType("bd09ll"); // 设置坐标类型

    option.setScanSpan(1000);

   

    option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要

    option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”

       option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLoc

   

    mLocClient.setLocOption(option);

      mLocClient.start();
}

/**
* 定位SDK监听函数
*/
public class MyLocationListenner implements BDLocationListener {

        @Override

        public void onReceiveLocation(BDLocation location) {

            // map view 销毁后不在处理新接收的位置

            if (location == null || mMapView == null) {

                return;

            }

            

         

            Log.i("aaa", "DBlocation="+location.getLatitude()  +"--"+location.getLongitude());

            

            

            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());

                MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);

                

                mBaiduMap.animateMapStatus(u);

            }

            

          

            getLocationInfo(location);

            

        }

public void onReceivePoi(BDLocation poiLocation) {
}
}

private void getLocationInfo(BDLocation location){
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){// GPS定位结果

            sb.append("\nspeed : ");

            sb.append(location.getSpeed());// 单位:公里每小时

            sb.append("\nsatellite : ");

            sb.append(location.getSatelliteNumber());

            sb.append("\nheight : ");

            sb.append(location.getAltitude());// 单位:米

            sb.append("\ndirection : ");

            sb.append(location.getDirection());// 单位度

            sb.append("\naddr : ");

            sb.append(location.getAddrStr());

            sb.append("\ndescribe : ");

            sb.append("gps定位成功");

        } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 网络定位结果

            sb.append("\naddr : ");

            sb.append(location.getAddrStr());

            //运营商信息

            sb.append("\noperationers : ");

            sb.append(location.getOperators());

            sb.append("\ndescribe : ");

            sb.append("网络定位成功");

        } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果

            sb.append("\ndescribe : ");

            sb.append("离线定位成功,离线定位结果也是有效的");

        } else if (location.getLocType() == BDLocation.TypeServerError) {

            sb.append("\ndescribe : ");

            sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");

        } else if (location.getLocType() == BDLocation.TypeNetWorkException) {

            sb.append("\ndescribe : ");

            sb.append("网络不同导致定位失败,请检查网络是否通畅");

        } else if (location.getLocType() == BDLocation.TypeCriteriaException) {

            sb.append("\ndescribe : ");

            sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");

        }

sb.append("\nlocationdescribe : ");

            sb.append(location.getLocationDescribe());// 位置语义化信息

            List<Poi> list = location.getPoiList();// POI数据

            if (list != null) {

                sb.append("\npoilist size = : ");

                sb.append(list.size());

                for (Poi p : list) {

                    sb.append("\npoi= : ");

                    sb.append(p.getId() + " " + p.getName() + " " + p.getRank());

                }

            }

        Log.i("BaiduLocationApiDem", sb.toString());
}

@Override
protected void onPause() {
mMapView.onPause();
super.onPause();
}

@Override
protected void onResume() {
mMapView.onResume();
super.onResume();
}

@Override
protected void onDestroy() {
// 退出时销毁定位
mLocClient.stop();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百度