1. 程式人生 > >AngularJS進階(十九)在AngularJS應用中整合百度地圖實現定位功能

AngularJS進階(十九)在AngularJS應用中整合百度地圖實現定位功能

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

在AngularJS應用中整合百度地圖實現定位功能

注:請點選此處進行充電!

前言

      根據專案需求,需要實現手機定位功能,考慮到百度業務的強大能力,遂決定使用百度地圖第三方服務。

      新增第三方模組的步驟與前面介紹的“在AngularJS應用中整合科大訊飛語音輸入功能”步驟相同,在此不再贅述。


問題

      1.有些手機無法實現定位功能(以我的手機為例:MX2,剛開始時可以實現定位,後來就出現無法定位的情況,手機定位功能也已經開啟)

      一部分原因是有些手機真的沒有開啟定位功能。(經過檢查手機設定,還真是發現自己將手機定位功能給關閉了,開啟手機定位功能後,定位正常)截圖如下:

            

      經過測試發現了與微信授權類似的問題:在真機測試是沒有問題的,打包成APK,然後再在手機上執行則出現無法定位的情況。難道又是因為“真機除錯的時候使用的是HBuilder基座的引數”?

      但是在別的手機安裝APK之後執行結果正常,截圖如下:

 

      2.手機雖然可以實現定位,但是定位速度比較慢。

      跟網路有一定的關係。

優化

百度地理位置功能原始碼分析

[html]
view plain copy print ?
  1. <code class="language-html">    <!--百度地圖-->  
  2.     <script src="http://api.map.baidu.com/components?ak=bOwh2i9zIWG7Ucl8xPitV2TM&v=1.0"></script>  
  3.     <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=bOwh2i9zIWG7Ucl8xPitV2TM"></script></code>  
 <!--百度地圖--> <script src="http://api.map.baidu.com/components?ak=bOwh2i9zIWG7Ucl8xPitV2TM&v=1.0"></script> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=bOwh2i9zIWG7Ucl8xPitV2TM"></script>
 /*  * 獲取地理位置資訊  */ $rootScope.getAddr = function() {  console.log("定位操作ing..............");  /*-------------------- 利用百度API定位 ------------------------*/  var geolocation = new BMap.Geolocation();  geolocation.getCurrentPosition(   //獲取位置資訊成功   function(position){    if(this.getStatus() == BMAP_STATUS_SUCCESS){ //    alert('您的位置:' + position.point.lng + ',' + position.point.lat);     $rootScope.longitude = position.point.lng;     $rootScope.latitude  = position.point.lat;     // 根據座標得到地址描述         $rootScope.getGeo();    } else {     alert('無法獲取定位資訊,可能影響對服務藥店的篩選');    }           },{    // 指示瀏覽器獲取高精度的位置,預設為false    enableHighAccuracy: true,    // 指定獲取地理位置的超時時間,預設不限時,單位為毫秒 //         timeout: 5000,    // 最長有效期(30S),在重複獲取地理位置時,此引數指定多久再次獲取位置          maximumAge: 30*1000      }); };

HTML5地理位置功能原始碼分析

原始碼如下所示:

<!--百度地圖--><script src="http://api.map.baidu.com/components?ak=bOwh2i9zIWG7Ucl8xPitV2TM&v=1.0"></script>/* * 獲取地理位置資訊 */$rootScope.getAddr = function() {if (navigator.geolocation) {navigator.geolocation.getCurrentPosition(//獲取位置資訊成功function(position) {$rootScope.latitude = position.coords.latitude;$rootScope.longitude = position.coords.longitude;var myGeo = new BMap.Geocoder();//根據座標得到地址描述    $rootScope.getGeo();},//獲取位置資訊失敗function(error) {switch (error.code) {case error.PERMISSION_DENIED:$rootScope.showAlert("請開啟裝置定位功能!");break;case error.POSITION_UNAVAILABLE:$rootScope.showAlert("定位資訊不可用!");break;case error.TIMEOUT:$rootScope.showAlert("定位請求超時!");break;case error.UNKNOWN_ERROR:$rootScope.showAlert("未知錯誤!");break;}},{        // 指示瀏覽器獲取高精度的位置,預設為false        enableHighAccuracy: true,        // 指定獲取地理位置的超時時間,預設不限時,單位為毫秒        timeout: 5000,        // 最長有效期,在重複獲取地理位置時,此引數指定多久再次獲取位置。        maximumAge: 3000    });} else {$rootScope.showAlert("您的裝置不支援GPS定位!");}}; $rootScope.getAddr(); $rootScope.getGeo = function() {var myGeo = new BMap.Geocoder();// 根據座標得到地址描述    myGeo.getLocation(new BMap.Point($rootScope.longitude, $rootScope.latitude), function(result) {if (result) {console.log(JSON.stringify(result));$rootScope.geoaddress = {'fulladdress': result.addressComponents.city + result.addressComponents.district + result.addressComponents.street,'city': result.addressComponents.city,'area': result.addressComponents.district,'street': result.addressComponents.street,};console.log(JSON.stringify($rootScope.geoaddress));}else {$rootScope.showAlert("定位失敗,地址解析失敗");}});};

感悟

     通過閱讀參考資料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左右。

      3Wi-Fi定位:根據裝置獲取的Wi-Fi的資訊進行定位,Wi-Fi定位精度一般不受使用環境影響,主要和Wi-Fi半徑,密度有關。百度的Wi-Fi定位精度目前在20m左右。

疑問

如何判斷手機的定位方式?

附加獎勵

額外發現一個問題:當手機出現定位失敗的情況,如何處理?移動端在軟體邏輯設計上還存在缺陷。

參考資料:

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

2. http://blog.csdn.net/smok56888/article/details/20628161

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://blog.csdn.net/cyzero/article/details/42584193

7. http://blog.csdn.net/zuowensheng/article/details/7800308

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

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述