iOS调用第三方地图

2018-03-14  本文已影响131人  roc_lei

第三方地图调用

有时候项目需要用到地图功能,但需求仅仅是地点标注或路径导航等简单需求,就没必要在项目中集成各种地图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习惯理解成了经度和纬度,其实分别对应的是纬度和经度,所以得出经验教训需要认真阅读开发文档,写代码需要细心。

上一篇下一篇

猜你喜欢

热点阅读