google-maps - GPS定位在中国总是偏移

标签 google-maps

我在我的应用程序中使用了最新的 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 上绘制时显示为“关闭”。

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算法已经泄露,属于“公开 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;
}

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

enter image description here

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

关于google-maps - GPS定位在中国总是偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15448149/

相关文章:

javascript - 使用带有数据库 javascript MySQL PHP 坐标的 google maps api 创建线

android - 如何使用google map API获取附近的位置,如银行、酒店等?

javascript - 谷歌地图 API 错误 : RefererNotAllowedMapError in android device

java - 在 Android 中单击一个按钮即可打开 Google map !

java - Android 地理编码功能不如 iOS

javascript - 如何从电话间隙中的经纬度获取城市名称?

javascript - 谷歌地图的插值方法

ios - 我如何从谷歌地图获取设备的当前位置?

javascript - 谷歌地图——设置默认位置,这样你就不必为每个路由请求输入城市、州

javascript - 谷歌地图显示 :None Problem