13

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

我遇到了这篇文章,这似乎是原因:http ://home.wangjianshuo.com/archives/20081109_all_maps_in_china_are_transformed.htm

似乎官方应用程序使用了正确转换的地图,而 Google Maps iOS SDK 没有。有没有人找到解决这个问题的方法?

4

2 回答 2

9

中国 GPS 偏移的原因是技术(不同基准)和政治/经济利益的结合。

出于“安全考虑”,中国使用与世界其他地区不同的坐标系——GCJ-02,而不是GPS卫星和绝大多数地图使用的WGS-84标准。所有中国地图必须经国务院批准,以标明中国在各种政治争议领土(西藏、台湾等)上的立场。批准还要求地图使用 GCJ-02。这会导致 WGS-84 位置(例如来自纯 GPS 接收器的 GPS 轨迹)在绘制在中国街道地图上时显示为“关闭”。

GPS坐标在GCJ-02地图上出现偏移

不同的坐标系通常不是问题,但中国选择加密GCJ-02,因此没有直接的转换。第一次转换尝试使用了从谷歌中国地图(ditu.google.com) 获得的坐标数据库,当时它可以在 2010 年计算偏差。这是一种插值方法,有些不精确。数据集以中国数千个城市计算的偏移量出售。

与此同时,GCJ-02算法已经泄露,属于“公开机密”(搜索“GCJ-02转换”可以找到很多结果)。值得注意的是eviltransform项目,它为 C、C#、Go、Java、JavaScript 和 PHP 提供转换 API。geoChina 库使用R 处理 GJC-02、WGS-084 和百度的 BD-09 之间的转换。

这段代码很重要,并且还执行了一个非常粗略的 边界框检查来确定一个位置是否在中国:

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

于 2015-04-08T11:26:14.033 回答
0

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

这是一些可以处理来自 WGS84 的翻译的代码

于 2015-04-06T06:08:14.677 回答