当前位置: 首页 > 知识库问答 >
问题:

GPS定位在中国总是偏移的

俞新翰
2023-03-14

我在我的应用程序中使用最新的谷歌地图iOSSDK,似乎GPS位置在中国总是被1-2个街区抵消,然而,在谷歌地图官方应用程序中,位置是100%正确的。

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

官方应用程序似乎使用了正确转换的地图,而谷歌地图iOS SDK则没有。有人找到了解决方法吗?

共有2个答案

吕霄
2023-03-14

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

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

年嘉禧
2023-03-14

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

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

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

与此同时,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;
}

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

一个改进是使用多边形边界,比如中国。kml。

 类似资料:
  • 我正在为中国开发一个需要GPS位置跟踪的android应用程序。对于位置跟踪,android需要访问Google play服务。但Google play服务在中国被屏蔽。 这个问题有解决办法吗?有没有推荐的第三方库或实现? 谢谢

  • 我有一个android应用程序,将跟踪用户的位置。它被设置为使用WiFi/网络位置服务,如果可能的话,否则使用GPS_PROVIDER服务。当有wifi连接时,它工作得很好,但当我设置只从GPS获取位置时,应用程序崩溃了。通过测试,我得到了行location=locationmanager.getlastknownlocation(locationmanager.gps_provider);实际上

  • 在Kafka消费者中,自动偏移重置:最新和启用自动提交:false的主要目的是什么。 在Kafka consumer中,我是否可以在KafkaListner期间检查是否能够接收重复记录或处理以前的记录 在spring boot中创建消费者端时,需要记住的所有必要事项以及日志记录的所有重要事项是什么,以便日志记录具有一定的意义

  • 问题内容: 我的数据库应用程序将部署在不同时区的多个站点上。 我需要一个T-SQL函数,该函数将确定YTD计算本年1月1日午夜的UTC时间戳。所有数据都存储在UTC时间戳中。 例如,芝加哥是具有夏令时(DST)的UTC-6,如果该功能在2008年的任何时间在芝加哥运行,则该函数需要返回“ 2008-01-01 06:00:00”。如果明年在纽约(GMT-5 + DST)运行,则需要返回“ 2009

  • 我尝试了教程GPS和我得到以下错误信息。似乎有什么问题? 如何解决这些问题: 错误信息 1)

  • 问题内容: 有没有一种方法可以使GPS一次访问,而不必使用不断检查位置更新的弯针? 在我的场景中,我感兴趣的只是查找当前坐标,而不是与GPS卫星的连续连接。有谁知道如何做到这一点?提前致谢。 问题答案: 首先检查最近知道的位置是否是最近的。如果没有,我相信您必须设置onLocationChanged侦听器,但是一旦获得第一个有效位置,就可以随时停止更新流。 加成