iOS 百度地圖的高級用法

本文主要介紹百度地圖的自定義用法,比如創(chuàng)建地圖、添加標(biāo)注點(diǎn)、添加路徑軌跡等問題不在本文討論范圍,請點(diǎn)擊百度地圖開放平臺。本文屬于本人原創(chuàng),如需轉(zhuǎn)載,請注明出處。如本文有說明錯(cuò)誤或者不足的地方,還望指出,共同進(jìn)步。

本文主要講解的內(nèi)容有:

1.添加自定義標(biāo)注

2.添加標(biāo)注點(diǎn)氣泡

3.設(shè)定百度地圖適當(dāng)?shù)娘@示范圍

4.點(diǎn)擊標(biāo)注點(diǎn)氣泡彈出并居中顯示

5.軌跡添加紋理圖片

6.添加標(biāo)注點(diǎn)聚合功能


1.添加自定義的標(biāo)注

需求1?

在項(xiàng)目中,需要顯示的標(biāo)注不只有圖片,有時(shí)也會有文字提示,此時(shí)就需要自定義標(biāo)注。尋找解決方法:

第一步:進(jìn)入百度地圖官方API中查找,是否可以添加自定義的view,很遺憾,沒有,只能設(shè)置圖片。

標(biāo)注點(diǎn)添加顯示圖片

第二步:自定義的視圖,通過以下方法轉(zhuǎn)換為image,然后賦值給image。

視圖轉(zhuǎn)為image方法

注意:添加自定義的標(biāo)注點(diǎn),需要設(shè)置標(biāo)注的中心偏移;不然,在地圖放大縮小時(shí),標(biāo)注點(diǎn)的定點(diǎn)會跟隨移動。

設(shè)置標(biāo)注點(diǎn)偏移

上面的方法是在百度地圖的回調(diào)方法-(BMKAnnotationView*)mapView:(BMKMapView*)mapView viewForAnnotation:(id)annotation中實(shí)現(xiàn)。


需求2

當(dāng)在地圖上的標(biāo)注點(diǎn)超過2個(gè)時(shí),如何區(qū)分開。此時(shí)創(chuàng)建自定義的標(biāo)注點(diǎn)繼承于BMKPointAnnotation,在內(nèi)部添加需要的屬性或者方法,然后在百度地圖標(biāo)注視圖回調(diào)方法中實(shí)現(xiàn)相應(yīng)的功能。

繼承BMKPointAnnotation
地圖回調(diào)方法

2.添加標(biāo)注點(diǎn)自定義氣泡

(1)項(xiàng)目中,遇到要點(diǎn)擊標(biāo)注點(diǎn)彈出氣泡視圖,顯示這個(gè)標(biāo)注點(diǎn)的詳細(xì)信息。需要在添加標(biāo)注點(diǎn)時(shí)設(shè)置title的值,自定義氣泡視圖,title值可以隨便賦值。

設(shè)置標(biāo)注點(diǎn)氣泡標(biāo)題

(2)在百度地圖BMKAnnotationView中尋找可以添加氣泡視圖的屬性,找到paopaoView,嗯,命名很別致。

標(biāo)注點(diǎn)氣泡視圖

接下來,自定義需要顯示的氣泡視圖,創(chuàng)建自定義氣泡視圖對象,然后賦值給paopaoView就ok了。

自定義氣泡視圖初始化
氣泡視圖賦值

注意:如果遇到標(biāo)注點(diǎn)是自定義的(比如顯示車輛的圖標(biāo)和車牌號),點(diǎn)擊標(biāo)注點(diǎn)彈出的氣泡顯示位置是以標(biāo)注點(diǎn)x軸的中心對齊,如果需要顯示在其他位置,則需要設(shè)置氣泡的偏移量。

氣泡視圖偏移量

3.設(shè)定百度地圖適當(dāng)?shù)娘@示范圍

下面要講的才是重點(diǎn),直接上代碼,這里展示的是我自己的思路,如果有不妥或者更好的方法,歡迎指正。

需求是,需要在地圖上添加一組標(biāo)注點(diǎn),并以合適的縮放比例,將全部的標(biāo)注點(diǎn)全部顯示在地圖可視范圍內(nèi)。通過查找百度地圖的官方API,找到如下方法。

顯示地圖的顯示范圍
百度地圖經(jīng)緯度區(qū)域
百度地圖經(jīng)緯度范圍

實(shí)現(xiàn)思路為:遍歷所有標(biāo)注點(diǎn)的經(jīng)緯度值,找出其中最大和最小的經(jīng)度和緯度值。相當(dāng)于在地圖上畫一個(gè)矩形,需要確定矩形的起始點(diǎn)和寬高,這里是以經(jīng)緯度來計(jì)算。方法如下

計(jì)算出顯示范圍
找出最大最小經(jīng)緯度值

好像上面的方法完美解決,拿衣服!如果遇到如下的需求。需要在地圖上顯示車輛的位置,并顯示車輛的運(yùn)行狀態(tài)和車牌號,由于自定義的標(biāo)注點(diǎn)是以車輛的底部為定點(diǎn)(如下圖車輛顯示定點(diǎn)),右邊的車牌將不會顯示在地圖的可視范圍內(nèi),這是因?yàn)椋陲@示Region時(shí),以經(jīng)緯度計(jì)算,剛好在最邊上的標(biāo)注點(diǎn)將會顯示貼邊顯示。

車輛顯示定點(diǎn)
顯示車輛和車牌

如果可以設(shè)置地圖的上下左右的預(yù)留位置,就可以解決這個(gè)問題,接著看官方API,找到可以設(shè)置預(yù)留邊界的方法。如下

顯示地圖范圍

如果使用下面的方法,也可以實(shí)現(xiàn)效果,不過,會出現(xiàn),設(shè)置了氣泡的顯示范圍(第四個(gè)將會講解),點(diǎn)擊標(biāo)注點(diǎn)顯示氣泡時(shí),氣泡會產(chǎn)生偏移,這個(gè)偏移值與屏幕尺寸之間的關(guān)系目前還沒有找到。(不推薦使用)

填充地圖顯示范圍

看到需要傳入一個(gè)BMKMapRect,看到注釋,直角地理坐標(biāo),這是什么鬼?然后無奈去百度,解釋的太專業(yè),果斷放棄,還有沒其他的方法?

地圖的直角地理坐標(biāo)

在覆蓋物的基類中找到有這個(gè)屬性。思路為添加一段軌跡線,獲取到軌跡線的boundingMapRect,然后賦值。方法為: BMKPolyline*polyline = [BMKPolylinepolylineWithCoordinates:coordscount:count];? 完美解決問題。

覆蓋物基類

4.點(diǎn)擊標(biāo)注點(diǎn)氣泡彈出并居中顯示

最后這個(gè)問題,思路與上一個(gè)類似,具體的實(shí)現(xiàn)方法如下:

點(diǎn)擊標(biāo)注點(diǎn)顯示自定義氣泡時(shí),氣泡不會居中顯示在地圖上,這就尷尬了!繼續(xù)查找官方API??吹较旅娴姆椒?,靈光一現(xiàn),氣泡就是一個(gè)視圖,已知?dú)馀莸膶挾群透叨龋枰蟪鰵馀莸钠瘘c(diǎn)。

將視圖rect轉(zhuǎn)換為地圖regio
經(jīng)緯度轉(zhuǎn)換為視圖坐標(biāo)
設(shè)置地圖的顯示范圍

已知點(diǎn)擊的標(biāo)志點(diǎn)的經(jīng)緯度值,求出這個(gè)點(diǎn)在地圖上的視圖坐標(biāo)點(diǎn),示意圖如下

已知條件 Map H(地圖視圖的高度)? ?Map W(地圖視圖的寬度)? P(標(biāo)注點(diǎn)的開始位置) bubbleWidth(氣泡的寬度) bubbleHeight(氣泡的高度)

求出? P2(居中顯示的標(biāo)注點(diǎn))O1(氣泡的開始起點(diǎn))? O2(氣泡居中顯示的起始點(diǎn))

第一步:通過百度地圖API求出P的視圖坐標(biāo)

第二步:求出O1起點(diǎn)的坐標(biāo)? O1.x = P.x-bubbleWidth/2;? O1.y = P.x-bubbleHeight;

第三步:通過百度地圖API將氣泡視圖rect轉(zhuǎn)換為BMKCoordinateRegion,然后設(shè)置地圖的顯示范圍。

手繪的示意圖

最后的實(shí)現(xiàn)代碼如下

代碼實(shí)現(xiàn)

5.軌跡添加紋理圖片

公司的項(xiàng)目中,查詢車輛的歷史軌跡時(shí),需要標(biāo)明車輛的運(yùn)行方向。之前的做法是添加方向標(biāo)注點(diǎn),但這樣的效果不是很好,用紋理圖片就完美的解決問題。

添加紋理圖片時(shí),需要注意兩點(diǎn):一是紋理圖片的方向尖頭必須朝下;二是紋理圖片的尺寸必須為2的n次方冪。

繪制軌跡線的回調(diào)方法

在繪制軌跡線的回調(diào)方法時(shí),需要自定義BMKPolyLineView,重寫glRender方法,具體實(shí)現(xiàn)如下:

重寫glRender方法

6.添加標(biāo)注點(diǎn)聚合功能

從百度開放平臺上下載示例demo,里面有開源的聚合算法。將其中的文件拷貝到項(xiàng)目中即可。

demo目錄

進(jìn)入MapDemo/ClusterDemoViewController中,核心代碼如下:

更新聚合狀態(tài)

如果覺得可以,給個(gè)贊,謝謝!

下一篇將會講解google地圖的一些用法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,899評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內(nèi)容

  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,838評論 22 665
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,151評論 4 61
  • 還是有懸而未決的事,還是有許多想了又想不知如何是好的事還是不能全力與愛的人恣意前行... 有時(shí)候會覺得“一地雞毛”...
    mo清夜無塵閱讀 80評論 0 1
  • 昨天真是奇妙的一天,中午進(jìn)門時(shí)無意識的將鑰匙插在門上,等我有事要出去時(shí)又慣性的把保險(xiǎn)栓一拉,只聽見清脆的啪的一聲,...
    虞七七閱讀 390評論 2 6
  • 作業(yè):【一階段·片段二】 R· 閱讀原文片段 《商業(yè)模式新生代》 1請寫下你的目標(biāo) 例一:我的目標(biāo)是在工作表現(xiàn)中領(lǐng)...
    mamaissmiling閱讀 191評論 7 1