美文网首页
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习惯理解成了经度和纬度,其实分别对应的是纬度和经度,所以得出经验教训需要认真阅读开发文档,写代码需要细心。

相关文章

  • 地图导航

    URI跳转方式地图导航的代码实践iOS调用第三方地图路线导航IOS实现应用内打开第三方地图app进行导航 高德 i...

  • 最详细的iOS应用内调用第三方地图进行导航

    iOS应用内调用第三方地图进行导航看我这篇就够了,所有的问题都能在这里找到答案 调用第三方地图主要是分三步 1、配...

  • 地图

    Android调用第三方地图,高德地图,百度地图!

  • 2019-03-26

    iOS 调起第三方地图导航

  • iOS调用第三方地图

    第三方地图调用 有时候项目需要用到地图功能,但需求仅仅是地点标注或路径导航等简单需求,就没必要在项目中集成各种地图...

  • flutter 第三方地图导航实现

    知识准备 这里实现flutter第三方地图导航,选用最简单的方式--调用第三方地图客户端;但各种地图客户端用的坐标...

  • iOS地图的使用

    在iOS开发中要用到地图时选择很多,例如第三方的高德地图、百度地图都是很好的选择,当然最基础的则是iOS中自带的地...

  • 百度地图

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

  • IOS 调用地图

    App中如何打开百度或者高德地图 百度地图URI API地址高德地图URI API地址腾讯地图URI API地址 ...

  • ios调用地图

    http://lbs.amap.com/api/amap-mobile/guide/ios/routehttp:/...

网友评论

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

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