关于修正从 Core Location 获得的坐标的偏移量

2011-04-17 22:27:22 +08:00
Livid  Livid
因为众所周知的原因,从 Core Location 获得的当前位置的坐标实际上偏移的,在把这样的坐标保存到数据库之前,必须进行偏移修正。

貌似偏移量是一个常量,这里有人试着测量过么?
25214 次点击
所在节点   iDev  iDev
65 条回复
lianghai
lianghai
2011-04-18 01:36:30 +08:00
这么说,行货和水货 GPS 得到的位置坐标是不一样的啊……
zhuang
zhuang
2011-04-18 04:01:39 +08:00
iphone 销往中国的版本和全世界其他地区的版本有个很大的不同,中国版的在显示国外地区的时候也只有中文数据。所以我理解问题出在地图程序上。
地图偏移算法是非线性的,不知道算法的情况下没有太好的解决办法。
gps 接收回来的数据可以认为是准确的,记作A,要在内置地图程序上显示,要么通过偏移算法得到偏移坐标B,要么显示的时候地图针对A 所在区域进行逆偏移操作。
考虑到实现的简洁,还有地图更新的需要,加上国行iphone 的特殊性,很可能是生成了数据B,这样视觉上错误坐标和错误地图也能正确对应。
至于CoreLocation 部分返回的数据,国外的机器一定是A,但国内的就不好说是A还是B了。
nickcheng
nickcheng
2011-04-18 10:24:22 +08:00
之前看到过有完美解决方法, 似乎是google提供了偏移查询借口, 不过现在文章已经被屏蔽了.

可以在google里搜索一下如下link, 然后翻墙看cache
http://blog.csdn.net/dongmeng110
dismory
dismory
2011-04-18 10:34:40 +08:00
Cydia 里有个国人开发的地图偏移修正补丁。

我是国行 iPhone4,在 4.1 时北京的地图不需修正,武汉青岛需要修正,能够达到蓝色点位置准确,且卫星和普通地图重合。

升级 4.3.1 后,我在北京青岛不需要修正了,武汉还没回过,不清楚。
virushuo
virushuo
2011-04-18 10:39:26 +08:00
其实这算法基本被人们反向出来了,不过你要公布出来大概就要被跨省了。
9hills
9hills
2011-04-18 12:17:11 +08:00
如@virushuo所说,该算法大家可以去搜一搜,比较简单的,但肯定不是线性偏移。。

但注意不要发布出来,因为这个算法是国家机密,泄漏国家机密违法阿

(其实你在程序里用了该算法就已经涉嫌泄密了。。不过貌似没人查,但到你什么时候被人找罪名的时候,这个理由比起神马“经济问题”要好用多了。。)
leben
leben
2011-04-18 13:28:26 +08:00
这个偏移好像不全是iphone的api问题,google map也有可能存在问题。在google map中定位正确并不代表在google map api中也能定位正确。我感觉Google map在国内好像经过修改。同样iphone的gps可能也经过了修改,两者作用,很难找出来一个切实有效的办法进行修正。

目前网上是修正应用应该是是通过一个比较大的样本分析出来的偏移算法,但是具体到某一个地点的时候很可能发生错误。我们进行过一些测试,使用偏移算法之后,在一公里范围内,也不时的会发生偏移的问题,不是每次都起作用。

我们后来实在没办法取消了gps定位功能,类4sq的服务对gps的要求并不是很高,只要能在地图上标记地点就ok了。如果是像layer这种ar应用在国内会很悲剧~~~
Kenyth
Kenyth
2011-04-18 13:30:08 +08:00
最近也碰到类似的问题。

真不明白,这样保护国家机密除了让民间应用不方便还有什么用处,而且是只让中国人不知道国家机密,中国以外可以知道。中国很多“机密”都是这样被保护的。
9hills
9hills
2011-04-18 13:52:20 +08:00
@leben 偏移要地图和gps厂商都要做
火星地图+火星GPS结合后应该就没有问题了。。

以google地图为例
ditu.google.com的地形图和卫星图均作了GPS偏移,配合偏移后的GPS信息,可以正常使用
maps.google.com的地形图作了GPS偏移,但卫星图没有做。

以前做过一个GPS追踪器,因为直接接收的卫星信号,所以是真实的GPS坐标,不管是和谷歌地图也好,还是百度地图也好,都偏200m以上。。无解啊无解,后来只能用Google maps的卫星图凑合了,
raptium
raptium
2011-04-18 13:54:06 +08:00
如果仅仅是地图程序做了修正 但是 CoreLocation API 返回的没有修正的话
那么 safari 里面的 maps.google.com 就应该定位不准确了吧?
可以试验验证一下 当然也有可能国行版的 Safari 也加了修正
===========
另外提供多一点试验结果 也许有助于推理
我用的是 国行 3GS 在香港定位
不管是 内置的 Maps.app 还是 在 Safari 中打开 maps.google.com
蓝点定位都很准确 误差在30米之内 且卫星图和普通地图重合
Maps.app 的地图是简体中文 即使我把手机的语言设置成了英文
maps.google.com 的地图是繁体中文 按说这个没有可能是修改版本了吧
9hills
9hills
2011-04-18 14:03:02 +08:00
@raptium 香港不适用于偏移。。

所有机构发行的香港地图和所有GPS设备,在香港地区都是不会加人为偏移的
想偏还没法偏呢。

另外GPS精度确实就是在20m左右--
raptium
raptium
2011-04-18 14:09:43 +08:00
@9hills
问题是我用的国行 iPhone 如果是国行的机器做了手脚 那应该在国内定位准在国外定位不准才对
难道还有算法检测在不在境内的?
换句话说 是不是水货 iPhone 的 Maps.app 在国内定位会偏移呢?
Livid
2011-04-18 15:20:23 +08:00
@raptium Maps 在国内使用起来没有任何问题(起码在上海是这样),问题在于 CoreLocation 返回的坐标。
9hills
2011-04-18 16:36:21 +08:00
@raptium 那个地图偏移算法只对大陆地区有效的,国行的机器在国外定位很准

再说一次,这个偏移并不是那种所有的点统一偏移的,而是只针对大陆境内的随机偏移
aligo
2011-04-18 17:06:04 +08:00
是地图有偏移,Core Location获取的坐标才是正确的

ditu.google.cn提供了一个api用来转换这个,但是由于众所周知的原因受到限制,这里贴一个百度的地址: http://hi.baidu.com/ray_li/blog/item/3fa0850542709ac67a894747.html ,api地址:
http://ditu.google.cn/maps/vp?spn=0.0,0.0&z=18&vp=39.111195,117.148067

现在我有一个15万行左右的,储存火星坐标匹配地球坐标数据库,大小是7.1MB,一般用它直接取中点的方法得出一个大概坐标,这是目前比较靠谱的解决方法了

具体火星坐标的真正算法不明,花时间用matlab暴力破解也只是大概能用,同过调试方法破解这个东西的机会也不大,国内那些导航软件没有一个提供具体坐标输入或者显示的,而google能做的最过分的就是提供上面那个api了

当然破解它的可能性还是有的,关键是会不会被抓起来神马的。。。
aligo
2011-04-18 17:17:05 +08:00
我知道的,例如这个玩意,就是用了数据库大法转换火星坐标的

http://itunes.apple.com/cn/app/global-navigator/id402174308
Livid
2011-04-18 17:21:55 +08:00
@aligo 我刚才试验了一下,用 CoreLocation 获得的坐标,输入进 Google Earth,确实是准的。

但是这些坐标如果和 MKMapView 配合,显示给最终用户的话,作为视觉上的结果,就是偏移的。。。所以,确实是地图有偏移。

这个问题需要做一个取舍。。。我得好好想想。。。
aligo
2011-04-18 17:26:33 +08:00
@Livid 如果是一次性求坐标而且有网络环境就用ditu.google.cn的那个api吧

如果客户端频繁离线使用只能用数据库大法,压缩一下还是控制住大小,但是对移动设备检索可能会有一点压力
Livid
2011-04-18 17:30:14 +08:00
@aligo 所以,目前阶段性的一个总结:

CoreLocation -> 准确
Google Earth -> 准确
MKMapView -> 偏移

Possible Solution:

* 数据库中存储原始的坐标值
* 在所有的 API 里也使用原始的坐标值
* 当需要在 MKMapView 或是 Google Static Maps 里显示时,进行纠偏

是这样么?
aligo
2011-04-18 17:46:01 +08:00
@Lividhttp://ditu.google.cn/http://maps.google.com/ 分别输入39.907001,116.391001,绿色箭头,后者准确的落在天安门上,前者偏移到了北京一六一中学对面(偏移到平民目标真是恶趣味啊)

而39.907001,116.391001才是真正的GPS测得的坐标,可见 http://ditu.google.cn/ 的地图使用的就是加密的火星坐标系统

然后还有一个判断基站提供的AGPS数据的问题,是否也是国内的火星坐标系统,如果是的话,那么也许可以绑架一台基站对其进行反向工程XD

还有一种情况,可能国内最新使用的民用GPS导航设备的硬件芯片都被要求进行火星坐标加密,只能输出火星坐标(可能性不大)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/11666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX