最近做了公交查询的小程序,不同城市的朋友有反馈定位有偏移。研究了一下才发现,想定位准确,真不是件容易的事。
本来 GPS 就有精度问题,祖国要求初步加密,各家又二次加密;安全性没怎么提高,倒是给做产品的找了不少麻烦,哎。
1
feverzsj 2018-12-14 21:36:42 +08:00 1
用天地图,没有加密的
|
2
misaka19000 2018-12-14 21:38:45 +08:00 via Android
做一下经纬度修正不就行了
|
3
yingfengi 2018-12-14 22:34:02 +08:00 via Android
各家地图有纠偏参数吧。
|
4
zwh2698 2018-12-14 22:49:31 +08:00 via Android
来,我给你科普一下,你要去搜索一个叫火星坐标的。了解一下。 那种地图都有真实,GPS 的修正方法,我们首先假定你获取的 gps 是真实的,那么点在地图那个位置,这个不同的地图不同的修正方法,因为国家加了一次,厂商又加一次,例如百度。
|
5
zwh2698 2018-12-14 22:52:39 +08:00 via Android 1
修正国家的,有差值的,有模拟拟合公式的,因为地图是按照分区投影的,每个区是不同的随机偏移。反正不买地图的,都能弄出自己的方式。
|
6
580a388da131 2018-12-14 22:58:27 +08:00
我怎么感觉是你考虑的太多了?
|
7
opengps 2018-12-15 00:22:36 +08:00 via Android
用谷歌地图国内版都需要纠偏你知道不
|
8
weipt 2018-12-15 00:41:59 +08:00
你说的问题不确切。GPS 定位还是比较精确的(室外),但是要把他显示到地图上就有问题,不是不能获取准确的坐标,而是国际要求加密,故意做了偏移(前面有人说了,业内戏称为“火星坐标”),不是线性的,如果你用地图文件配上 gps 坐标是没问题的,但是如果要用目前市面的 web 地图,就需要用各个厂家自带的换算函数来算。
|
9
annoy1309 2018-12-15 01:03:24 +08:00 7
中国法规要求地图提供商使用一种称为 GCJ-02 的坐标系统。百度地图另外使用一种 BD-09 坐标系,似乎也是基于 GCJ-02。
GCJ-02 (官方称地形图非线性保密处理算法,俗称火星坐标系、国测局坐标)是一种基于 WGS-84 制定的大地测量系统 ,由中国国家测绘地理信息局制定,此坐标系所采用的混淆算法会在经纬度中加入看似随机的偏移,号称可以促进国家安全。 使用 GCJ-02 记录下的地点在 GCJ-02 的地图中会显示在正确的位置,然而换成 WGS-84 的地图或地点记录就可能造成 100 - 700 米不等的偏移。据测量,Google.com 的地图与真实坐标相差约 50 - 500 米 虽然 GCJ-02 坐标系统本身保密,但是目前已有 C#、C、Go、Java、等多种语言的开源转换实现。这些实现似乎都基于某份泄露出的 WGS 到 GCJ 加偏代码实现。根据泄露代码注释,GCJ-02 在加偏时使用的是 SK-42 参考系统的椭球体参数。这些参数用于计算一根经 /纬线上一度的弧长,由此将之前算出的偏移从米数转换为度数,与输入值相加。 BD-09 是百度地图使用的地理坐标系,其在 GCJ-02 上多增加了一次变换,号称“有助保护用户隐私”。百度提供从 WGS 和 GCJ 坐标系转换到 BD-09 坐标系的 API。和 GCJ-02 的情况类似,虽然没有反向转换的官方 API,但却存在 R 等多种语言写成的开源版本。 数学上,BD-09 变换将 GCJ 坐标当作直角坐标转成极坐标后加噪音,在变回直角坐标之后再加入一个度数恒定的偏移量。 由于 GCJ-02 大量使用正弦函数制造高频噪音,形成了一个超越方程,导致基本不可能获得解析解。不过由于 GCJ 加偏前后的坐标相差并不太大,且其单调性和局部线性特性也较好,大部分开源实现都通过类似这样的算法实现反向纠偏: |
10
also24 2018-12-15 01:17:51 +08:00 4
好奇楼上上来就说火星坐标的朋友,你们是否有仔细看楼主的帖
楼主明明是知道 “火星坐标” 这件事儿的,让楼主难受的是:每一次 “加解密”,都在丢失精度。 按道理来说,地图坐标虽然改来改去,但是大体上是三种: (引用自 https://tool.lu/coordinate/ ) WGS84 坐标系 地球坐标系,国际通用坐标系 GCJ02 坐标系 火星坐标系,WGS84 坐标系加密后的坐标系; Google 国内地图、高德、QQ 地图 使用 BD09 坐标系 百度坐标系,GCJ02 坐标系加密后的坐标系 但是你们注意楼主贴的图里,给出的居然是五套不同的坐标。 这里的 “谷歌地图” “腾讯高德” “图吧地图” 按道理来说,应该使用的都是 GCJ02 火星坐标才对,然而他们的火星居然还不是同一个火星。(根据谷歌地球坐标不一致可以推断此处谷歌地图为国内版) 这就给楼主带来了一些困扰,即使想尽办法,都使用火星坐标,也无法确保位置都精确性,给楼主做地图相关的产品带来了很大困扰。 BTW:楼主使用的查询页面是这个: http://www.gpsspg.com/maps.htm |
11
also24 2018-12-15 01:48:32 +08:00 6
忘了正题了,这里实际牵扯到的问题,印象中之前看到过文章是这样讲的(来源已经记不清了,不确保细节正确):
GCJ02 的加解密资质和相关设备,是需要相关资质、需要花钱买的,而且买回来就是个整体,对外黑箱状态,你输入进去参数,它输出结果给你,还限制频次和使用规模,完全就是一个贼难用的东西。 这么难用,实际中真正完全使用它的人就很少了,即使自身有资质的大厂,用着也觉得难受啊。 那大家都怎么用呢?用破解版呗~~ 没错,就是游戏玩家喜闻乐见的买了正版以后下盗版玩儿的状态~~ 于是各家就根据自己的手头数据,搞起了逼近算法,网络上也开始出现了各种公式和 API 服务,但是别忘了,这些都是 “盗版” 啊,都是 “逼近” 啊,也就是说,都不精确啊。 而如果你作为 APP,取到了地球坐标,那更闹心了,因为加密也是 “逼近” 公式啊,于是乎,一个坐标,从取出来,到被展示在地图上,经历了 N 次 “逼近”,总算是偏离了原始坐标了。 获取坐标 --(转成火星)--> 发给地图 SDK --(转回地球)--> 展示在地图 地球坐标 1 --(逼近算法 A)--> 火星坐标 2 --(逼近算法 B)--> 地球坐标 3 注意,A B 都是猜的逼近算法,并不配套,这样一来一回,坐标已经偏了不少了。 于是,一万种逼近算法,就产生了一万个火星,和一万种火星坐标~~ |
12
SNOOPY963 2018-12-15 03:15:34 +08:00
来啊,在杭州敢不敢约饭!
|
13
coolmenu 2018-12-15 08:12:42 +08:00 via Android
能不能搞个加权平均
|
14
hem 2018-12-15 08:50:53 +08:00
所以我一直有一个疑问,公交车提示“车辆转弯,请站稳扶好”是根据车辆位置发出来的提示还是根据司机操作发出来的提示? GPS 应该做不到这个精确程度吧
|
18
maemolee 2018-12-15 09:11:56 +08:00
定位之后找到离用户最近的几个公交站,弹窗让用户手动选一下(不仅显示该公交站是什么,还要显示该公交站的下一站,因为两个站名可以确定一个站)。
|
19
watzds 2018-12-15 09:17:11 +08:00 via Android
杭州实时公交,这个 App 不错啊
况且需要这么准吗? |
20
Eugene1024 2018-12-15 09:20:26 +08:00
有什么难,滴滴都可以实现,我们这个十八线小城市公交查询都实现了
|
21
quietjosen OP @580a388da131 @watzds 用户查看附近站点时,显示的是附近偏远的站点,这就是不得不考虑的了。
|
22
quietjosen OP @SNOOPY963 哈哈,刚离开,未来几个月都不在杭州;回去约吧。
|
23
quietjosen OP @hem 你幽默了,肯定是司机按按钮啊。也许有技术能实现,但肯定不止 gps,还有加速度计之类的。
|
24
quietjosen OP @maemolee 任何让用户多一步的操作,我都是深恶痛绝的。
|
26
tygm 2018-12-15 09:41:33 +08:00 via Android
@quietjosen 很多时候站在这样的角度做东西都难以得到客户的理解😓
|
27
quietjosen OP @tygm 庆幸我现在为「用户」服务,不是「客户」
|
29
jijifly 2018-12-15 11:43:20 +08:00
好奇如何解决定位漂移的问题,之前做项目也遇到过,一直没解决。如果楼主有方案,可否指导下~
|
30
quietjosen OP @jijifly 你看我像是已经找到方案的人吗?😂
|
32
isCyan 2018-12-15 12:43:24 +08:00
让用户多一步操作,甚至是多说一句话,也比对着犯傻的机器好
|
33
lynan 2018-12-15 15:54:10 +08:00
掌上公交不准吗,我觉得挺好用的呀
|
34
icaca 2018-12-15 16:15:15 +08:00
楼主才入行 大家不要怪他
|
35
wtdd 2018-12-15 16:46:17 +08:00
好奇国外怎么解决的,只有中国怕泄密么?
|
37
iAcn 2018-12-15 19:17:22 +08:00 via Android
请问楼主是如何拿到的公交 GPS 信息?我之前拿过济南公交的实时数据,被他们的外包公司警告了,他们好像挺在意这个的,提醒楼主小心。
|
38
quietjosen OP @iAcn 另个帖子里说了,这里不重复了,怕被警告 😂
|
40
Telegram 2018-12-15 22:22:38 +08:00 1
@hem #14 作为一个原来在公交公司负责采集站点 GPS 数据的人,我告诉你,因为线路是固定的,所以,车辆到了哪个点,接下来就要转弯了,都是事先把踩好坐标点的,都存在报站器的 GPS 坐标文件里。
当然,车上也有手动按钮,驾驶员可以自己按一下,比如提醒别人让座,提醒乘客保管好财务 |
42
quietjosen OP @Telegram 专业,涨姿势了。
|
44
iAcn 2018-12-16 15:33:10 +08:00 via Android
这样就不会有超速提示了
|