在上一篇文章中,已經可以看到預設的百度地圖,那就說明我們的操作是正確的,申請的金鑰和引入地圖SDK是沒有問題的,接下來就是按照自己的業務需求來使用百度地圖。
百度地圖可以設定顯示出不同的地圖型別,有普通地圖(預設的)、衛星地圖、空白圖。這三種在上一篇推文中進行了演示,可以根據自己的需求看應該使用那種。
其實百度地圖可以做的操作還是很多的,比如顯示手機的實時定位資訊,繪製點,繪製線,新增標記和資訊框等。那麼我們就來看看如何實現實時的位置資訊顯示。
顯示實時位置資訊
目前我們使用的手機都自帶GPS定位功能,可以在環境空曠不受干擾或者有執行商或wifi網路的情況下,獲取到經緯度衛星座標。
Android定位SDK,它支援全球定位,能夠精準的獲取經緯度資訊。
目前在國內獲得的座標系型別有三種:
- 國測局座標
- 百度墨卡託座標
- 百度經緯度座標
在海外地區,只能獲取到WGS84座標,我們在開發過程中需要注意,每個地方獲取到的座標對應的座標系可能不一樣,如果開發業務有海外的需求,那麼需要提前做好座標的轉換工作,否則可能會影響正常的業務邏輯。
定位SDK預設輸出GCJ02座標,地圖SDK預設輸出BD09II座標。
目前下載的最新地圖SDK,需要選中定位SDK,我們們教程剛開始就選擇的是全量定位,也就是說目前可以直接使用操作程式碼獲取到經緯度,可以實現實時定位的功能。
1、配置AndroidManifest.xml檔案
在AndroidManifest.xml檔案中需要提前加入對應的許可權申請,這裡和之前講解的一樣,需要申請網路定位和GPS定位的許可權。如果目標主機的Android版本比較高,則需要動態進行申請(見上一篇推文)。
<!-- 這個許可權用於進行網路定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 這個許可權用於訪問GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
接著還需要在此檔案中宣告定位的service元件,這個很重要,如何沒有做申請,定位SDK是無法獲取到GPS資訊的。
<service android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote"/>
2、開啟地圖定點陣圖層,構造地圖資料
百度地圖的定位功能是在定點陣圖層中的,預設是關閉狀態,需要在程式碼中手動進行開啟。只要開啟定點陣圖層,那麼後期關於實時定位的顯示、標記點、線、面等在地圖上就可以呈現出來。
mBaiduMap.setMyLocationEnabled(true);
百度地圖獲取定位資訊是通過繼承抽象類BDAbstractListener並重寫其onReceieveLocation方法來獲取定位資料,並將其傳給MapView的。
其實說白了就是重寫它後,如果內建的定位晶片或網路定位獲取到GPS資訊會通過重寫後的方法獲取到。此時我們就可以在方法中獲取到我們業務所需要的經緯度資訊。
3、通過LocationClient發起定位
在OnCreate()方法中,通過例項化mLocationClient變數,並給其賦初始化,讓其開始接收衛星資訊。其中要注意的是,需要對mLocationClient設定引數資訊,引數資訊就是例項化LocationClientOption的具體資訊。
LocationClientOption中包括是否開啟GPS,多長時間接收一次等細節變數。
這裡有個坑
目前根據地圖SDK給的程式碼,對引數只設定了開始GPS,設定座標型別和設定定位的間隔時間,是無法獲取到座標資訊的。這裡需要到定位SDK教程中,仔細閱讀其關於如何宣告設定LocationClientOption類,你就會發現其實可設定的內容很多,你可以根據自己的業務需求來進行調整。
下面程式碼是我已經驗證成功可以獲取到時候定位資訊的,需要提前宣告一個初始開啟的變數,用於在首次定位的時候是否將地圖顯示在定位位置處。
上面圖片就是所有的邏輯程式碼,建議你按照上面的邏輯來操作,會得到實時的百度地圖座標。百度地圖官網的教程只能算是參考,主要把一些基本概念介紹清楚了,但是如何新人只按照他那個進行操作,是很出現結果的(我就是在這裡被坑慘了,一直除錯不出來)。
這裡還可以調整其定位點的光圈大小,定位模式,是否開啟方向,設定自定義定點陣圖標,精度圈填充顏色以及精度圈邊框顏色5個屬性,這些可以參考百度官方教程,上面說的很詳細。
下面圖片是成功執行的情況。
對於一些官方的教程,有時候不能完全信。你要綜合考慮,如果按照官方的教程來編碼,出現不了你想要的結果,那麼很有可能是教程沒有及時更新或者沒有給你交代清楚,那麼此時就需要去網際網路上找找解決方案,看是否別人也遇到了這個問題,是否有解決辦法,自己多上手操作操作,就好了。
今天的分享就到這裡,我們下期再會。
時間有點晚了,洗洗睡了,明天還得起床去打工。加油 打工人
小寄語
人生短暫,我不想去追求自己看不見的,我只想抓住我能看的見的。
原創不易,給個關注。
我是阿輝,感謝您的閱讀,如果對你有幫助,麻煩點贊、轉發 謝謝。