1. 程式人生 > >IOS 呼叫第三方地圖APP導航

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 ---

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);

}