百度地图和高德地图的坐标互相转换
一、知识扩展:地图中的坐标体系体系常用分类
- 1、GPS,WGS-84,原始坐标体系。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。很可惜,在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密。
- 2、GCJ-02,国测局02年发布的坐标体系。又称“火星坐标”。在中国,必须至少使用GCJ-02的坐标体系。比如谷歌,腾讯,高德都在用这个坐标体系。GCJ-02也是国内最广泛使用的坐标体系。
- 3、其他坐标体系。一般都是由GCJ-02进过偏移算法得到的。这种体系就根据每个公司的不同,坐标体系都不一样了。比如,百度和搜狗就使用自己的坐标体系,与其他坐标体系不兼容。
百度地图坐标转高德地图坐标
- 资源链接
- 我们利用高德地图提供的接口,实现百度地图坐标转高德地图坐标
- 服务地址:
http://restapi.amap.com/v3/assistant/coordinate/convert
- 需要请求的参数
| 参数 | 参数所对应的值 |
| :--------- | --------------------:|
| key|开发者在高德官网创建应用后生成的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
网友评论