源码地址https://download.csdn.net/download/liuyinghui523/10801074
1.在app中获得定位权限
<key>NSLocationAlwaysUsageDescription</key>
<string>根据您的位置来提供服务</string>
<key>NSLocationUsageDescription</key>
<string>根据您的位置来提供服务</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>根据您的位置来提供服务</string>2.把地图应用加入跳转URI白名单
<key>LSApplicationQueriesSchemes</key>
<array>
<string>iosamap</string>
<string>baidumap</string>
<string>qqmap</string>
</array>3.调用方法
- (IBAction)btnPress:(id)sender {
CLLocationDegrees latitude = 31.178513;
CLLocationDegrees longitude = 121.494612;
CLLocationCoordinate2D endLocation = CLLocationCoordinate2DMake(latitude, longitude);
[self navThirdMapWithLocation:endLocation andTitle:@"世博大道"];
}
-(void)navThirdMapWithLocation:(CLLocationCoordinate2D)endLocation andTitle:(NSString *)titleStr{
NSMutableArray *mapsA = [NSMutableArray array];
//苹果原生地图方法和其他不一样
NSMutableDictionary *iosMapDic = [NSMutableDictionary dictionary];
iosMapDic[@"title"] = @"苹果地图";
[mapsA addObject:iosMapDic];
//高德地图
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
NSMutableDictionary *gaodeMapDic = [NSMutableDictionary dictionary];
gaodeMapDic[@"title"] = @"高德地图";
NSString *urlString = [[NSString stringWithFormat:@"iosamap://path?sourceApplication=ios.blackfish.XHY&dlat=%f&dlon=%f&dname=%@&style=2",endLocation.latitude,endLocation.longitude,titleStr] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
gaodeMapDic[@"url"] = urlString;
[mapsA addObject:gaodeMapDic];
}
//百度地图
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
NSMutableDictionary *baiduMapDic = [NSMutableDictionary dictionary];
baiduMapDic[@"title"] = @"百度地图";
NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name:%@&coord_type=gcj02&mode=driving&src=ios.blackfish.XHY",endLocation.latitude,endLocation.longitude,titleStr] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
baiduMapDic[@"url"] = urlString;
[mapsA addObject:baiduMapDic];
//腾讯地图
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"qqmap://"]]) {
NSMutableDictionary *qqMapDic = [NSMutableDictionary dictionary];
qqMapDic[@"title"] = @"腾讯地图";
NSString *urlString = [[NSString stringWithFormat:@"qqmap://map/routeplan?from=我的位置&type=drive&to=%@&tocoord=%f,%f&coord_type=1&referer={ios.blackfish.XHY}",titleStr,endLocation.latitude,endLocation.longitude] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
qqMapDic[@"url"] = urlString;
[mapsA addObject:qqMapDic];
}
}
//手机地图个数判断
if (mapsA.count > 0) {
//选择
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"使用导航" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
NSInteger index = mapsA.count;
for (int i = 0; i < index; i++) {
NSString *title = mapsA[i][@"title"];
NSString *urlString = mapsA[i][@"url"];
if (i == 0) {
UIAlertAction *iosAntion = [UIAlertAction actionWithTitle:title style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
[self appleNaiWithCoordinate:endLocation andWithMapTitle:titleStr];
}];
[alertVC addAction:iosAntion];
continue;
}
UIAlertAction *action = [UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
}];
[alertVC addAction:action];
}
UIAlertAction *cancleAct = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
}];
[alertVC addAction:cancleAct];
[self presentViewController:alertVC animated:YES completion:^{
}];
}else{
NSLog(@"未检测到地图应用");
}
}
//唤醒苹果自带导航
- (void)appleNaiWithCoordinate:(CLLocationCoordinate2D)coordinate andWithMapTitle:(NSString *)map_title{
MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocation];
MKMapItem *tolocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil]];
tolocation.name = map_title;
[MKMapItem openMapsWithItems:@[currentLocation,tolocation] launchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
MKLaunchOptionsShowsTrafficKey:[NSNumber numberWithBool:YES]}];
}
版权声明:本文为liuyinghui523原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。