App 跳轉內建 Map App

  • 已知單一位置經緯度
// 創建 coordinate
CLLocationCoordinate2D coordinate =
CLLocationCoordinate2DMake(latitude, longitude);

// 創建 MKPlacemark
MKPlacemark *placemark = [[MKPlacemark alloc]initWithCoordinate:coordinate
                                              addressDictionary:nil];

// 創建 MKMapItem
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
mapItem.name = @"Target place";

// 跳轉至 Map App
[mapItem openInMapsWithLaunchOptions:nil];

// 或是使用 Class method 替代
// [MKMapItem openMapsWithItems:@[mapItem] launchOptions:nil];
  • 已知單一位置地址
NSString *address    = @"403台中市西區健行路1049號";
CLGeocoder *geocoder = [[CLGeocoder alloc]init];

void (^handler)(NSArray *geoMarks, NSError *error) = ^(NSArray *geoMarks, NSError *error){
    CLPlacemark *geoMark    = geoMarks.firstObject;
    MKPlacemark *targetMark = [[MKPlacemark alloc]initWithPlacemark:geoMark];
    MKMapItem *targetItem   = [[MKMapItem alloc]initWithPlacemark:targetMark];
    
    [targetItem openInMapsWithLaunchOptions:nil];
};

[geocoder geocodeAddressString:address completionHandler:handler];
  • 兩點路徑規劃
/** 這裡以 User 目前位置跟 Target 位置做規劃 */

// 使用者目前位置
MKMapItem *currentLocationMapItem = [MKMapItem mapItemForCurrentLocation];

// Target 位置, 按照上兩個方式創建
 MKMapItem *targetItem = ......

// 路徑方式, 這裡以開車做規劃
NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving};

// 跳轉至 Map App, 只能使用 Class method
[MKMapItem openMapsWithItems:@[currentLocationMapItem, targetItem]
               launchOptions:launchOptions];

你可能感兴趣的:(App 跳轉內建 Map App)