在开发中调用第三方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);
}