中国 GPS 偏移的原因是技术(不同基准)和政治/经济利益的结合。
出于“安全考虑”,中国使用与世界其他地区不同的坐标系——GCJ-02,而不是GPS卫星和绝大多数地图使用的WGS-84标准。所有中国地图必须经国务院批准,以标明中国在各种政治争议领土(西藏、台湾等)上的立场。批准还要求地图使用 GCJ-02。这会导致 WGS-84 位置(例如来自纯 GPS 接收器的 GPS 轨迹)在绘制在中国街道地图上时显示为“关闭”。
不同的坐标系通常不是问题,但中国选择加密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。