拉起本地地圖導(dǎo)航

當(dāng)然 如果沒(méi)有安裝某個(gè)地圖APP 那么對(duì)應(yīng)的選項(xiàng)是不會(huì)出現(xiàn)的 檢測(cè)APP是否安裝 只要調(diào)用下面這個(gè)方法就可以了

[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"appurlscheme://"]

關(guān)于APP的URL Scheme相關(guān)內(nèi)容這里就不介紹了 大家可以自行去研究

那么我們上圖提到了4個(gè)地圖應(yīng)用 分別是

蘋果地圖

百度地圖

高德地圖

谷歌地圖

這些也是當(dāng)前我們用得最多的幾種地圖了(什么 你們說(shuō)還有騰訊地圖? 可惜騰訊地圖暫時(shí)還不支持URI的方式打開(kāi) 所以這里就沒(méi)列出來(lái) 等可以用了我會(huì)補(bǔ)上)

下面來(lái)對(duì)比一下幾種地圖

地圖URL Scheme文檔是否可以跳回到APP

蘋果地圖文檔

百度地圖baidumap://文檔

高德地圖iosamap://文檔

谷歌地圖comgooglemaps://文檔

蘋果地圖是系統(tǒng)自帶的(而且蘋果地圖最好的方式也不是用URI的方式開(kāi)打) 所以無(wú)需URL Scheme就可以打開(kāi)的

其次 當(dāng)跳到地圖APP之后可以跳回是一種很好的體驗(yàn)(參考微信的跳轉(zhuǎn)) 但是遺憾的是 蘋果地圖和百度地圖都不支持跳回

接下來(lái)我們就回到正題 說(shuō)一說(shuō)每種地圖的跳轉(zhuǎn)方式

假設(shè)我們有一個(gè)指定的目的坐標(biāo)coordinate而我們自己的APP的URL Scheme是urlScheme名稱是appName

CLLocationCoordinate2D coordinate;NSString *urlScheme;NSString *appName;

蘋果地圖

蘋果地圖可以通過(guò)openURL的方式打開(kāi)

NSString*urlString = [[NSStringstringWithFormat:@"http://maps.apple.com/?daddr=%f,%f&saddr=slat,slng",coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding][[UIApplicationsharedApplication] openURL:[NSURLURLWithString:urlString]];

但是這種方式不能以當(dāng)前位置為起點(diǎn)所以不符合我們的要求 網(wǎng)上說(shuō)可以用下面這種方式 但是我沒(méi)成功

NSString*urlString = [[NSStringstringWithFormat:@"http://maps.apple.com/?daddr=%f,%f&saddr=Current+Location",coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

但是蘋果提供了另一種方式 使用MKMapItem

MKMapItem*currentLocation = [MKMapItemmapItemForCurrentLocation];MKMapItem*toLocation = [[MKMapItemalloc] initWithPlacemark:[[MKPlacemarkalloc] initWithCoordinate:coordinate addressDictionary:nil]];[MKMapItemopenMapsWithItems:@[currentLocation, toLocation]? ? ? ? ? ? ? ? launchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsShowsTrafficKey: [NSNumbernumberWithBool:YES]}];

效果如下

百度地圖

NSString*urlString = [[NSStringstringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:urlString]];

要注意幾點(diǎn)

origin={{我的位置}}

這個(gè)是不能被修改的 不然無(wú)法把出發(fā)位置設(shè)置為當(dāng)前位置

destination=latlng:%f,%f|name=目的地

name=XXXXname這個(gè)字段不能省略 否則導(dǎo)航會(huì)失敗 而后面的文字則可以隨便填

coord_type=gcj02

coord_type允許的值為bd09ll、gcj02、wgs84 如果你APP的地圖SDK用的是百度地圖SDK 請(qǐng)?zhí)頱d09ll 否則 就填gcj02 wgs84你基本是用不上了(關(guān)于地圖加密這里也不多談 請(qǐng)自行學(xué)習(xí))

效果如下

高德地圖

NSString*urlString = [[NSStringstringWithFormat:@"iosamap://navi?sourceApplication=%@&backScheme=%@&lat=%f&lon=%f&dev=0&style=2",appName,urlScheme,coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:urlString]];

要注意幾點(diǎn)

sourceApplication=%@&backScheme=%@

sourceApplication代表你自己APP的名稱 會(huì)在之后跳回的時(shí)候顯示出來(lái) 所以必須填寫? backScheme是你APP的URL Scheme? 不填是跳不回來(lái)的喲

dev=0

這里填0就行了 跟上面的gcj02一個(gè)意思? 1代表wgs84 也用不上

效果如下

退出導(dǎo)航后 會(huì)提示是否跳回到APP

谷歌地圖

NSString*urlString = [[NSStringstringWithFormat:@"comgooglemaps://?x-source=%@&x-success=%@&saddr=&daddr=%f,%f&directionsmode=driving",appName,urlScheme,coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:urlString]];

要注意幾點(diǎn)

x-source=%@&x-success=%@

跟高德一樣 這里分別代表APP的名稱和URL Scheme

saddr=

這里留空則表示從當(dāng)前位置觸發(fā)

效果如下 在有多條路線的時(shí)候 谷歌地圖會(huì)讓你選擇其中一條

選擇之后就進(jìn)入了導(dǎo)航頁(yè)面

騰訊地圖

既然提到了騰訊地圖 那么還是說(shuō)一下 從網(wǎng)上和官方文檔可以得知 大概調(diào)用的URI如下

NSString*urlString = [[NSStringstringWithFormat:@"qqmap://map/routeplan?type=drive&fromcoord=CurrentLocation&tocoord=%f,%f&coord_type=1&policy=0",coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:urlString]];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容