Android百度定位获取经纬度
Android百度定位获取经纬度
一、百度定位误差问题:参考一片文章
http://blog.****.net/shaoyezhangliwei/article/details/44830301
1.基站精度为平均200米左右(100-300米),视运营商基站覆盖范围而定。
2.WIFI精度为100米左右(30-200米)。
3.GPS精度为10米左右(取决于手机芯片),比较费电,且在室内不可用。
a.“Htc one”:GPS误差1-3米
b.“htc t328w”“红米1s”“联想”:GPS误差15-30米
c.三星:GPS误差200米,稳定后也是80米左右
二、百度定位开发
1.进入百度地图开发平台:http://lbsyun.baidu.com/ 注册
2.认证为开发者
3.进入“API控制台”,创建应用

4.根据提示填入,获取百度地图开发AK
5.在“开发”--“Android定位SDK”-- “相关下载”-- “全部下载”或者“一键下载”,下载so文件和jar文件
6.将jar文件放入项目的libs文件夹下,在libs文件夹下新建armeabi文件夹,并将so文件放入armeabi文件夹下。
注:之前把armeabi -- so文件放在了src - jniLibs文件夹下,导致162,获取到 的经纬度4.9e-324
如果没有给予权限会出现62错误,手机处于飞行模式
7.在项目的build.gradle文件中添加如下代码
8.在清单文件中添加如下代码
9.编写定位监听
11.获取到经纬度之后,在百度地图上验证,输入地址:
http://api.map.baidu.com/lbsapi/getpoint/index.html
一、百度定位误差问题:参考一片文章
http://blog.****.net/shaoyezhangliwei/article/details/44830301
1.基站精度为平均200米左右(100-300米),视运营商基站覆盖范围而定。
2.WIFI精度为100米左右(30-200米)。
3.GPS精度为10米左右(取决于手机芯片),比较费电,且在室内不可用。
a.“Htc one”:GPS误差1-3米
b.“htc t328w”“红米1s”“联想”:GPS误差15-30米
c.三星:GPS误差200米,稳定后也是80米左右
二、百度定位开发
1.进入百度地图开发平台:http://lbsyun.baidu.com/ 注册
2.认证为开发者
3.进入“API控制台”,创建应用
4.根据提示填入,获取百度地图开发AK
5.在“开发”--“Android定位SDK”-- “相关下载”-- “全部下载”或者“一键下载”,下载so文件和jar文件
6.将jar文件放入项目的libs文件夹下,在libs文件夹下新建armeabi文件夹,并将so文件放入armeabi文件夹下。
注:之前把armeabi -- so文件放在了src - jniLibs文件夹下,导致162,获取到 的经纬度4.9e-324
如果没有给予权限会出现62错误,手机处于飞行模式
7.在项目的build.gradle文件中添加如下代码
android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
dependencies {
compile files('libs/BaiduLBS_Android.jar')
}
8.在清单文件中添加如下代码
<!-- 百度API所需权限 --> <!-- 这个权限用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <!-- 用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET" /> <!-- SD卡读取权限,用户写入离线定位数据--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 百度定位设置AK--> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="DuPAZpXdWDDQ9PIhtZZypyyMxkrHNqxz" /> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
9.编写定位监听
public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { Log.e("LKing","定位type = "+location.getLocType()); Log.e("LKing","定位时间 = "+location.getTime()); Log.e("LKing","定位纬度 = "+location.getLatitude()); Log.e("LKing","定位经度 = "+location.getLongitude()); Log.e("LKing","定位精准度 = "+location.getRadius()); if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果 Log.e("LKing","当前为GPS定位--------------"); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果 Log.e("LKing","当前为网络定位--------------"); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果 Log.e("LKing","当前为离线定位--------------"); } else if (location.getLocType() == BDLocation.TypeServerError) { Log.e("LKing","当前定位失败--------------"); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { Log.e("LKing","当前网络不通--------------"); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { Log.e("LKing","当前为手机处于飞行模式,可以试着重启手机--------------"); } } }
10.开始获取定位信息
/** 百度定位获取*/ public LocationClient mLocationClient = null; public BDLocationListener myListener = new MyLocationListener();
/** * 定位 */ private void startLocate() { mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类 mLocationClient.registerLocationListener(myListener); //注册监听函数 LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系 int span = 5000; option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要 option.setOpenGps(true);//可选,默认false,设置是否使用gps option.setLocationNotify(true);//可选,默认false,设置是否当GPS有效时按照1S/1次频率输出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); //开启定位 mLocationClient.start(); }
11.获取到经纬度之后,在百度地图上验证,输入地址:
http://api.map.baidu.com/lbsapi/getpoint/index.html
把坐标按照 经度,纬度 格式输入输入框,选择坐标反查,就可以查看定位是否准确。经度和纬度之间的逗号要使用英文