美文网首页
iOS调用第三方地图

iOS调用第三方地图

作者: roc_lei | 来源:发表于2018-03-14 11:51 被阅读131次

    第三方地图调用

    有时候项目需要用到地图功能,但需求仅仅是地点标注或路径导航等简单需求,就没必要在项目中集成各种地图SDK增加开发成本和包的体积,可以采用项目中调用第三方地图应用的方式,除了iPhone自带的苹果地图外还可以集成一些国内常用的第三方地图,如高德地图、百度地图、腾讯地图等。这时候可以用 [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"xxxx://"]]的方式调用第三方地图,其中xxxx为协议名称,当第三方地图有客户端时候直接调用客户端,当第三方地图没有客户端时候调用第三方地图的WEB端。具体调用参考第三方地图的开发文档
    百度地图开放平台
    高德地图开发平台
    腾讯位置服务

    项目运行效果图如下:


    IMG_7644 -w240 IMG_7645-w240

    高德地图

    首先判断是否安装了高德地图客户端,安装了调用高德地图客户端,反之调用高德WEB

    CLLocationCoordinate2D corrds2 = _destionLocation.coordinate;
    NSString * urlString = @"";
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
        urlString = [[NSString stringWithFormat:@"iosamap://viewMap?sourceApplication=%@&poiname=%@&lat=%f&lon=%f&dev=1",@"应用来源",_mapAddressTitle,corrds2.latitude,corrds2.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    } else {
        urlString = [[NSString stringWithFormat:@"http://uri.amap.com/marker?position=%f,%f&name=%@&coordinate=gaode&src=%@&callnative=0",corrds2.longitude,corrds2.latitude,_mapAddressTitle,@"你的应用URL Schemes"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    }
    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlString]];
    

    百度地图

    首先判断是否安装了百度地图客户端,安装了调用百度地图客户端,反之调用百度地图WEB

    CLLocationCoordinate2D corrds2 = _destionLocation.coordinate;
    NSString *urlString =@"";
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://map"]]){
        urlString = [[NSString stringWithFormat:@"baidumap://map/marker?location=%f,%f&title=%@&content=%@&src=%@",corrds2.latitude,corrds2.longitude,_mapAddressTitle,_destination,@"XXXX"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ;
    } else {
        urlString = [[NSString stringWithFormat:@"http://api.map.baidu.com/marker?location=%f,%f&title=%@&content=%@&output=html",corrds2.latitude,corrds2.longitude,_mapAddressTitle,_destination] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    }
    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlString]];
    

    腾讯地图

    首先判断是否安装了腾讯地图客户端,安装了调用腾讯地图客户端,反之调用腾讯地图WEB

    CLLocationCoordinate2D corrds2 = _destionLocation.coordinate;
    NSString *urlString=@"";
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"qqmap://"]]) {
        urlString = [[NSString stringWithFormat:@"qqmap://map/marker?marker=coord:%f,%f;title:%@;addr:%@&referer=%@",corrds2.latitude,corrds2.longitude,_mapAddressTitle,_destination,@"xxxx"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    } else {
        urlString = [[NSString stringWithFormat:@"https://apis.map.qq.com/uri/v1/marker?marker=coord:%f,%f;title:%@;addr:%@&referer=%@",corrds2.latitude,corrds2.longitude,_mapAddressTitle,_destination,@"xxxx"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    }
    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlString]];    
    

    iPhone地图

    打开iPhone自带地图,代码如下:

        //起点坐标
        CLLocationCoordinate2D coords1 = [ZQTLocationTool sharedZQTLocationTool].currentLocation.coordinate;
        MKMapItem *currentLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:coords1 addressDictionary:nil]];
        currentLocation.name = @"当前位置";
        //目的地的位置
        CLLocationCoordinate2D coords2 = _destionLocation.coordinate;
        MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:coords2 addressDictionary:nil]];
        toLocation.name = _mapAddressTitle;
        
        NSArray *items = [NSArray arrayWithObjects: toLocation, nil];
        NSDictionary *options = @{
                                  MKLaunchOptionsMapTypeKey: [NSNumber numberWithInteger:MKMapTypeStandard],
                                  MKLaunchOptionsShowsTrafficKey:@YES
                                  };
        
        //打开苹果自身地图应用,并呈现特定的item
        [MKMapItem openMapsWithItems:items launchOptions:options];
    

    后记

    在集成的过程中也遇到过坑,高德地图打开网页端的时候一直显示无法识别地址,原因是自己不够认真,把接口@"http://uri.amap.com/marker?position=%f,%f&name=%@&coordinate=gaode&src=%@&callnative=0" 请求参数中的position参数对应的格式%f,%f习惯理解成了经度和纬度,其实分别对应的是纬度和经度,所以得出经验教训需要认真阅读开发文档,写代码需要细心。

    相关文章

      网友评论

          本文标题:iOS调用第三方地图

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