中国地图坐标(GCJ-02)偏移算法破解小史

文章转载自http://blog.genglinxiao.com/中国地图坐标偏移算法破解小史/

2006年,Google开始与AutoNavi合作使用后者所提供的中国地图。这应该是外企首次接触到这个问题。

从2009年开始,中国地图的坐标偏移开始为外界所知。Garmin的用户发现在美国购买的GPS到了中国几乎无法使用,而在中国购买的Garmin产品则没有问题。Google Maps API的使用者发现兴趣点无法被准确标注在中国地图上。更有意思的是,有用户反复就此报告bug给Google,却从未得到任何回应。类似的,Garmin也声称自己没有解决方案,建议客户在需要的情况下在中国境内购买GPS设备。

于此同时,各路豪杰开始尝试破解这种偏移算法。其中有两条路径值得注意:

2010年1月,网友wuyongzheng发现:

I accidentally found the Chinese version of Google Map ditu.google.com to be able to correlate satellite image with map, and it gives the amount of deviation for any location in China. This URL queries the deviation of 34.29273N,108.94695E (Xi’an): http://ditu.google.com/maps/vp?spn=0.001,0.001&t=h&z=18&vp=$34.29273,108.94695 (seems it’ doesn’t work now)

有了足够的数据,wuyongzheng建议使用回归算法来逼近这个偏移算法:https://wuyongzheng.wordpress.com/2010/01/22/china-map-deviation-as-a-regression-problem/

在此之前的尝试都是零星的,针对个别城市的。wuongzheng的这个建议算是在全面系统地解决这个问题上迈出了第一步。

2013年5月,Maxime Guilbot根据这个建议得到4-5米精度的逼近:

https://github.com/maxime/ChinaMapDeviation

2013年10月,wuyongzheng自己进行了回归,得到如下结果:

http://wuyongzheng.github.io/china-map-deviation/paper.html

Maxime Guibot和wuyongzheng的回归结果基本代表了在黑暗中摸索的最佳结果,因此得到了广泛的注意和应用。

在另一条路径上,2010年4月,emq project增加了一个文件,Converter.java:

http://emq.googlecode.com/svn/emq/src/Algorithm/Coords/Converter.java

这段代码可以以很高的精度把WGS-84坐标转换到GCJ-02坐标。

2013年2月,这段代码被网友coolypf注意到,整理后用到了他自己的项目中:

https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936

其中的关键代码值得贴在这里:

        const double pi = 3.14159265358979324;

        //
        // Krasovsky 1940
        //
        // a = 6378245.0, 1/f = 298.3
        // b = a * (1 - f)
        // ee = (a^2 - b^2) / a^2;
        const double a = 6378245.0;
        const double ee = 0.00669342162296594323;

        //
        // World Geodetic System ==> Mars Geodetic System
        public static void transform(double wgLat, double wgLon, out double mgLat, out double mgLon)
        {
            if (outOfChina(wgLat, wgLon))
            {
                mgLat = wgLat;
                mgLon = wgLon;
                return;
            }
            double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
            double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);
            double radLat = wgLat / 180.0 * pi;
            double magic = Math.Sin(radLat);
            magic = 1 - ee * magic * magic;
            double sqrtMagic = Math.Sqrt(magic);
            dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
            dLon = (dLon * 180.0) / (a / sqrtMagic * Math.Cos(radLat) * pi);
            mgLat = wgLat + dLat;
            mgLon = wgLon + dLon;
        }

2013年3月,coolypf在自己的博客中介绍了这一段代码:

http://blog.csdn.net/coolypf/article/details/8686588

2014年9月,wuyongzheng注意到了coolypf的项目。至此,两条路径合流,坐标偏移问题基本得到了完美解决。

从上面的代码可以看出,相对于WGS-84,GCJ-02一方面采用了不同的参考椭球体(SK-42, Krasovsky。应该属于前苏联影响的遗留),另一方面引入了高频非线性偏移。

扩展阅读
现代版掩耳盗铃:GPS漂移
关于流传的 WGS-84 至 GCJ-02 转换算法

百度云与其相关证书

在不安装百度全家桶的前提下使用百度的云储存,我使用的是绿色版百度云5.5.2。
并且使用了liwei同学提供的流氓软件终结者来防范更多的国产垃圾软件。
使用流氓软件终结者后百度云会提示“应用程序被修改 请重新安装”,这是由于吊销了百度的一个证书所致。

查看证书 Win+R certmgr.msc
不信任的证书中有百度的三个证书,状态是已被颁发机构吊销。
因为是吊销所以这时候就无法使用证书管理器里重新信任证书,查看终结者的两个批处理与certregister文件夹得知是通过注册表来实现吊销证书的。
实测BaiduDown对应的证书与绿色版百度云相关,我们来查看下BaiduDown.reg的内容,他是增加了注册表键值HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates\Disallowed\Certificates\ACAED4BE8C729A6AE5F4F82F5F183A9C4EBE7AE3

那么把ACAED4BE8C729A6AE5F4F82F5F183A9C4EBE7AE3这个键删掉就恢复了该证书。
也可以在运行屏蔽批处理前将certregister\BaiduDown.reg删除掉来百度云留条活路。

于是又能用基本不限速的百度云了。

询问开发者得知,该证书屏蔽的是从百度源高速下载的捆绑有百度全家桶的软件,若未吊销该证书,下载软件请自行注意。

无论多么豆蔻的少女,依旧没办法像鲜花或者水果一样散发出香味

人体的味道无限放大,缩小单位,其实就是二氧化碳、尿素、无数有机酸、蛋白质和脂肪分解腐化的气息。

不管有多少欲望与遐想,少女激起人们的荷尔蒙,刚开始激荡的气息,本质就是更浓的汗味、皮脂味和尿味。

目的就是唤起异性的注意,为繁衍开始做准备。激素就是这么神奇,能精准地调配出无比复杂的春药。

这样描述虽然有点粗暴又原始,然而这完全不妨碍人们对它的全力赞美,动人的赞歌,永远是画面随着香味一起飘散:蜜桃成熟时,花蕾轻绽间

“沉睡时肌肤是茉莉花的颜色,被太阳晒过后,便成了蜂蜜的颜色”。

在Windows10环境中使用Imacon FlexTight Photo

Imacon FlexTight Photo是很老的扫描仪了
随便搜了下 能看到2001年讨论国外翻译来的测试帖 隐约得知2000年前的价格在一万美元
2000年的时候美元兑人民币可是在8.28的高位,那时候牛肉面才三块钱……

好的现在时间回到了美元兑人民币6.97而牛肉面12元一碗的2016年底
Windows系统也从98打折到了10
网上大部分人都认为Imacon FlexTight Photo扫描仪只能在Windows XP下驱动
哈?Windows可是兼容性最强的系统诶,曾经有人在虚拟机里测试过从3.1一路升级到Windows 10
先前在Windows 7的环境下成功驱动就证明还能再战十年
所以我们来看看怎么在Windows 10下驱动

好懒啊我不想说测试过程了
直接说结果

首先需要一块Adaptec SCSI Card 2915/2930LP 的SCSI卡
SCSI卡的驱动是
u160_w7_ws08r2_x64_drv_b7_5_645_100.exe
MD5:5f937d6a6cbb395efc4a4eff36316d92
SHA1:3f71d5aad8273990618676c7e42073995dff83cc
CRC32:ef1a945e
File Size:176,198

然后你会需要一个扫描驱动
hamric_sannner_1007_64_316.exe
MD5:31263e054b648e13917c1242557a87f9
SHA1:86f0533e53123dbd638024a09492aed1202d3988
CRC32:d8fb9573
File Size:717,656

最后你还需要一个扫描软件
fc403_eng.zip
MD5:91faf7949919865b307c39716cb7f6b1
SHA1:2ae54f7440640915c66cf5aaeb4c1e07dbd13563
CRC32:05f537b0
File Size:19,821,197

需要值得注意的是安装驱动请在设备管理器里指定到驱动解压文件夹自动识别安装,FlexColor需要在安全模式下用管理员权限安装。
然后就可以使用啦

没错 就这么简单(实际我折腾了115分钟)

别人说的用不了啊 要改配置文件啊 都是错的

半年前美元还不到6.5呢……唉

******2017年更新******

扫描驱动扫描驱动hamric_sannner_1007_64_316.exe其实是驱动之家打包的自解压文件,真实驱动是Hamrick Software提供的SCSI Scanner驱动。

FlexColor并不需要在安全模式下安装。

THE CHART OF COSMIC EXPLORATION

Probe the solar system from Mercury to Pluto with this stellar schematic of space exploration! From the Luna 2 in 1959 to the DSCOVR in 2015, this color-coded chart traces the trajectories of every orbiter, lander, rover, flyby, and impactor to ever slip the surly bonds of Earth’s orbit and successfully complete its mission—a truly astronomical array of over 100 exploratory instruments in all. Featuring hand-illustrated renderings of each spacecraft juxtaposed against the serried giants of our solar system, this galactic survey is a testament to man’s forays into the grand cosmic ballet.

THE CHART OF COSMIC EXPLORATION

Download

非对称俯仰

我们今天来讨论一下非对称俯仰(asymmetrical tlit)对焦。
使用大画幅相机的时候,可以借助沙姆定律(Scheimpflug principle)来获得全景深的画面。
沙姆定律的实现需要至少有一个基座根据景物的位置绕水平方向轴(俯仰)或垂直方向轴(摇摆)进行调整才能完成。需要注意的是相机前组的俯仰与摇摆不会改变被摄物投影的形状,只会改变清晰的平面;相机后组的俯仰与摇摆会同时改变被摄物的投影形状与清晰平面。
在实际操作中,优先考虑改变前组并优先考虑俯仰。选择画面中需要同时清晰的两点H与H1……先对焦到H将相机前组俯仰倾斜一个角度使H1清晰这时H将会模糊再微调对焦再微调俯仰倾斜角度再微调对焦再微调俯仰倾斜角度再微调对焦再微调俯仰倾斜角度……嗯,这时候在某一个俯仰角度和某一个对焦距离下,可以使得H与H1同时清晰。
挺麻烦的对不对?
仙娜的单轨相机利用了非对称俯仰方式对焦巧妙地解决了这个问题,让我们来看一下图。

Sinar P2

图中所示是仙娜的专业单轨相机 Sinar P2,它的俯仰机构在后组对焦屏下方,进行俯仰操作时后组沿着弧形滑轨以图中标注的黄点为轴心转动。俯仰轴处于焦平面上,整个俯仰过程中轴不动,对焦屏上旋转轴参考线所在位置会一直保持清晰。相当于保持H点不动去通过俯仰动作寻找H1点的清晰。当H1清晰时,相机后组会呈倾斜状态,这时被摄物的投影透视关系是被改变的。读出俯仰角度数值,将后组归零将前组调节至该数值,就变成了以前组完成俯仰动作,并且不改变透视,H点和H1点也都清晰啦!想想还是很神奇的呢。

在商业摄影中使用会极其方便,但是风光摄影中一般不会携带Sinar P2这种沉重的相机,现在我们来看一下以轻便为主打的沙慕尼相机(Chamonix)如何完成非对称俯仰。

Chamonix 45-F1

沙慕尼45-F1在后组设计了一个独立的弧形机构,可以让后组沿着弧形滑轨俯仰。弧形滑轨的旋转轴也是在焦平面上,俯仰时轴所在位置焦点不变。不过沙慕尼相机无法读取俯仰角度,也就无法将后组俯仰角度调至前组,将会不可避免的造成画面透视的改变。不过这个精巧的小机构可以非常快速的完成沙姆定律调焦,避免了繁琐的调整,为风光摄影时可能出现的抢光线赢取了时间。

延伸阅读:
相机操作动作解释:https://www.youtube.com/watch?v=0JU-eHpk97Y
非对称动作手册:http://www.ebonycamera.com/media/asymmetrical.movements.pdf
相机移轴技术图解:https://www.douban.com/group/topic/33430875/