GPS位置在中国总是被抵消

时间:2013-03-16 10:28:20

标签: google-maps

我在我的应用程序中使用最新的Google Maps iOS SDK,似乎GPS位置总是在中国偏移1-2个街区,但是,在Google Maps官方应用中,该位置100%正确。< / p>

我发现这篇帖子似乎就是为什么:http://home.wangjianshuo.com/archives/20081109_all_maps_in_china_are_transformed.htm

官方应用似乎使用了正确转换后的地图,而Google地图iOS SDK却没有。有没有人找到解决方法呢?

2 个答案:

答案 0 :(得分:6)

GPS offset in China的原因是技术(不同基准)和政治/经济利益的结合。

由于&#34;安全问题&#34;,中国使用与世界其他地方不同的坐标系 - GCJ-02而不是GPS卫星使用的WGS-84标准和绝大多数地图所有中国地图必须经国务院批准,以标明中国在各种政治争议财产(西藏,台湾等)的立场。批准还要求地图使用GCJ-02。这导致WGS-84位置(例如来自未掺杂的GPS接收器的GPS轨迹)出现&#34;关闭&#34;在中国街道地图上绘制时。

GPS coordinates appear offset on GCJ-02 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算法已被泄露,并且是一个公共秘密&#34; (搜索&#34; GCJ-02转换&#34;发现大量结果)。值得注意的是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;
}

包括大部分印度,南韩,朝鲜,菲律宾,越南,蒙古,泰国和其他许多国家:

enter image description here

改进是使用多边形边界,例如china.kml

答案 1 :(得分:0)

这是不是因为中国使用的坐标系与我们使用WGS84的坐标系不同?

以下是一些可以处理WGS84

翻译的code