IOS 呼叫第三方地圖APP導航
在開發中呼叫第三方APP進行路徑規劃,在此過程中不需要匯入所呼叫地圖的SDK,本文中只介紹呼叫百度地圖、高德地圖以及蘋果自身地圖APP。
在本專案中我用的是百度地圖編碼獲取的百度經緯度座標,而在開發過程中,百度座標和谷歌所轉化的經緯度座標存在些許的差別。
1.呼叫百度地圖APP
程式碼如下:
_latitudeStr, _longitudeStr 為起始位置經緯度
_endLatitudeStr, _endLongitudeStr 為終點位置經緯度
mode 為行走方式 rc 為所開發專案的名稱
// 呼叫百度地圖APP起點和終點位置按照經緯度傳
NSString *urlString = [[
//呼叫百度地圖APP起點和終點位置按照地名傳(需要精確到街道)
// NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin=latlng:
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];
2.呼叫高德地圖APP
程式碼如下:
//呼叫高德地圖App(引數檢視官方文件)
NSString *urlString = [[NSStringstringWithFormat
[[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 ---
constdouble 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);
}