首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

AngularJS进阶(十九)在AngularJS应用中集成百度地图实现定位功能

  • 23-11-14 10:01
  • 3176
  • 6131
blog.csdn.net

在AngularJS应用中集成百度地图实现定位功能

注:请点击此处进行充电!

前言

      根据项目需求,需要实现手机定位功能,考虑到百度业务的强大能力,遂决定使用百度地图第三方服务。

      添加第三方模块的步骤与前面介绍的“在AngularJS应用中集成科大讯飞语音输入功能”步骤相同,在此不再赘述。

 

问题

      1.有些手机无法实现定位功能(以我的手机为例:MX2,刚开始时可以实现定位,后来就出现无法定位的情况,手机定位功能也已经打开)。

      一部分原因是有些手机真的没有打开定位功能。(经过检查手机设置,还真是发现自己将手机定位功能给关闭了,打开手机定位功能后,定位正常)截图如下:

            

      经过测试发现了与微信授权类似的问题:在真机测试是没有问题的,打包成APK,然后再在手机上运行则出现无法定位的情况。难道又是因为“真机调试的时候使用的是HBuilder基座的参数”?

      但是在别的手机安装APK之后运行结果正常,截图如下:

 

      2.手机虽然可以实现定位,但是定位速度比较慢。

      跟网络有一定的关系。

优化

百度地理位置功能源码分析

 
  1. <script src="http://api.map.baidu.com/components?ak=bOwh2i9zIWG7Ucl8xPitV2TM&v=1.0">script>
  2. <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=bOwh2i9zIWG7Ucl8xPitV2TM">script>
  1. /*
  2. * 获取地理位置信息
  3. */
  4. $rootScope.getAddr = function() {
  5. console.log("定位操作ing..............");
  6. /*-------------------- 利用百度API定位 ------------------------*/
  7. var geolocation = new BMap.Geolocation();
  8. geolocation.getCurrentPosition(
  9. //获取位置信息成功
  10. function(position){
  11. if(this.getStatus() == BMAP_STATUS_SUCCESS){
  12. // alert('您的位置:' + position.point.lng + ',' + position.point.lat);
  13. $rootScope.longitude = position.point.lng;
  14. $rootScope.latitude = position.point.lat;
  15. // 根据坐标得到地址描述
  16. $rootScope.getGeo();
  17. } else {
  18. alert('无法获取定位信息,可能影响对服务药店的筛选');
  19. }
  20. },{
  21. // 指示浏览器获取高精度的位置,默认为false
  22. enableHighAccuracy: true,
  23. // 指定获取地理位置的超时时间,默认不限时,单位为毫秒
  24. //         timeout: 5000,
  25. // 最长有效期(30S),在重复获取地理位置时,此参数指定多久再次获取位置
  26.         maximumAge: 30*1000
  27.      });
  28. };

HTML5地理位置功能源码分析

源代码如下所示:

 

  1. <script src="http://api.map.baidu.com/components?ak=bOwh2i9zIWG7Ucl8xPitV2TM&v=1.0">
  2. script>
  3. /*
  4. * 获取地理位置信息
  5. */
  6. $rootScope.getAddr = function() {
  7. if (navigator.geolocation) {
  8. navigator.geolocation.getCurrentPosition(
  9. //获取位置信息成功
  10. function(position) {
  11. $rootScope.latitude = position.coords.latitude;
  12. $rootScope.longitude = position.coords.longitude;
  13. var myGeo = new BMap.Geocoder();
  14. //根据坐标得到地址描述
  15. $rootScope.getGeo();
  16. },
  17. //获取位置信息失败
  18. function(error) {
  19. switch (error.code) {
  20. case error.PERMISSION_DENIED:
  21. $rootScope.showAlert("请打开设备定位功能!");
  22. break;
  23. case error.POSITION_UNAVAILABLE:
  24. $rootScope.showAlert("定位信息不可用!");
  25. break;
  26. case error.TIMEOUT:
  27. $rootScope.showAlert("定位请求超时!");
  28. break;
  29. case error.UNKNOWN_ERROR:
  30. $rootScope.showAlert("未知错误!");
  31. break;
  32. }
  33. },
  34. {
  35. // 指示浏览器获取高精度的位置,默认为false
  36. enableHighAccuracy: true,
  37. // 指定获取地理位置的超时时间,默认不限时,单位为毫秒
  38. timeout: 5000,
  39. // 最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。
  40. maximumAge: 3000
  41. });
  42. } else {
  43. $rootScope.showAlert("您的设备不支持GPS定位!");
  44. }
  45. };
  46. $rootScope.getAddr();
  47. $rootScope.getGeo = function() {
  48. var myGeo = new BMap.Geocoder();
  49. // 根据坐标得到地址描述
  50. myGeo.getLocation(new BMap.Point($rootScope.longitude, $rootScope.latitude), function(result) {
  51. if (result) {
  52. console.log(JSON.stringify(result));
  53. $rootScope.geoaddress = {
  54. 'fulladdress': result.addressComponents.city + result.addressComponents.district + result.addressComponents.street,
  55. 'city': result.addressComponents.city,
  56. 'area': result.addressComponents.district,
  57. 'street': result.addressComponents.street,
  58. };
  59. console.log(JSON.stringify($rootScope.geoaddress));
  60. }else {
  61. $rootScope.showAlert("定位失败,地址解析失败");
  62. }
  63. });
  64. };

 

感悟

     通过阅读参考资料3,得知上面使用的定位方式是采用的 HTML5 的地理位置功能。

注:

 总的来说,在PC的浏览器中 HTML5 的地理位置功能获取的位置精度不够高,如果借助这个 HTML5 特性做一个城市天气预报是绰绰有余,但如果是做一个地图应用,那误差还是太大了。不过,如果是移动设备上的 HTML5 应用,可以通过设置 enableHighAcuracy 参数为 true,调用设备的 GPS 定位来获取高精度的地理位置信息。

附:

手机定位方式汇总

      GPS,基站,Wi-Fi等多种定位方式

什么是GPS定位、基站定位和Wi-Fi定位?

      1、GPS定位:根据设备GPS芯片和GPS卫星实现定位,GPS定位在室内是不可以使用的。GPS定位精度和芯片本身以及实际使用环境有关,一般情况下,GPS定位精度在10m左右。

      2、基站定位:根据设备获取的基站信息实现定位,基站定位精度一般不受使用环境影响,主要和基站的覆盖半径有关。百度的基站定位服务精度目前在200m左右。

      3、Wi-Fi定位:根据设备获取的Wi-Fi的信息进行定位,Wi-Fi定位精度一般不受使用环境影响,主要和Wi-Fi半径,密度有关。百度的Wi-Fi定位精度目前在20m左右。

疑问

如何判断手机的定位方式?

附加奖励

额外发现一个问题:当手机出现定位失败的情况,如何处理?移动端在软件逻辑设计上还存在缺陷。

参考资料:

1. http://www.html5plus.org/doc/zh_cn/maps.html

2. http://iyenn.com/rec/1648203.html

3. http://www.cnblogs.com/lhb25/archive/2012/07/10/html5-geolocation-api-demo.html

4. http://www.cnblogs.com/lhb25/archive/2012/07/06/html5-geolocation-api-demo.html

5. http://www.zgxue.com/170/1700801.html

6. http://iyenn.com/rec/1648204.html

7. http://iyenn.com/rec/1648205.html

8. http://www.html5plus.org/doc/zh_cn/maps.html#plus.maps.Map.getUserLocation

注:本文转载自blog.csdn.net的No Silver Bullet的文章"http://blog.csdn.net/sunhuaqiang1/article/details/50196783"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top