3

我正在尝试从我的 iPhone SDK 应用程序启动地图应用程序。现在我可以启动带有方向的地图应用程序,但它会显示方向的概述,并且不使用 Siri 和语音导航来提供转弯方向。

目前我有一个启动此代码的按钮...

NSString *address = viewedObject.addressFull;
NSString *url = [NSString stringWithFormat: @"http://maps.apple.com/maps?saddr=%f,%f&daddr=%@", here.latitude, here.longitude, [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
4

2 回答 2

4

在 iOS 6 中,有一种启动地图的新方法,使用openMapsWithItems:. MKMapItem这是我使用的一个片段,它提供从当前位置到提供的坐标的步行或驾车路线:

// iOS 6.0+ only
MKPlacemark* destPlace = [[[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil] autorelease];
MKMapItem* destMapItem = [[[MKMapItem alloc] initWithPlacemark:destPlace] autorelease]; destMapItem.name = stationItem.title;

NSArray* mapItems = [[[NSArray alloc] initWithObjects: destMapItem, nil] autorelease];
NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys:
                                 walking ? MKLaunchOptionsDirectionsModeWalking : MKLaunchOptionsDirectionsModeDriving,
                                 MKLaunchOptionsDirectionsModeKey, nil];
[MKMapItem openMapsWithItems:mapItems launchOptions:options];

你这样做的方式,如果在 iOS 6 之前的设备上运行,你仍然必须这样做,你需要dirflg在 URL 中包含来请求步行或驾驶方向:

// pre iOS 6 code
NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f&dirflg=%c",
    currentLocation.coordinate.latitude,
    currentLocation.coordinate.longitude,
    destination.coordinate.latitude,
    destination.coordinate.longitude,
    walking ? 'w' : 'd'];
于 2012-12-15T20:58:25.457 回答
2

我在上面的 progrmr 答案之上构建......下面的代码将采用地址的 NSString 输入,然后转发对其进行地理编码,然后打开带有语音导航方向的地图应用程序到 NSString 输入。NameString 和 PhoneString 附加到放置在地图应用程序上的地标上。如果没有上面的 progrmr 代码,下面的代码是不可能的,请将他的答案标记为有用。

    [self.geocoder geocodeAddressString:AddressString completionHandler:^(NSArray *placemarks, NSError *error) {

        if ([placemarks count] > 0) {
            CLPlacemark *placemark = [placemarks objectAtIndex:0];
            CLLocation *location = placemark.location;
            CLLocationCoordinate2D there = location.coordinate;

            MKPlacemark *destPlace = [[MKPlacemark alloc] initWithCoordinate:there addressDictionary:nil];
            MKMapItem *destMapItem = [[MKMapItem alloc] initWithPlacemark:destPlace];
            destMapItem.name = NameString;
            destMapItem.phoneNumber = PhoneString;

            NSArray* mapItems = [[NSArray alloc] initWithObjects: destMapItem, nil];
            NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys:MKLaunchOptionsDirectionsModeDriving, MKLaunchOptionsDirectionsModeKey, nil];
            [MKMapItem openMapsWithItems:mapItems launchOptions:options];
        }
    }];
于 2012-12-17T04:46:41.460 回答