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的使用方法:

 
  1. /**

  2. * @param geolocationSuccess 定位成功的回调函数

  3. * @param geolocationError 定位失败的回调函数

  4. * @param [geolocationOptions]设置对象

  5. */

  6. navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, [geolocationOptions]);


简单的使用示例:

 
  1. // 定位成功的回调函数

  2. var onSuccess = function(position) {

  3. alert('Latitude: ' + position.coords.latitude + '\n' +

  4. 'Longitude: ' + position.coords.longitude + '\n' +

  5. 'Altitude: ' + position.coords.altitude + '\n' +

  6. 'Accuracy: ' + position.coords.accuracy + '\n' +

  7. 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +

  8. 'Heading: ' + position.coords.heading + '\n' +

  9. 'Speed: ' + position.coords.speed + '\n' +

  10. 'Timestamp: ' + position.timestamp + '\n');

  11. };

  12.  
  13. // 定位失败的回调函数

  14. function onError(error) {

  15. alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n');

  16. }

  17.  
  18. navigator.geolocation.getCurrentPosition(onSuccess, onError);


 

为什么获取到了坐标了还需要解密?

百度api对此进行了解释,链接:http://lbsyun.baidu.com/index.php?title=open/question

那么说明了一点:坐标都是经过加密处理的

如果直接使用navigator.geolocation.getCurrentPosition获取到的坐标信息,是加密的坐标信息,直接使用的话,会明显出现偏差,偏差范围大概在几公里左右!!!那么跟没定位有什么区别╮(╯_╰)╭

这里使用百度的api进行解密:

 
  1. /**

  2. * 真实经纬度转成百度坐标

  3. * @param gpsPoint 传入百度BMap对象

  4. * @param 0 0:代表GPS

  5. * @param translateCallback 真实坐标转换成百度坐标的回调函数

  6. */

  7. BMap.Convertor.translate(gpsPoint,0, translateCallback);


 

完整示例:

●注意:使用百度地图api,首要需要到百度api官网申请百度地图密钥

附申请方法:http://jingyan.baidu.com/article/363872eccda8286e4aa16f4e.html

1、在页面引入js

HTML:

 
  1. <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=6yAoynmTPNlTBa8z1X4LfwGE"></script>

  2. <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>

2、这里已经已经封装好成函数,使用可以直接复制

js:

 
  1. function getlocation() {

  2. if (window.navigator.geolocation) {

  3. //设置参数

  4. var options = {

  5. enableHighAccuracy: true,

  6. timeout: 10000,

  7. };

  8.  
  9. window.navigator.geolocation.getCurrentPosition(handleSuccess, handleError, options);

  10. } else {

  11. //alert("无法获取地理位置信息");

  12. }

  13. }

  14.  
  15. /**

  16. * 执行window.navigator.geolocation.getCurrentPosition()函数后成功的回调

  17. * @param position 返回一个真实坐标对象position

  18. */

  19. function handleSuccess(position){

  20. var lng = position.coords.longitude; //经度

  21. var lat = position.coords.latitude; //纬度

  22.  
  23. //通过百度地图api对象封装真实的经纬度

  24. var gpsPoint = new BMap.Point(lng,lat);

  25.  
  26. / **

  27. * 真实坐标转换成百度坐标的回调函数

  28. * 通过百度坐标得到地址描述

  29. * @param point 回调百度坐标对象point

  30. */

  31. translateCallback = function (point){

  32. var myGeo = new BMap.Geocoder();

  33. // 根据百度坐标得到地址描述

  34. myGeo.getLocation(new BMap.Point(point.lng,point.lat), function(result){

  35. if (result){

  36. // PS:改成你需要执行的函数

  37. alert(result.address);

  38. }

  39. else{

  40. // PS:改成你需要执行的函数

  41. alert("定位失败,请重新定位");

  42. }

  43. });

  44. }

  45.  
  46. setTimeout(function(){

  47. /**

  48. * 真实经纬度转成百度坐标

  49. * @param gpsPoint 传入百度BMap对象

  50. * @param 0 0:代表GPS,也可以是2:google坐标

  51. * @param translateCallback 真实坐标转换成百度坐标的回调函数

  52. */

  53. BMap.Convertor.translate(gpsPoint,0, translateCallback);

  54. }, 2000);

  55. }

  56.  
  57.  
  58. /* 失败的回调 */

  59. function handleError(error){

  60. // PS:改成你需要执行的函数

  61. alert("获取位置信息失败,请重新定位");

  62. }


 

猜你喜欢

转载自blog.csdn.net/zengmingen/article/details/82593742