百度地圖和高德地圖的坐標互相轉換

百度地圖和高德地圖的坐標互相轉換

一、知識擴展:地圖中的坐標體系體系常用分類

  • 1、GPS,WGS-84,原始坐標體系。一般用國際標準的GPS記錄儀記錄下來的坐標,都是GPS的坐標。很可惜,在中國,任何一個地圖產品都不允許使用GPS坐標,據說是為了保密。
  • 2、GCJ-02,國測局02年發(fā)布的坐標體系。又稱“火星坐標”。在中國,必須至少使用GCJ-02的坐標體系。比如谷歌,騰訊,高德都在用這個坐標體系。GCJ-02也是國內最廣泛使用的坐標體系。
  • 3、其他坐標體系。一般都是由GCJ-02進過偏移算法得到的。這種體系就根據每個公司的不同,坐標體系都不一樣了。比如,百度和搜狗就使用自己的坐標體系,與其他坐標體系不兼容。

百度地圖坐標轉高德地圖坐標

  • 資源鏈接
  • 我們利用高德地圖提供的接口,實現百度地圖坐標轉高德地圖坐標
  • 服務地址: http://restapi.amap.com/v3/assistant/coordinate/convert
  • 需要請求的參數
    | 參數 | 參數所對應的值 |
    | :--------- | --------------------:|
    | key|開發(fā)者在高德官網創(chuàng)建應用后生成的key |
    |locations | 坐標點(經度,維度)(經緯度小數點后不得超過6位。多個坐標對之間用”;”進行分隔最多支持40對坐標。)|
    |coordays |填baidu, 這個是原始坐標系|
    | output | 填JSON, 這個是返回值類型 |
  • eg: http://restapi.amap.com/v3/assistant/coordinate/convert?key=3688d3baa2a66a4d1b934b9dcc2f7e5d&locations=116.481499,39.990475&coordsys=baidu&output=JSON
  • 注意點:申請的key得是webAPI的key
  • Paste_Image.png

高德地圖坐標轉百度地圖坐標

  • 資料鏈接

  • 需要使用百度地圖的SDK包

  • Paste_Image.png

.h文件

//
//  LYBaiduGaodeCooder.h
//  project2016
//
//  Created by liyang on 16/8/3.
//  Copyright ? 2016年 liyang. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@interface LYBaiduGaodeCooder : NSObject

/**
 *  高德地圖坐標轉成百度地圖坐標
 *
 *  @param ulong 經度
 *  @param ulat  維度
 */
+ (void)cooderFromGaoDeToBaiDuWithCoorderlong:(NSString *)ulong lat:(NSString *)ulat callBack:(void(^)(CLLocationCoordinate2D coorder,NSError *error))callBack;

/**
 *  百度地圖的坐標轉成高德地圖的坐標
 *
 *  @param ulong 經度
 *  @param ulat  維度
 */
+ (void)cooderFromBaiDuToGaoDeWithCoorderlong:(NSString *)ulong lat:(NSString *)ulat callBack:(void(^)(CLLocationCoordinate2D coorder,NSError *error))callBack;
@end

.m文件源碼

//
//  LYBaiduGaodeCooder.m
//  project2016
//
//  Created by liyang on 16/8/3.
//  Copyright ? 2016年 liyang. All rights reserved.
//  高德地圖坐標和百度地圖坐標轉換

#import "LYBaiduGaodeCooder.h"
#import "LYConst.h"
#import <BaiduMapAPI_Base/BMKBaseComponent.h>
#import <BaiduMapAPI_Map/BMKMapComponent.h>
#import <BaiduMapAPI_Location/BMKLocationComponent.h>
#import <BaiduMapAPI_Utils/BMKUtilsComponent.h>
#import "BMKClusterManager.h"
#import <UIKit/UIKit.h>

@implementation LYBaiduGaodeCooder

// 從高德地圖的坐標轉成百度地圖的坐標
+ (void)cooderFromGaoDeToBaiDuWithCoorderlong:(NSString *)ulong lat:(NSString *)ulat callBack:(void (^)(CLLocationCoordinate2D, NSError *))callBack
{
    CLLocationCoordinate2D coor = CLLocationCoordinate2DMake([ulat doubleValue], [ulong doubleValue]);//原始坐標
    //轉換 google地圖、soso地圖、aliyun地圖、mapabc地圖和amap地圖所用坐標至百度坐標
    NSDictionary *testdic = BMKConvertBaiduCoorFrom(coor,BMK_COORDTYPE_COMMON);
    //轉換GPS坐標至百度坐標(加密后的坐標)
    testdic = BMKConvertBaiduCoorFrom(coor,BMK_COORDTYPE_GPS);
    //解密加密后的坐標字典
    CLLocationCoordinate2D baiduCoor = BMKCoorDictionaryDecode(testdic);//轉換后的百度坐標
    callBack(baiduCoor, nil);
}

// 從百度地圖的坐標轉成高德地圖的坐標
+ (void)cooderFromBaiDuToGaoDeWithCoorderlong:(NSString *)ulong lat:(NSString *)ulat callBack:(void (^)(CLLocationCoordinate2D, NSError *))callBack
{
    NSString *coords = [NSString stringWithFormat:@"%@,%@", ulong, ulat];
    NSDictionary *param = @{
                            @"key":gaodeMapWebKey,
                            @"locations":coords,
                            @"coordsys":@"baidu",
                            @"output":@"json"
                            };
    [[LYNetworking sharedInstance] POST:@"http://restapi.amap.com/v3/assistant/coordinate/convert" parameters:param success:^(id  _Nonnull responseObject) {
        
        if ([responseObject isKindOfClass:[NSDictionary class]]) {
            NSString *locations = [responseObject objectForKey:@"locations"];
            NSArray *loccationArray = [locations componentsSeparatedByString:@","];
            CLLocationCoordinate2D gaodeCoord = CLLocationCoordinate2DMake([[loccationArray firstObject] doubleValue], [[loccationArray lastObject] doubleValue]);
            callBack(gaodeCoord, nil);
        }else{
            callBack(CLLocationCoordinate2DMake(0, 0), [NSError errorWithDomain:@"請求出錯" code:1322 userInfo:@{@"msg":@"請求出錯"}]);
        }
    } failure:^(NSError * _Nonnull error) {
        NSLog(@"%@",error);
        callBack(CLLocationCoordinate2DMake(0, 0), error);
    }];
}

@end
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容