如何解决
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;
找软件资料,就到一览软件文库