background image

如何解决

iOS 经纬度偏移

正在进行的项目中有这样的需求:定位获得当前经纬度,再用百度

Place API 使用经纬度查

询周边信息。这里不需要显示地图,只需要定位。看似思路很顺畅,做起来却不容易。

iPhone 的 GPS 定位(CLLocationManager)获得的经纬坐标是基于 WGS-84 坐标系(世界标

准),

Google 地图使用的是 GCJ-02 坐标系(中国特色的火星坐标系),这就是为什么获

得的经纬坐标在

google 地图上会发生偏移。我项目需求是使用百度 Place API,百度的经纬

坐标在

GCJ-02 的基础上再做了次加密,就是 DB-09 坐标系。就想使用百度地图的 IOS 

SDK,里面的坐标系统都是一致的而不用转换,下载 2.0 版的一看,没有类似

CLLocationManager 的定位功能,只是提供了 BMapKit 的地图功能,看它提供的 Demo 里

的地图控件里也是空白一片

~~ ——!好吧,放弃使用之。

在网上搜索一番,有现成的算法转换坐标,经试验

 从 WGS-84 到 GCJ-02,再到 DB-09,经

两次转换后,顺利获得当前正确地理位置信息和周边信息,当然这些信息是来自百度的。现

显出来算法公式,原理不知。

// 定义经纬度结构体

typedef 

struct

 {

 

double

 lng;

 

double

 lat;

} Location;

inline Location
LocationMake(

double

 lng, 

double

 lat) {

  Location loc; loc.lng = lng, loc.lat = lat; 

return

 loc;

}

///
///  WGS-84 到 GCJ-02 的转换
/// 

const

 

double

 pi = 3.14159265358979324;

                   找软件资料,就到一览软件文库

http://wk.yl1001.com/rj/