ios如何獲取gps座標(定位第二節)
阿新 • • 發佈:2019-02-20
在上一篇文章,解決ios 10不能定位的問題,把navigator.geolocation.getCurrentPosition 改成使用第三方api進行定位
本文繼續講述原生webkit核心的navigator.geolocation.getCurrentPosition獲取到的座標資訊,並且如何解密。為什麼要解密,原因下面會進行講解!
首先講解一下navigator.geolocation.getCurrentPosition的使用方法:
/** * @param geolocationSuccess 定位成功的回撥函式 * @param geolocationError 定位失敗的回撥函式 * @param [geolocationOptions]設定物件 */ navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, [geolocationOptions]);
簡單的使用示例:
// 定位成功的回撥函式 var onSuccess = function(position) { alert('Latitude: ' + position.coords.latitude + '\n' + 'Longitude: ' + position.coords.longitude + '\n' + 'Altitude: ' + position.coords.altitude + '\n' + 'Accuracy: ' + position.coords.accuracy + '\n' + 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' + 'Heading: ' + position.coords.heading + '\n' + 'Speed: ' + position.coords.speed + '\n' + 'Timestamp: ' + position.timestamp + '\n'); }; // 定位失敗的回撥函式 function onError(error) { alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n'); } navigator.geolocation.getCurrentPosition(onSuccess, onError);
為什麼獲取到了座標了還需要解密?
那麼說明了一點:座標都是經過加密處理的
如果直接使用navigator.geolocation.getCurrentPosition獲取到的座標資訊,是加密的座標資訊,直接使用的話,會明顯出現偏差,偏差範圍大概在幾公里左右!!!那麼跟沒定位有什麼區別╮(╯_╰)╭
這裡使用百度的api進行解密:
/** * 真實經緯度轉成百度座標 * @param gpsPoint 傳入百度BMap物件 * @param 0 0:代表GPS * @param translateCallback 真實座標轉換成百度座標的回撥函式 */ BMap.Convertor.translate(gpsPoint,0, translateCallback);
完整示例:
●注意:使用百度地圖api,首要需要到百度api官網申請百度地圖金鑰
1、在頁面引入js
HTML:
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=6yAoynmTPNlTBa8z1X4LfwGE"></script>
<script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
2、這裡已經已經封裝好成函式,使用可以直接複製
function getlocation() {
if (window.navigator.geolocation) {
//設定引數
var options = {
enableHighAccuracy: true,
timeout: 10000,
};
window.navigator.geolocation.getCurrentPosition(handleSuccess, handleError, options);
} else {
//alert("無法獲取地理位置資訊");
}
}
/**
* 執行window.navigator.geolocation.getCurrentPosition()函式後成功的回撥
* @param position 返回一個真實座標物件position
*/
function handleSuccess(position){
var lng = position.coords.longitude; //經度
var lat = position.coords.latitude; //緯度
//通過百度地圖api物件封裝真實的經緯度
var gpsPoint = new BMap.Point(lng,lat);
/ **
* 真實座標轉換成百度座標的回撥函式
* 通過百度座標得到地址描述
* @param point 回撥百度座標物件point
*/
translateCallback = function (point){
var myGeo = new BMap.Geocoder();
// 根據百度座標得到地址描述
myGeo.getLocation(new BMap.Point(point.lng,point.lat), function(result){
if (result){
// PS:改成你需要執行的函式
alert(result.address);
}
else{
// PS:改成你需要執行的函式
alert("定位失敗,請重新定位");
}
});
}
setTimeout(function(){
/**
* 真實經緯度轉成百度座標
* @param gpsPoint 傳入百度BMap物件
* @param 0 0:代表GPS,也可以是2:google座標
* @param translateCallback 真實座標轉換成百度座標的回撥函式
*/
BMap.Convertor.translate(gpsPoint,0, translateCallback);
}, 2000);
}
/* 失敗的回撥 */
function handleError(error){
// PS:改成你需要執行的函式
alert("獲取位置資訊失敗,請重新定位");
}