ios如何获取gps坐标(定位第二节)
原文連接:
https://blog.csdn.net/michael_ouyang/article/details/54378338
--------------------------------------------------------------------
?
在上一篇文章,解決ios 10不能定位的問題,把navigator.geolocation.getCurrentPosition 改成使用第三方api進行定位
http://blog.csdn.net/michael_ouyang/article/details/54137709
?
本文繼續講述原生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);
?
?
為什么獲取到了坐標了還需要解密?
百度api對此進行了解釋,鏈接:http://lbsyun.baidu.com/index.php?title=open/question
那么說明了一點:坐標都是經過加密處理的
如果直接使用navigator.geolocation.getCurrentPosition獲取到的坐標信息,是加密的坐標信息,直接使用的話,會明顯出現偏差,偏差范圍大概在幾公里左右!!!那么跟沒定位有什么區別╮(╯_╰)╭
?
這里使用百度的api進行解密:
?
?/**
* 真實經緯度轉成百度坐標
* @param gpsPoint 傳入百度BMap對象
* @param 0 0:代表GPS
* @param translateCallback 真實坐標轉換成百度坐標的回調函數
*/
BMap.Convertor.translate(gpsPoint,0, translateCallback);
?
?
完整示例:
●注意:使用百度地圖api,首要需要到百度api官網申請百度地圖密鑰
附申請方法:http://jingyan.baidu.com/article/363872eccda8286e4aa16f4e.html
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、這里已經已經封裝好成函數,使用可以直接復制
js:
?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("獲取位置信息失敗,請重新定位");
}
?
?
總結
以上是生活随笔為你收集整理的ios如何获取gps坐标(定位第二节)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: chrome解决跨域(CORS)问题--
- 下一篇: Workbench has not be