美文网首页
IOS 跳转到高德百度地图

IOS 跳转到高德百度地图

作者: 夏天爱大树 | 来源:发表于2017-05-10 17:17 被阅读173次

公司产品需要用到地图功能,不过由于只是展示地图上的位置信息,所以没有集成地图,改为跳转到高德或者百度地图,如果都没有就跳转到safari上的网页地图。

  • 第一步. 首先配置infoPlist
info_plist.png
//ios10以后OpenURL要用新方法
if ([[UIDevice currentDevice].systemVersion integerValue] >= 10)
    {
        NSDictionary *options = @{UIApplicationOpenURLOptionsSourceApplicationKey:@YES};
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[self getAmapUrl:request]] options:options completionHandler:^(BOOL success) {
//这里的success不管有没有安装高德地图值都是YES, 所以是否打开成功不能用这个参数判断
//所以在appdelegate里面添加了参数openingExternalProgram判断是否有打开高德或者百度

            if (((AppDelegate *)[UIApplication sharedApplication].delegate).openingExternalProgram) {
                [ZMLoad stopLoading];
                ((AppDelegate *)[UIApplication sharedApplication].delegate).openingExternalProgram = NO;
                LCLog(@"跳转高德地图成功");
            }else{
                LCLog(@"跳转高德地图失败");
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[self getBaiduMapUrl:request]] options:options completionHandler:^(BOOL success) {
                    if (((AppDelegate *)[UIApplication sharedApplication].delegate).openingExternalProgram) {
                        [ZMLoad stopLoading];
                        ((AppDelegate *)[UIApplication sharedApplication].delegate).openingExternalProgram = NO;
                        LCLog(@"跳转百度地图成功");
                    }else{
                        [ZMLoad stopLoading];
                        LCLog(@"跳转百度地图失败");
                        [self loadSafari];
                    }
                }];
            }
        }];
    }
    else
    {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[self getAmapUrl:request]]];
        [LCTools delay:0.5 completeHandle:^{
            if (((AppDelegate *)[UIApplication sharedApplication].delegate).openingExternalProgram)
            {
                 NSLog(@"跳转高德地图成功");
                [ZMLoad stopLoading];
                ((AppDelegate *)[UIApplication sharedApplication].delegate).openingExternalProgram = NO;
            }
            else
            {
                NSLog(@"跳转高德地图失败");
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[self getBaiduMapUrl:request]]];
                [LCTools delay:0.5 completeHandle:^{
                    if (((AppDelegate *)[UIApplication sharedApplication].delegate).openingExternalProgram)
                    {
                       NSLog(@"跳转百度地图成功");
                        [ZMLoad stopLoading];
                        ((AppDelegate *)[UIApplication sharedApplication].delegate).openingExternalProgram = NO;
                    }
                    else
                    {
                        NSLog(@"跳转百度地图失败");
                        [ZMLoad stopLoading];
                        [self loadSafari];
                    }
                }];
            }
        }];
    }
}


- (void)loadSafari
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[self getSafariUrl]]];
}


- (NSString *)getSafariUrl
{
    if (self.request==nil)
    {
        return @"";
    }
    NSString *coordinate = [self.request.URL queryParameterForKey:@"coordinate"];
    NSString *position = [self.request.URL queryParameterForKey:@"position"];
    NSString *name = [self.request.URL queryParameterForKey:@"name"];
    NSString *url = [NSString stringWithFormat:@"http://uri.amap.com/marker?callnative=0&coordinate=%@&position=%@&name=%@",coordinate,position,urlencode(name)];
    return url;
}

- (NSString *)getAmapUrl:(NSURLRequest *)request
{
    LCLog(@"%@",urldecode([request.URL queryParameterForKey:@"name"]));
    NSString *name = [request.URL queryParameterForKey:@"name"];
    NSString *position = [request.URL queryParameterForKey:@"position"];
    NSArray *positionArr = [position componentsSeparatedByString:@","];
    NSString *lon = [positionArr firstObject];
    NSString *lat = [positionArr lastObject];
    NSString *url = [NSString stringWithFormat:@"iosamap://viewMap?sourceApplication=%@&poiname=%@&lat=%@&lon=%@&dev=1",urlencode(@"app名称"),urlencode(name),lat,lon];
    return url;
}

- (NSString *)getBaiduMapUrl:(NSURLRequest *)request
{
    NSString *name = [request.URL queryParameterForKey:@"name"];
    NSString *position = [request.URL queryParameterForKey:@"position"];
    NSArray *positionArr = [position componentsSeparatedByString:@","];
    NSString *lon = [positionArr firstObject];
    NSString *lat = [positionArr lastObject];
//    NSString *url = @"baidumap://";
    NSString *url = [NSString stringWithFormat:@"baidumap://map/marker?location=%@,%@&title=%@&content=%@&src=%@&coord_type=%@",lat,lon,urlencode(name),urlencode(name),urlencode(@"webapp.geo.app名称"),urlencode(@"gcj02")];
    NSLog(@"%@",url);
    return url;
}

//这行代码是AppDelegate里面的---
- (void)applicationWillResignActive:(UIApplication *)application {
   
    self.openingExternalProgram = YES;
}

相关文章

  • RN-地图导航

    调起百度网页地图路径导航 调起高德网页地图路径导航 iOS调起百度APP地图路径导航 iOS调起高德app地图路径...

  • iOS跳转第三方地图导航

    在iOS开发应用过程中,会遇到跳转第三方应用地图进行导航的场景,例如跳转到高德地图,百度地图.如图所示 首先,如果...

  • 地图集成调研

    地图集成调研 主要地图API有百度地图、高德地图、腾讯地图、搜狗地图(android、IOS暂不开放)。 百度地图...

  • IOS 跳转到高德百度地图

    公司产品需要用到地图功能,不过由于只是展示地图上的位置信息,所以没有集成地图,改为跳转到高德或者百度地图,如果都没...

  • h5调用地图功能

    h5 调起百度、高德地图定位 高德地图 百度地图 注意: 高德地图和百度地图的经纬度传值是相反着的 h5 调起高...

  • 百度地图

    IOS第三方地图 百度地图高德地图腾讯地图苹果自带地图谷歌地图(中国屏蔽了) 接下来我们说一下百度地图百度地图SD...

  • Web端a标签跳转地图等链接(收藏)

    百度地图 高德地图

  • iOS 跳转地图(谷歌,高德,百度,腾讯,苹果)

    功能包括跳转谷歌地图,高德地图,百度地图,腾讯地图,苹果地图其中 设置URL Scheme(iOS11以上左上角可...

  • js唤醒手机百度地图高德地图app

    高德地图 百度地图 高德地图和百度地图的经纬度传值是相反着的 调起百度地图pc或者web api

  • swift 实现应用外导航(swift3.1)

    简单介绍下如何使用 swift 实现跳转到高德地图、百度地图、或系统自带地图导航,有了这个,妈妈再也不用担心app...

网友评论

      本文标题:IOS 跳转到高德百度地图

      本文链接:https://www.haomeiwen.com/subject/kqugtxtx.html