我在我的应用程序中使用了最新的 Google Maps iOS SDK,似乎 GPS 位置在中国总是偏移 1-2 个街区,但是,在 Google Maps 官方应用程序中,位置是 100% 正确的。
我遇到了这篇文章,这似乎是原因:http://home.wangjianshuo.com/archives/20081109_all_maps_in_china_are_transformed.htm
似乎官方应用程序使用了正确转换的 map ,而 Google Maps iOS SDK 没有。有没有人找到解决这个问题的方法?
最佳答案
GPS offset in China 的原因是技术(不同的数据)和政治/经济利益的结合。
出于“安全考虑”,中国使用与世界其他地区不同的坐标系 - GCJ-02而不是 WGS-84 GPS 卫星和绝大多数 map 使用的标准。所有中国 map 必须经国务院批准,以标明中国在各种政治争议领土(西藏、台湾等)上的立场。批准还要求 map 使用 GCJ-02。这会导致 WGS-84 位置(例如来自纯 GPS 接收器的 GPS 轨迹)在中国街道 map 上绘制时显示为“关闭”。
不同的坐标系通常不是问题,但中国选择加密 GCJ-02,因此没有直接的转换。第一个attempt at a conversion使用 a database of coordinates obtained from Google China Maps (ditu.google.com) 早在 2010 年就能够计算出偏差。这是一种插值方法,有些不精确。数据集以 offsets calculated for thousands of Chinese cities 出售.
与此同时,GCJ-02算法已经泄露,属于“公开 secret ”(搜索“GCJ-02转换”可以找到很多结果)。值得注意的是eviltransform项目,它为 C、C#、Go、Java、JavaScript 和 PHP 提供转换 API。 geoChina library使用 R 处理 GJC-02、WGS-084 和百度的 BD-09 之间的转换。
代码很重要,还执行 very rough bounding box check确定位置是否在中国:
function outOfChina(lat, lng) {
if ((lng < 72.004) || (lng > 137.8347)) {
return true;
}
if ((lat < 0.8293) || (lat > 55.8271)) {
return true;
}
return false;
}
这包括印度大部分地区、南朝鲜和朝鲜、菲律宾、越南、蒙古、泰国和许多其他国家:
一种改进是使用多边形边界,例如 china.kml .
关于google-maps - GPS定位在中国总是偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15448149/