我在我的应用中使用的是最新的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,而不是GPS卫星和绝大多数 map 所使用的WGS-84标准。所有中国 map 都必须经国务院批准,才能在各种政治上有争议的属性(property)(西藏,台湾等)上标记中国的立场。批准还要求 map 使用GCJ-02。这会导致WGS-84位置(例如来自纯净GPS接收器的GPS轨迹)在中国街道 map 上绘制时显得“关闭”。



不同的坐标系通常不是问题,但是中国选择对GCJ-02进行加密,因此没有直接的转换。第一个attempt at a conversion在2010年曾经能够计算偏差时使用a database of coordinates obtained from Google China Maps(ditu.google.com)。这是一种插值方法,有些不精确。数据集与offsets calculated for thousands of Chinese cities一起出售。

同时,GCJ-02算法已泄漏,并且是“公共(public) 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/

10-11 06:08