105 獲取路線信息和繪製導航線

1.獲取路線信息,拿到地名然後地理編碼拿到CLPlaceMark,然後調用以下方法:

- (void)startDirectionsWithstartCLPlacemark:(CLPlacemark *)startCLPlacemark endCLPlacemark:(CLPlacemark *)endCLPlacemark
{

    /*
     MKDirectionsRequest:說清楚:從哪裏 --> 到哪裏
     MKDirectionsResponse:從哪裏 --> 到哪裏 :的具體路線信息
     */

    // -1.創建起點和終點對象
    // -1.1創建起點對象
    MKPlacemark *startMKPlacemark = [[MKPlacemark alloc] initWithPlacemark:startCLPlacemark];
    MKMapItem *startItem = [[MKMapItem alloc] initWithPlacemark:startMKPlacemark];

    // -1.2創建終點對象
    MKPlacemark *endMKPlacemark = [[MKPlacemark alloc] initWithPlacemark:endCLPlacemark];
    MKMapItem *endItem = [[MKMapItem alloc] initWithPlacemark:endMKPlacemark];


    // 0.創建request對象
    MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
    // 0.1設置起點
    request.source = startItem;
    // 0.2設置終點
    request.destination = endItem;



    // 1.發送請求到蘋果的服務器獲取導航路線信息
    // 接收一個MKDirectionsRequest請求對象, 我們需要在該對象中說清楚:
    // 從哪裏 --> 到哪裏
    MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
    // 2.計算路線信息, 計算完成之後會調用blcok
    // 在block中會傳入一個響應者對象(response), 這個響應者對象中就存放着路線信息
    [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {


        // 打印獲取到的路線信息
        // 2.1獲取所有的路線
        NSArray *routes = response.routes;
        for (MKRoute *route in routes) {
            NSLog(@"%f千米 %f小時", route.distance / 1000, route.expectedTravelTime/ 3600);
            //  3.繪製路線(本質: 往地圖上添加遮蓋)
            // 傳遞當前路線的幾何遮蓋給地圖, 地圖就會根據遮蓋自動繪製路線
            // 當系統開始繪製路線時會調用代理方法詢問當前路線的寬度/顏色等信息
            [self.mapVIew addOverlay:route.polyline];
            NSArray *steps = route.steps;
            for (MKRouteStep *step in steps) {
                NSLog(@"%@ %f", step.instructions, step.distance);
            }

        }
    }];
}

2.繪製導航線,在上一個方法中mapview的addOverlay方法,就是每獲得路線就會開始畫線,然後會調用以下代理方法:

#pragma mark - MKMapViewDelegate

// 過時
//- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay

// 繪製路線時就會調用(添加遮蓋時就會調用)
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
//    MKOverlayRenderer *renderer = [[MKOverlayRenderer alloc] init];
    // 創建一條路徑遮蓋
    NSLog(@"%s", __func__);
#warning 注意, 創建線條時候,一定要制定幾何路線
    MKPolylineRenderer *line = [[MKPolylineRenderer alloc] initWithPolyline:overlay];
    line.lineWidth = 5; // 路線的寬度
    line.strokeColor = [UIColor redColor];// 路線的顏色

    // 返回路線
    return line;
}
發佈了124 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章