百度地图定位原理

定位我们使用的是百度 Android 定位SDKv4.0,我们先了解下定位原理和定位精度

定位原理

使用百度Android定位SDK必须注册GPS和网络使用权限。定位SDK采用GPS、基站、Wi-Fi信号进行定位。当应用程序向定位SDK发起定位请求时,定位SDK会根据应用的定位因素(GPS、基站、Wi-Fi信号)的实际情况(如是否开启GPS、是否连接网络、是否有信号等)来生成相应定位依据进行定位。

用户可以设置满足自身需求的定位依据:

若用户设置GPS优先,则优先使用GPS进行定位,如果GPS定位未打开或者没有可用位置信息,且网络连接正常,定位SDK则会返回网络定位(即Wi-Fi与基站)的最优结果。为了使获得的网络定位结果更加精确,请打开手机的Wi-Fi开关。

定位精度

了解了百度定位的原理和定位精度之后,接下来我们就来使用百度定位SDKv4.0吧

一 . 导入库文件

在使用百度定位SDKv4.0之前,我们要下载最新的库文件,下载地址:点击下载相关库文件,将liblocSDK4.so文件拷贝到libs/armeabi目录下。将locSDK4.0.jar文件拷贝到工程的libs目录下

二 . 一个获取当前位置的工具类

package com.smarteye.baidumap;

import java.util.Calendar;

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.smarteye.adapter.BVCU_PUCFG_GPSData;
import com.smarteye.adapter.BVCU_WallTime;
import com.smarteye.coresdk.BVPU;

import android.content.Context;
import android.util.Log;

public class BaiduLocationTools {
	private LocationClient locationClient;
	private LocationListener listener;

	public BaiduLocationTools(Context context) {
		locationClient = new LocationClient(context.getApplicationContext());
		listener = new LocationListener();
		locationClient.registerLocationListener(listener);

		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(LocationMode.Device_Sensors);
		option.setOpenGps(true);
		option.setTimeOut(10 * 1000);
		option.setCoorType("bd09ll");
		option.setScanSpan(1000);
		option.setIsNeedAddress(true);
		option.setNeedDeviceDirect(true);
		locationClient.setLocOption(option);
	}

	public void startLocationStart() {
		locationClient.start();
	}

	public void stopLocationStart() {
		if (locationClient != null) {
			locationClient.stop();
		}
	}

	private class LocationListener implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			if (location != null) {
				Log.i("BaiduLocationTools", "location.getLocType----->"
						+ location.getLocType());
				GlobalTool.BAIDU_to_WGS84(location);
				double latitude = location.getLatitude();
				double longitude = location.getLongitude();
				BVCU_PUCFG_GPSData data = new BVCU_PUCFG_GPSData();
				BVCU_WallTime time = new BVCU_WallTime();

				Calendar calendar = Calendar.getInstance();
				time.iDay = (char) calendar.get(Calendar.DAY_OF_MONTH);
				time.iHour = ((char) calendar.get(Calendar.HOUR));
				time.iMinute = ((char) calendar.get(Calendar.MINUTE));
				time.iMonth = ((char) (calendar.get(Calendar.MONTH) + 1));
				time.iSecond = ((char) calendar.get(Calendar.SECOND));
				time.iYear = ((short) calendar.get(Calendar.YEAR));
				data.stTime = time;
				data.iLatitude = ((int) (latitude * 10000000));
				data.iLongitude = ((int) (longitude * 10000000));
				Log.i("BaiduLocationTools", "iLatitude------>" + data.iLatitude);
				Log.i("BaiduLocationTools", "iLongitude------>"
						+ data.iLongitude);
				data.bOrientationState = 1;
				data.bAntennaState = 1;
				BVPU.InputGPSData(data);
			}
		}
	}
}
  • BDLocation 封装了定位SDK的定位结果,在BDLocationListener的onReceive方法中获取。通过该类用户可以获取error code,位置的坐标,精度半径,地址等信息,对于其getLocType
    ()方法获取的error code一些情况
  1. 61 : GPS定位结果
  2. 62 : 扫描整合定位依据失败。此时定位结果无效。
  3. 63 : 网络异常,没有成功向服务器发起请求。此时定位结果无效。
  4. 65 : 定位缓存的结果。
  5. 66 : 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果
  6. 67 : 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果
  7. 68 : 网络连接失败时,查找本地离线定位时对应的返回结果
  8. 161: 表示网络定位结果
  9. 162~167: 服务端定位失败
时间: 2024-10-05 13:44:33

百度地图定位原理的相关文章

Android利用百度地图定位

百度地图照着百度的教程做的总是出现报错 请帮我看看错误在那 2013-12-13 15:16168海军 | 分类:百度地图 | 浏览1252次 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.map/com.example.map.MainActivity}: android.view.InflateException: Binary XML file line #11: Error i

百度地图定位记录

百度地图是我们做开发要经经常使用到的,在天朝.我们望谷歌而兴叹! !! 首先我们须要从百度地图API下载相应的API  JAR  以及SO文件,防止百度 官网抽风,俺机智的把里面的东西先所有下载出来给出下载链接例如以下: 百度地图API及工具下载地址 官网事实上以及给出了完整的案列以及开发文档,可是假设照搬的话还是不能成功的. 前面配置啥的还是看官网吧. 给出链接 http://developer.baidu.com/map/index.php   方便伸手党. 以下贴出我的代码: 点击下载百度

Android百度地图定位demo

AS写的百度地图定位demo 版本V6.0.5 先上效果图     版权声明:本文为博主原创文章,未经博主允许不得转载.

微信企业号开发:微信考勤百度地图定位,错误修正

在使用百度地图进行微信考勤时,遇到很多问题,尤其是定位问题,我知道定位有偏差,但使用百度地图,几十次后,偶尔一次会错的离谱,例如直接就定位到了外省,例如我一直在西安,一次定位到了天津,一次定位到了石家庄,我不知道为什么会这样.偏差几千米还能理解,可偏差几百公里就是在让人不能理解了.是因为我用的百度API是免费的吗?当然出现的次数不多,一般情况下,四五十次,会偶尔出现一两次这么离谱的偏差. 实在找不到原因,也不能是缓存,因为我没有去过石家庄,天津.没办法,但这个问题,又不能不解决,于是只能把四种计

IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息

IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息 /**当获取到定位的坐标后,回调函数*/ - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{ BMKCoordinateRegion region; region.center.latitude  = userLocation.location.coordinate.latitude; region.center.longitude = userLoca

微信企业号开发:微信考勤百度地图定位二

使用微信考勤百度地图定位中的方法定位,可以定位到一个具体的位置某省某市某区某路某号,总是让人感觉显示不是很友好,如果直接显示,软件园,科技园之类的是不是更好呢?于是查了一下百度地图的相关文档,其实也很简单.百度有附近的功能,还有地址解析的功能,都可以实现. 例如我就是用了Geocoder服务,实现了需要的效果. 核心代码: var map = new BMap.Map("allmap"); var circle = new BMap.Geolocation(); circle.getC

Android 百度地图定位(手动+自动) 安卓开发教程

近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的.我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置.  经过2天研究和咨询,找到了解决方案,在此备忘一下. 注意:定位使用真机才能够真正定位:模拟器的话,在DDMS中的Emulator Control中,选择Manual,下面单选按钮选择Decimal,然后填写经纬度,send后,再点击定位我的位置按钮,就能定位了(这应该算是固定定位,哈哈...). 1.第一步当然

Android百度地图定位

说到百度地图,现在这个时候应该都是众说周知了吧,多的话不扯了,直接奔向主题. 接入百度地图api必须申请key,这里申请key就不用说了,官方文档上面有介绍如何去申请key. 这里使用的百度地图定位是4.2的版本,api是3.1.1版本.如果申请好了key,那么就可以进入编码阶段了,具体实现如下: 1.引入百度地图相关jar包及armeabi目录到libs目录中 2.在项目的AndroidManifest.xml文件中配置相关信息 配置权限 <uses-permission android:na

【MUI】百度地图定位功能

博主最近进行一款APP开发,需要用到定位功能,经过一番折腾,终于搞定,不废话,代码如下 mui.plusReady(function() { var longitude, latitude; //var map = new BMap.Map("container"); // navigator.geolocation.getCurrentPosition(function(position) { // longitude = position.coords.longitude; //