百度地圖定位原理
來源:程序員人生 發布時間:2015-05-12 09:02:27 閱讀次數:11208次
定位我們使用的是百度 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吧
1 . 導入庫文件
在使用百度定位SDKv4.0之前,我們要下載最新的庫文件,下載地址:點擊下載相干庫文件,將liblocSDK4.so文件拷貝到libs/armeabi目錄下。將locSDK4.0.jar文件拷貝到工程的libs目錄下
2 . 1個獲得當前位置的工具類
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 code1些情況
- 61 : GPS定位結果
- 62 : 掃描整合定位根據失敗。此時定位結果無效。
- 63 : 網絡異常,沒有成功向服務器發起要求。此時定位結果無效。
- 65 : 定位緩存的結果。
- 66 : 離線定位結果。通過requestOfflineLocaiton調用時對應的返回結果
- 67 : 離線定位失敗。通過requestOfflineLocaiton調用時對應的返回結果
- 68 : 網絡連接失敗時,查找本地離線定位時對應的返回結果
- 161: 表示網絡定位結果
- 162~167: 服務端定位失敗
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈