利用系統(tǒng)App導(dǎo)航

利用系統(tǒng)App導(dǎo)航


1. 導(dǎo)航的三種實(shí)現(xiàn)方案

1. 可以將需要導(dǎo)航的位置丟給系統(tǒng)的地圖APP進(jìn)行導(dǎo)航
2. 發(fā)送網(wǎng)絡(luò)請(qǐng)求到公司服務(wù)器獲取導(dǎo)航數(shù)據(jù), 然后自己手動(dòng)繪制導(dǎo)航
3. 利用三方SDK實(shí)現(xiàn)導(dǎo)航(百度)

2. 直接將起點(diǎn)和終點(diǎn), 傳遞給系統(tǒng)地圖, 利用系統(tǒng)APP, 進(jìn)行導(dǎo)航

  1. 利用"反推法", 記住關(guān)鍵代碼即可
  2. 代碼如下:
    // 根據(jù)兩個(gè)地標(biāo)對(duì)象進(jìn)行調(diào)用系統(tǒng)導(dǎo)航
    - (void)beginNavWithBeginPlacemark:(CLPlacemark *)beginPlacemark andEndPlacemark:(CLPlacemark *)endPlacemark
    {
            // 創(chuàng)建起點(diǎn):根據(jù) CLPlacemark 地標(biāo)對(duì)象創(chuàng)建 MKPlacemark 地標(biāo)對(duì)象
            MKPlacemark *itemP1 = [[MKPlacemark alloc] initWithPlacemark:beginPlacemark];
            MKMapItem *item1 = [[MKMapItem alloc] initWithPlacemark:itemP1];

            // 創(chuàng)建終點(diǎn):根據(jù) CLPlacemark 地標(biāo)對(duì)象創(chuàng)建 MKPlacemark 地標(biāo)對(duì)象
            MKPlacemark *itemP2 = [[MKPlacemark alloc] initWithPlacemark:endPlacemark];
            MKMapItem *item2 = [[MKMapItem alloc] initWithPlacemark:itemP2];

            NSDictionary *launchDic = @{
                // 設(shè)置導(dǎo)航模式參數(shù)
                MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving,
                // 設(shè)置地圖類型
                MKLaunchOptionsMapTypeKey : @(MKMapTypeHybridFlyover),
                // 設(shè)置是否顯示交通
                MKLaunchOptionsShowsTrafficKey : @(YES),
        };

            // 根據(jù) MKMapItem 數(shù)組 和 啟動(dòng)參數(shù)字典 來(lái)調(diào)用系統(tǒng)地圖進(jìn)行導(dǎo)航
            [MKMapItem openMapsWithItems:@[item1, item2] launchOptions:launchDic];
        }

    3. 注意: CLPlacemark地標(biāo)對(duì)象沒(méi)法直接手動(dòng)創(chuàng)建, 只能通過(guò)(反)地理編碼獲取
    ```

### 3. 補(bǔ)充
1. 3D視圖

    ```objc
補(bǔ)充1:類似于地圖街景,增強(qiáng)用戶體驗(yàn)
        CLLocationCoordinate2D center = CLLocationCoordinate2DMake(23.132931, 113.375924);
        MKMapCamera *camera = [MKMapCamera cameraLookingAtCenterCoordinate:center fromEyeCoordinate:CLLocationCoordinate2DMake(center.latitude, center.longitude + 0.001) eyeAltitude:1];
        self.mapView.camera = camera;
    ```

2. 地圖截圖

    ```objc
// 截圖附加選項(xiàng)
        MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];
        // 設(shè)置截圖區(qū)域(在地圖上的區(qū)域,作用在地圖)
        options.region = self.mapView.region;
        // options.mapRect = self.mapView.visibleMapRect;

        // 設(shè)置截圖后的圖片大小(作用在輸出圖像)
        options.size = self.mapView.frame.size;
        // 設(shè)置截圖后的圖片比例(默認(rèn)是屏幕比例, 作用在輸出圖像)
        options.scale = [[UIScreen mainScreen] scale];

        MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options];
        [snapshotter startWithCompletionHandler:^(MKMapSnapshot * _Nullable snapshot, NSError * _Nullable error) {
        if (error) {
            NSLog(@"截圖錯(cuò)誤:%@",error.localizedDescription);
        }else
        {
            // 設(shè)置屏幕上圖片顯示
            self.snapshootImageView.image = snapshot.image;
            // 將圖片保存到指定路徑(此處是桌面路徑,需要根據(jù)個(gè)人電腦不同進(jìn)行修改)
            NSData *data = UIImagePNGRepresentation(snapshot.image);
            [data writeToFile:@"/Users/wangshunzi/Desktop/snap.png" atomically:YES];
        }
    }];

4. 測(cè)試環(huán)境

    1. 加載地圖數(shù)據(jù)需要聯(lián)網(wǎng)
    2. XCode版本不限
    3. iOS系統(tǒng)版本不限

5. 常見(jiàn)問(wèn)題總結(jié)

    1. 需要注意地標(biāo)對(duì)象不能手動(dòng)創(chuàng)建, 因?yàn)槔锩娴膶傩允莚eadonly; 只能通過(guò)(反)地理編碼獲取

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 導(dǎo)航的常用三種實(shí)現(xiàn)方案 1.可以將需要導(dǎo)航的位置丟給系統(tǒng)的地圖APP進(jìn)行導(dǎo)航 2.發(fā)送網(wǎng)絡(luò)請(qǐng)求到公司服務(wù)器獲取導(dǎo)航...
    iOS_成才錄閱讀 1,112評(píng)論 0 3
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,650評(píng)論 4 61
  • 談?wù)撍?,并且激發(fā)他如果得到它,這是世界上唯一能影響對(duì)方的方法。 行為是由于我們基本的欲望產(chǎn)生的 成功的人際關(guān)...
    拾葉姑娘閱讀 652評(píng)論 0 0
  • 03-樹(shù)1 樹(shù)的同構(gòu) (25分)給定兩棵樹(shù)T1和T2。如果T1可以通過(guò)若干次左右孩子互換就變成T2,則我們稱兩...
    有苦向瓜訴說(shuō)閱讀 388評(píng)論 0 0

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