百度地圖和高德地圖的坐標互相轉換
一、知識擴展:地圖中的坐標體系體系常用分類
- 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

