关于GPS坐标系和地图定位偏差_gcj20-程序员宅基地

技术标签: WEB  

关于GPS坐标系和地图定位偏差

关于目前(2019)电子设备和电子地图定位的探索,希望可以回答如下几个问题:

1. 获取GPS位置后,为什么在地图上定位不准?

答:中国地图采用的坐标系和GPS坐标不是同一个坐标系,所以采用GPS坐标在地图上定位不准。

2. 国外GPS位置和国内GPS位置有差别吗?

答:GPS是美国的导航系统,全球通用,手机内置的芯片都是GPS芯片,没有差别。不同的地方是地图有着不同的GPS坐标系。

3. WGS84,GCJ-02, BD09坐标系如何理解?

答:借用百度的说明如下:
WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
GCJ02:又称火星坐标系,是由中国国家测绘局制定的地理坐标系统,是由WGS84加密后得到的坐标系。
BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。
链接:http://lbsyun.baidu.com/index.php?title=coordinate

4. 软件开发如何应对?

坐标系是在一个系统中的参考坐标系,所以在同一个系统内不存在问题。例如,如果需要获取某一个地图上的位置,通过地图SDK就可以获得地图坐标系的位置,不存在问题。(例如,你一直都是用百度地图,定位也是通过地图定位,那么没有任何问题)如果希望在不同的坐标系上使用,必须经过转换。最好的办法是,统一采用同一个地图,不切换坐标系。例如做国内系统,用百度地图,高德地图都可以。如果做国际项目,那么最好建议采用Google地图,国外地图数据最完整,其次是百度。
Google国内外访问地址,key需要在google账号中申请(目前需要梯子)
国内:https://ditu.google.cn/maps/api/js?key=
国外:https://maps.google.com/maps/api/js?key=
关于坐标系转换,参考百度文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/coordtrans


以下是相关论证过程和分析

缘起,首先来看一个问题,一个朋友在柬埔寨通过GPS软件获得一个GPS位置,发现和实际位置不准的问题,赶快查询了一下,“果然不准确”。
网上各种方法,代码,工具,理论等等……看来这个问题还很普遍嘛,可是随着我的深入查找资料和验证,发现不对!下面我们听我慢慢细说。

  1. 地图和GPS定位坐标系
    先说定位坐标系,目前国际上通用的坐标系是WGS84,参考:https://en.wikipedia.org/wiki/World_Geodetic_System,也是通过GPS获取的经纬度信息是一致的,只是表示方法的存在区别:度分秒表示,还是十进制数表示。所以通过手机获取的地理位置信息,都是GPS位置信息。目前北斗卫星定位在大众手机没有用上,就算用上,估计也是不同的坐标系。
    再来看看电子地图,为什么会存在火星坐标系呢?经过查找资料,没有找到明确的关于GCJ-02国家发布的资料,只找到我国测绘法:
    国家测绘局2002年发布的《中华人民共和国测绘法》,要求使用统一的国家测绘坐标系,参看链接:http://www.gov.cn/ziliao/flfg/2005-08/05/content_20947.htm
    GCJ-02标准最可靠的参考
    上文表达的意思是,国内采用统一的坐标系统,而且和国际坐标系统不一致。而GCJ-02标准和这一致。

关于坐标系查询,可以通过http://www.gpsspg.com/maps.htm网站查询。同时我可以发现这个网站可以通过国界线区分坐标系的换算,而网上不少代码均是通过经纬度范围简单的判断是否在中国境内,对于中国周边国家会存在问题,估计有问题。不过该网站的谷歌地图坐标有问题,估计是老版本的地图,而且也打不开google地图。
中国边境地图坐标
上图为中国云南边境
中国缅甸边境坐标
上图为中国与缅甸交界的地方。

Google地图(国际版)GPS坐标定位工具:
https://www.gps-coordinates.net
Google地图坐标定位工具
该工具可以在google地图(国际版本)上根据GPS定位,而且下发写着坐标系是WGS48。经过实际对比发现Google地图,对于中国境内采用的依然是GCJ-20坐标系。
为了验证Google地图在国内的位置依然是GCJ-20坐标系,我采用下面的方法得出的结论(有兴趣的朋友继续阅读)。


如何判断GPS坐标是WGS-48,还是GCJ-20坐标体系呢?
我发现,通过iPhone的指南针的经纬度,如果直接换算为Google地图的坐标进行设置时发现,和实际位置不相符(国内),通过Android 三款软件进行数据采集发现有相同位置不同软件具有两种经纬度信息:
GPS定位导航采用的GCJ-02坐标
GPS定位工具箱采用的也是GCJ-02坐标
GPS实时海拔采用的是WGS-84,和iPhone指南针相同的数据。
注意:表面上看,并不能确认软件采用的具体坐标系(无法通过数值区分),而是通过比较得出的结论。
我写作位置的GPS位置数据分别如下:

序号 采集设备/程序 纬度 经度 纬度 经度
1 iPhone/指南针 北纬28°15’18’’ 东经113°4’27’’ 28.255 113.0741666667
2 iPhone/GPS讯号 28.255055 113.074167
3 坚果手机/GPS实时海拔 北纬28°15’18’’ 东经113°4’26’’ 28.255 113.0738888889
4 坚果手机/GPS定位导航 28.251874 113.079874
5 坚果手机/GPS定位工具箱 28.251877 113.079878

如果把上述地址在https://www.gps-coordinates.net网页上输入,发现可以准确定位的是上表的4,5!是不是1,2,3。上面工具的网站声称采用WGS-48坐标系,而且Google Map英文文档也是采用WGS-48坐标系,那么是否可以推论4, 5就是WGS-48坐标系呢?
经过我的论证,他们恰恰不是WGS-48,而是GCJ-02!

为了论证这个设备的数值到底是哪种坐标系,煞费苦心。
后来发现百度地图的文档上说明,百度采用BD09LL坐标系,而且具有WGS-48,GCJ-02坐标转换接口,所以我对上述采集的数据通过以上两个转换方法对位置进行转换,得到百度的坐标系,然后在百度的坐标定位工具(http://api.map.baidu.com/lbsapi/getpoint/index.html)中定位,确认实际是否位置一致。
经过测试发现如下结论:

序号 经度 纬度 WGS48->BD09经度 WGS48->BD09纬度 GCJ02->BD09经度 GCJ02->BD09纬度 位置一致坐标类型
1 28.255 113.0741666667 113.08658610 28.25765828 113.08069003 28.26092783 WGS48
2 28.255055 113.074167 113.08658632 28.25771306 113.08069031 28.26098281 WGS48
3 28.255 113.0738888889 113.08630670 28.25766231 113.08041105 28.26093265 WGS48
4 28.251874 113.079874 113.09232310 28.25445936 113.08642390 28.25770832 GCJ02
5 28.251877 113.079878 113.09232718 28.25446229 113.08642791 28.257711260 GCJ02
  1. iPhone指南针软件,得到的都是WGS48坐标数据
  2. Android软件获得坐标就存在两种类型坐标系
    如果要想获得国内坐标系是否是WGS48,还是GCJ02,通过如下方法即可:
  3. 获得经纬度(用任何可用的工具)
  4. 如果需要换算,可以利用工具(http://www.gzhatu.com/du2dfm.html)
  5. 通过百度API转换,也可以通过工具查看(http://www.gpsspg.com/maps.htm)
curl "http://api.map.baidu.com/geoconv/v1/?coords=113.0741666667,28.255&from=1&to=5&ak=hfyzyfi3dAG8dRE3GBTmiqrvpt6ZEr5j"
curl "http://api.map.baidu.com/geoconv/v1/?coords=113.0741666667,28.255&from=3&to=5&ak=hfyzyfi3dAG8dRE3GBTmiqrvpt6ZEr5j"

注意:http://www.gpsspg.com/maps.htm网站的Google地图已经失效(2019.7)。

关于坐标系的图示理解:
坐标系的理解
上图解释了,通过相同坐标系就不会有问题。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yin138/article/details/96750897

智能推荐

元素选择器之排除特定元素_input排他选择器-程序员宅基地

文章浏览阅读2.1k次。 需求如下:该搜索框是对整个页面的input检索 ,但与弹出层中的input冲突 博主几经辗转 简单处理 解决问题,思路如下:排除掉特定class的input。代码如下:$('input:not(.pop)', this.footer()).on('keyup change', function () { if (that.search() !== th..._input排他选择器

使用JAXB进行XML与JavaBean的转换(支持泛型)_jaxb 泛型-程序员宅基地

文章浏览阅读5.6k次,点赞6次,收藏20次。看到别人有个1024的勋章,特意留了一篇在今年的10.24日,看看会不会获得。在日常开发中可能涉及接口之间的相互调用,虽然在现在微服务的理念推广下,很多公司都采用轻量级的JSON格式做为序列化的格式,但是不乏有些公司还是有一些XML格式的报文,最近就在对接某个合作方的时候遇到了XML报文。在JSON报文爽快的转换下很难试用一个一个的拿报文参数,还是希望能直接将报文转换成Bean。接下来就了解到..._jaxb 泛型

python numpy学习笔记_ndarray的位置-程序员宅基地

文章浏览阅读1.2k次。numpy的主要数据对象是多维数组,其中包含相同类型的元素,通常是数字类型,每个元素都有一个索引。使用numpy前通常要导入包。import numpy as np目录类型维度创建运算索引和切片类型numpy的数组被称为ndarray。numpy.array只处理一维数组,而ndarray对象才提供更多功能。a = np.array([[1, 2, 3], [4, 5, 6]])type(a) # <class 'numpy.ndarray'>dtype属性可以获得元素的数_ndarray的位置

我的世界java版gamemode指令_《我的世界》Java版常用指令代码大全!你想要的都在这里了!...-程序员宅基地

文章浏览阅读1.6w次。还在苦于网上找到的一些指令已经不适用了吗?还在苦于有些地方的指令有误吗?还在苦于有些地方整理的指令不够全面吗?那么你来对地方了!小编为大家整理了《我的世界》原版游戏常用的指令,这些基本足以满足各位的基本需求了!大家来一起看看吧!注:表示的是必须输入的部分,[方括号]表示的是可选择性输入的部分基本命令列表命令描述/?/help的替代命令,提供命令使用帮助。/ban + 玩家名字将玩家加入封禁列表。/..._gamemode指令java

Spring Boot 结合shiro做第三方登录验证_shiro 第三方token登录-程序员宅基地

文章浏览阅读1.5w次,点赞3次,收藏3次。Spring Boot 结合shiro做第三方登录验证1、首先,说一下我的具体实现思路。在做spring boot拦截器的过程中,开始我准备用spring security来实现,但是研究了一段时间之后发现spring security的集成度太高,需要修改的东西比较多,而且对它本身的使用方法不是很了解,后来转而使用Apache shiro。由于是第三方登录,是不需要我来验证密码的。最开始,我陷入了_shiro 第三方token登录

labelme UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf in position 227: illegal mult_file "c:\rgzn\labelme-main\setup.py", line 91, in -程序员宅基地

文章浏览阅读1.9k次,点赞4次,收藏4次。[INFO ] __init__:get_config:71 - Loading config file from:C:\Users\xxx\.labelmercTraceback (most recent call last): File .... line 191, in <module> main() File ...., line 145, in main config = get_config(config_file_or_yaml, config_fro_file "c:\rgzn\labelme-main\setup.py", line 91, in main if sys.argv[1] == "re

随便推点

代码报错原因和处理方法-程序员宅基地

文章浏览阅读8.7k次。代码错误的原因和调试方法_代码报错

深度解析Java游戏服务器开发-程序员宅基地

文章浏览阅读5.2k次,点赞9次,收藏40次。---恢复内容开始---1.认识游戏  1.1什么是游戏    1.1.1游戏的定义              任何人类正常生理需求之外的活动均可称为游戏    1.1.2游戏的分类      RPG角色扮演游戏、ACT动作游戏、AVG冒险游戏、FPS第一人称视角射击游戏、TPS第三人称视角射击游戏、FTG格斗游戏、SPT体育游戏、RAC竞速游戏、RTS即时战略游戏、STG..._深度解析java游戏服务器开发

【ThinkPHP5初体验(二)1】CSRF防范原理(thinkphp5 CSRF ajax令牌)_tp5 开启csrf令牌-程序员宅基地

文章浏览阅读4k次。CSRF是什么我就不解释了,百度一搜全是,比波姐的片源还要多,千篇一律都他么是复制粘贴。那为什么这个令牌(token)操作可以防范CSRF呢?下面我就随便说说说错了大家不要介意。首先我们要知道令牌是存储在session里面的,这个很重要 php代码如下&lt;?php namespace app\index\controller; //我直接允许跨域,因为伪装..._tp5 开启csrf令牌

市盈率、市净率、净资产收益率股息率介绍-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏6次。市盈率PE市盈率 = 市值/净利润概念解析:买入一家公司,几年回本,年化收益率:净利润/市值(市盈率的倒数)举例:砖头10万买个砖头,每年拍人带来1万利润,需要10年回本市盈率:10/1 = 10年化收益率:1/10 = 10%市净率PB市净率 = 市值/净资产净资产 = 总资产 - 负债举例:张三便利店,净资产:120万市值:1..._净资产收益率和股息率

墨器杯垫 文创商品设计特优_杯垫文创设计说明-程序员宅基地

文章浏览阅读737次。教育部昨举行「102年国立馆所文创商品设计比赛」颁奖典礼,台北科技大学创新设计研究所硕士生谢镇宇,为TW艺术教育馆设计「墨器」杯垫,取「默契」谐音,用5片压克力板,展现水墨画层层渲染效果,增加立体视觉感受,并在杯架后方加入LED光源,获评审肯定夺特优奖和奖金10万元。台南应用科技大学商品设计系学生高郁翔,为国立自然科学博物馆设计「恐龙化石钉书机」,他认为小朋友把钉书机钉下去的那一刻,会觉得像暴龙準_杯垫文创设计说明

C#中关于XML与对象,集合的相互转换-程序员宅基地

文章浏览阅读404次。XML与对象,集合的相互转化  今天小伙伴在群里问了一下关于XML与对象之间的相互转换,作为菜鸟的我正好趁着闲着的时间学习了一波,直接上代码了,有疑问或者有错误的地方还请大家指正,谢谢。。。。 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System...._c# xml转集合