IOS 调用第三方地图APP导航

在开发中调用第三方APP进行路径规划,在此过程中不需要导入所调用地图的SDK,本文中只介绍调用百度地图、高德地图以及苹果自身地图APP。

在本项目中我用的是百度地图编码获取的百度经纬度坐标,而在开发过程中,百度坐标和谷歌所转化的经纬度坐标存在些许的差别。

1.调用百度地图APP

代码如下:

_latitudeStr_longitudeStr 为起始位置经纬度

_endLatitudeStr_endLongitudeStr 为终点位置经纬度

mode 为行走方式   rc 为所开发项目的名称

//            调用百度地图APP起点和终点位置按照经纬度传

                NSString *urlString = [[NSStringstringWithFormat:@"baidumap://map/direction?origin=%@,%@&destination=%@,%@&mode=driving&rc=cab",_latitudeStr,_longitudeStr,_endLatitudeStr,_endLongitudeStr]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

               //调用百度地图APP起点和终点位置按照地名传(需要精确到街道)

                //            NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin=latlng:朝阳门朝外大街&destination=latlng:天安门&mode=driving&rc=cab"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ;

                [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];


2.调用高德地图APP

代码如下:

//调用高德地图App(参数查看官方文档)

                NSString *urlString = [[NSStringstringWithFormat:@"iosamap://path?sourceApplication=cab&sid=BGVIS1&slat=%@&slon=%@&did=BGVIS2&sname=我的位置&dlat=%@&dlon=%@&dev=0&m=0&t=0",_latitudeStr,_longitudeStr,_endLatitudeStr,_endLongitudeStr]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

                [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];



3.调用苹果自带地图APP

代码如下:

        //获取当前的位置

        MKMapItem *currentLocation = [MKMapItemmapItemForCurrentLocation];

        //目的地的位置

        //由于与百度地图所转化的经纬度坐标存在差异通过 transform_baidu_from_mars方法进行转化(使用转化之后的坐标)

        double lat =0.0;

        double lng =0.0;

        transform_baidu_from_mars([self.endLatitudeStrfloatValue], [self.endLongitudeStrfloatValue], &lat, &lng);


        CLLocation * location2 = [[CLLocationalloc]initWithLatitude:latlongitude:lng];

        

        CLLocationCoordinate2D coor2 =location2.coordinate;

        

        MKMapItem *toLocation = [[MKMapItemalloc] initWithPlacemark:[[MKPlacemarkalloc] initWithCoordinate:coor2addressDictionary:nil]];

        

        NSArray *items = [NSArrayarrayWithObjects:currentLocation, toLocation,nil];

        

        NSDictionary *options =@{ MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsMapTypeKey: [NSNumbernumberWithInteger:MKMapTypeStandard],MKLaunchOptionsShowsTrafficKey:@YES};

        //打开苹果自身地图应用,并呈现特定的item

        [MKMapItemopenMapsWithItems:items launchOptions:options];



注意:在判断手机上是否存在所调用的地图APP时,需要在Plist文件中配置东西

    //调用高德地图和百度地图APP需要配置Plist文件

//    <key>LSApplicationQueriesSchemes</key>

//    <array>

//    <string>baidumap</string>

//    <string>iosamap</string>

//    </array>


附:百度地图经纬度坐标转化方法 (该方法属于转载)

//将百度地图坐标转化为火星坐标(可适用于高德地图)

// --- transform_earth_from_mars end ---

// --- transform_mars_vs_bear_paw ---

// 参考来源:http://blog.woodbunny.com/post-68.html

const double x_pi =M_PI * 3000.0 /180.0;

void transform_baidu_from_mars(double bd_lat,double bd_lon, double *gg_lat,double *gg_lon)

{

    double x = bd_lon -0.0065, y = bd_lat - 0.006;

    double z =sqrt(x * x + y * y) - 0.00002 * sin(y *x_pi);

    double theta =atan2(y, x) - 0.000003 *cos(x * x_pi);

    *gg_lon = z * cos(theta);

    *gg_lat = z * sin(theta);

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值