Mapbar经纬坐标偏移的加/解密算法

具本人研究所知,Mapbar地图的成图算法并不难懂,并且它的地图成图算法没有进行加密(效果就是整个地图有一定的偏移,实际上它的成图是准确的),由此可想而知,它的坐标必定也未加密!

那么为什么我用真实的经纬坐标在Mapbar上标注的时候,会有明显的偏移呢?

在我们应用Mapbar开发一些应用的时候,我们所看到的或者是获取到的经纬度坐标其实都不是真正的地理坐标,而是经过Mapbar加密以后的坐标,所以对于外来的坐标Mapbar并不感冒。

在Mapbar的Api中,它会对传入的坐标进行一次解密(会获得真实的经纬度坐标),然后在Api的核心成图函数里就使用这个真实的坐标绘制用户可见的地图,而我们通过API获取的Mapbar坐标都是加密以后的坐标。

综上,如果你传给了Mapbar一个真实的坐标,因为它会对所有传入的坐标进行一次解密,因为我们传的本来就是真实的坐标,被它这么一解密反而就不真实了,于是这个不真实的坐标在后面成图中以及标注点上就有了偏移。

废话太多了,直接看代码吧!

经纬度加密算法如下:(PHP版)

/**
 * 将真实地理坐标加密为Mapbar经纬度坐标
 *
 * @param $x 经度值
 * @param $y 维度值
 * @returns array
 */
function coordOffsetEncrypt($x,$y){
	$x = floatval($x)*100000%36000000;
	$y = floatval($y)*100000%36000000;

	$_X = intval(((cos($y/100000))*($x/18000))+((sin($x/100000))*($y/9000))+$x);
	$_Y = intval(((sin($y/100000))*($x/18000))+((cos($x/100000))*($y/9000))+$y);

	return array($_X/100000.0,$_Y/100000.0);
}

经纬坐标加密算法(Javascript版)

/**
 * 将真实地理坐标加密为Mapbar经纬度坐标
 *
 * @param x 经度值
 * @param y 维度值
 * @returns [x,y]
 */
function coordOffsetEncrypt(x,y){
	x = parseFloat(x)*100000%36000000;
	y = parseFloat(y)*100000%36000000;

	_X = intval(((Math.cos(y/100000))*(x/18000))+((Math.sin(x/100000))*(y/9000))+x);
	_Y = intval(((Math.sin(y/100000))*(x/18000))+((Math.cos(x/100000))*(y/9000))+y);

	return [_X/100000.0,_Y/100000.0];
}

经纬度坐标解密算法(PHP版)

/**
 * 将Mapbar经纬坐标解密为真实地理坐标
 *
 * @param $x 经度值
 * @param $y 维度值
 * @returns array
 */
function croodOffsetDecrypt($x,$y){
	$x = floatval($x)*100000%36000000;
	$y = floatval($y)*100000%36000000;

	$x1 = intval(-(((cos($y/100000))*($x/18000))+((sin($x/100000))*($y/9000)))+$x);
	$y1 = intval(-(((sin($y/100000))*($x/18000))+((cos($x/100000))*($y/9000)))+$y);

	$x2 = intval(-(((cos($y1/100000))*($x1/18000))+((sin($x1/100000))*($y1/9000)))+$x+(($x>0)?1:-1));
	$y2 = intval(-(((sin($y1/100000))*($x1/18000))+((cos($x1/100000))*($y1/9000)))+$y+(($y>0)?1:-1));

	return array($x2/100000.0,$y2/100000.0);
}


经纬度坐标解密算法(Javascript版)

/**
 * 将Mapbar经纬坐标解密为真实地理坐标
 *
 * @param x 经度值
 * @param y 维度值
 * @returns [x,y]
 */
function croodOffsetDecrypt(x,y){
	x = parseFloat(x)*100000%36000000;
	y = parseFloat(y)*100000%36000000;

	x1 = parseInt(-(((Math.cos(y/100000))*(x/18000))+((Math.sin(x/100000))*(y/9000)))+x);
	y1 = parseInt(-(((Math.sin(y/100000))*(x/18000))+((Math.cos(x/100000))*(y/9000)))+y);

	x2 = parseInt(-(((Math.cos(y1/100000))*(x1/18000))+((Math.sin(x1/100000))*(y1/9000)))+x+((x>0)?1:-1));
	y2 = parseInt(-(((Math.sin(y1/100000))*(x1/18000))+((Math.cos(x1/100000))*(y1/9000)))+y+((y>0)?1:-1));

	return [x2/100000.0,y2/100000.0];
}

一个Demo:http://demo.crossyou.cn/mapbar/coord/convert.php
OK! 大家如有疑问欢迎一起交流,如有错误欢迎指正。

注请勿灌水,评论只有审核通过后,才会可见,谢谢!

这篇文章目前有114条评论

  1. yhostc 2011-03-25 10:19

    老兄,你的能力很好! (胜利)

    沙发王 !
  2. YTERE 2011-03-28 00:43

    老兄,你的能力很好!

    板凳党 !
  3. GIS 2011-03-28 15:43

    老兄,你的能力很好!

    地板砖 !
    • admin 2011-03-28 20:50

      大哥不要灌水,灌水是看不到答案滴。

    • 张虎 2011-05-09 17:16

      想看看解密的方法

  4. Grass 2011-03-30 17:02

    老兄,你的能力很好!

    4 #
  5. 刘燕 2011-03-31 17:23

    楼主很了解地图的知识啊 赞!

    5 #
  6. leavingme 2011-03-31 19:52

    哈哈,解密还要评论哇~

    6 #
    • admin 2011-04-02 07:40

      想看看有多少人想知道答案。

  7. cv 2011-04-11 11:03

    hi kankan

    7 #
  8. rocky 2011-04-13 14:36

    研究下

    8 #
  9. william 2011-04-13 16:58

    我按照demo的地址连接测试一下,发现跟google地图定位仍然有偏差,不知是不是我的js解密有错误(网上的js解密方法)

    9 #
    • admin 2011-04-13 19:52

      我的这个不是mapbar的吗,又不是谷歌的。

      • william 2011-04-14 10:07

        我的意思是:将Mapbar经纬度坐标转换为真实地理经纬度坐标后,将真实的地理经纬度换成google的地图发现有偏差。google不是真实的地理经纬度坐标吗?

        • crossyou 2011-04-14 10:12

          谷歌的应该不是真实的吧,据说以前是,来到中国就不是了,你懂的。

        • crossyou 2011-04-14 10:13

          你得需要知道谷歌地图的加解密算法

  10. 走走 2011-04-14 12:58

    想看看解密的方法

    10 #
  11. zhangwenjin 2011-04-15 00:07

    11 #
  12. am1102 2011-04-28 13:44

    看看解密算法

    12 #
  13. alafeizai 2011-05-05 19:19

    很感兴趣哈,看下。

    13 #
  14. lek 2011-05-07 10:23

    现在都是加密后的地址,很郁闷呀,完全搞不清楚哪个是真那个是假了

    14 #
  15. tt 2011-05-13 08:53

    看一下

    15 #
  16. zlli 2011-05-19 15:47

    很强啊,学习一下

    16 #
  17. 阿吧头 2011-05-25 14:47

    啊啊啊啊,我费了好打功夫才把百度坐标转地理坐标,最后才看到这里,学习了,谢谢楼主!

    17 #
  18. 阿巴头 2011-05-25 15:02

    老兄,我刚还兴奋呢,试验了一下,好像不对,难道百度和MAPBAR的偏移不一样吗?

    18 #
    • admin 2011-05-25 16:05

      当然不一样!

  19. 阿巴头 2011-05-25 15:03

    我的邮箱abatou@qq.com ,有机会交流一下。

    19 #
  20. 刘小小 2011-05-25 23:26

    每家的偏移算法都不一样,目前google换了算法后更难获取了

    20 #
  21. 舒服 2011-05-25 23:26

    (酷) 想高手学习,想高手致敬

    21 #
  22. 安装在 2011-05-26 16:37

    看看

    22 #
  23. zhf7878 2011-05-29 12:39

    看看

    23 #
  24. zhf877 2011-06-06 08:57

    reply done

    24 #
  25. zr03 2011-06-09 09:32

    看看

    25 #
  26. 杨武 2011-06-14 10:29

    真是个好东西啊,得好好学习一下。

    26 #
  27. 呵呵 2011-06-15 01:05

    (困) (困) (困)

    27 #
  28. waitingline 2011-06-21 12:51

    老兄,你的能力很好!

    28 #
  29. 颜六新 2011-06-22 14:24

    (谄笑) 感谢

    29 #
  30. 阿斯顿 2011-06-22 19:33

    (猪头) (生病) (难过)

    30 #
  31. MAYAMOON 2011-06-27 14:54

    (风筝) (风筝) (风筝) 飞啊飞啊飞。

    31 #
  32. 颜六新 2011-06-30 16:19

    (惊恐) 不准确的,gps采集坐标30.2820 120.113161,算法算到的坐标 120.10808 ,30.28553 杭州文二路上的跑到文一路上去了

    32 #
    • crossyou 2011-06-30 16:23

      大哥 30.2820 120.113161 => 120.10808 ,30.28553

      经纬坐标要对应好啊!

      • 颜六新 2011-07-01 09:07

        (鸭梨) 对应好了的。。。

  33. huang 2011-06-30 16:47

    不错哈达的

    33 #
  34. someeyes 2011-07-03 16:47

    这也需要评论。。。。

    34 #
  35. 2011-07-03 19:13

    35 #
  36. lizhijian 2011-07-05 10:34

    (给力) 想看看经纬度坐标解密算法

    37 #
  37. kzzzzk 2011-07-12 17:35

    想看看经纬度坐标解密算法

    38 #
  38. aaa2011 2011-07-18 17:03

    经过辛苦工作,终于开发出精确到0.001的算法,
    具体效果可以到这里看看:
    http://www.lbsbase.com

    39 #
    • admin 2011-07-19 11:22

      试了一下,比较准确,加你QQ了。

  39. jun9 2011-07-21 20:02

    kankan

    40 #
  40. 经过辛苦工作,终于开发出精确到0.001的算法, 具体效果可以到这里看看: http://www.lbsbase.com 2011-07-28 16:46

    经过辛苦工作,终于开发出精确到0.001的算法,
    具体效果可以到这里看看:
    http://www.lbsbase.com

    41 #
  41. josephmao 2011-07-31 13:36

    感谢分享!关于坐标解密加密和解密算法,百度和mapbar采用的是同一种吗?

    43 #
    • admin 2011-08-01 15:42

      肯定不是!

  42. filmlover 2011-08-01 10:59

    不错

    44 #
  43. aaaa 2011-08-03 11:52

    看看

    45 #
  44. skin8 2011-08-09 20:38

    老兄有没有Google和51ditu的转换算法啊?

    46 #
    • admin 2011-08-10 20:54

      木有…

  45. 高山 2011-08-10 20:23

    顶你小伙

    47 #
  46. 阿斯兰 2011-08-15 17:58

    (谄笑)

    48 #
  47. pmlong 2011-08-26 14:36

    试试看准不准

    49 #
  48. 废客泉 2011-08-29 17:38

    没办法解决的。。。。。。。。。

    50 #
  49. ttuu 2011-08-31 12:49

    (大笑) 看看给能解决问题

    51 #
  50. 哈哈哈哈 2011-09-02 10:13

    (给力) (给力)

    52 #
  51. zhaoxinyuan 2011-09-06 18:17

    (难过)

    53 #
  52. XIINYUANGAO 2011-09-11 12:03

    很有用的资料

    54 #
  53. 乐从 2011-09-13 08:22

    支持啊 看看能不能解决问题

    55 #
  54. mapig 2011-09-17 17:44

    参考一下 (大笑)

    56 #
    • admin 2011-09-17 22:28

      欢迎欢迎~~

  55. 文刚 2011-09-22 12:05

    学习一下

    57 #
  56. 还天 2011-09-28 14:27

    zhichi

    58 #
  57. lixun 2011-09-29 10:08

    (握手)实用,等待验证

    59 #
  58. jckie 2011-09-30 15:36

    谢谢分享

    60 #
  59. jckie 2011-09-30 15:37

    谢谢 (给力)

    61 #
  60. dd 2011-10-10 11:08

    歇息而 流泪

    63 #
  61. dd 2011-10-10 11:08

    歇息而 流泪 (防流感) (防流感)

    64 #
  62. 要什么 2011-10-10 13:38

    啊死死啊死发呆啊死的

    65 #
  63. 接啊 2011-10-17 13:44

    学习一下啊 (囧) (囧) (囧)

    66 #
  64. 2011-10-17 13:46

    支持啊 看看能不能解决问题

    67 #
  65. 学友王 2011-10-17 15:11

    我试了一下,这个解密算法,发现不能用啊,现在mapbar返回的是像 ICGGEDWVDRHFV的加密字符串,找了网上的一些解密算法,似乎结果都差一点,不知道您是怎么解决的

    68 #
    • admin 2011-10-17 15:39

      我试过,是可以的。

      • 学友王 2011-11-09 12:30

        您能告诉我一下,怎么获取到mapbar的经纬度吗?我查到的破poi 的地址似乎都是加密的字符串,如何解密?或者能通过邮件告诉我一下。谢谢!

    • ks 2012-06-25 15:47

      这个加密字符串是如何得到的呢 ?

  66. windforce 2011-10-17 15:19

    (微笑) (微笑) 试一试 看看行不

    69 #
  67. ipage 2011-10-20 14:19

    这个太复杂了

    70 #
    • admin 2011-10-24 13:09

      请写点有意义的文字呗~~

  68. xyleon 2011-10-27 09:01

    太好了,试试行不行

    72 #
  69. 理想 2011-10-27 14:39

    太好了,试试

    73 #
  70. rodger 2011-11-02 16:42

    74 #
  71. 我的马甲 2011-11-06 11:24

    恰好需要

    76 #
  72. aaaaaaaaaaa 2011-11-07 09:37

    (给力)呵呵

    77 #
  73. Ricky 2011-11-10 10:30

    看看

    78 #
  74. yangjie 2011-11-11 10:33

    今天项目尽力叫我解决mapbar位置偏移的问题,找到该解决方案,等待测试成功。

    79 #
  75. qiyu 2011-11-12 09:40

    不错的东西

    80 #
  76. 老男孩博客 2011-11-14 19:32

    发现博主现在也搞上google广告了,呵呵,。推荐链接里还有苍井空,嘿嘿

    81 #
  77. tt 2011-11-22 21:44

    公式怎么想出来的哦

    82 #
  78. aa 2011-11-28 11:29

    (微笑)

    83 #
  79. Hard 2011-12-01 03:14

    学习下

    84 #
  80. ff 2011-12-05 18:02

    fff

    85 #
  81. dd 2011-12-13 22:27

    支持啊 看看能不能解决问题

    86 #
  82. cnzzx.com 2011-12-31 19:26

    (难过) (难过) (难过) (难过) (难过)

    88 #
  83. ishasha 2012-01-02 14:09

    (给力)
    感谢分享!

    89 #
  84. 所以啊 2012-01-09 16:17

    (防流感) 管用吗 现在mapbar 坐标都是加密过的老啊

    90 #
  85. gwrehjgwet 2012-01-12 08:57

    挺好

    91 #
  86. hackwind 2012-02-01 23:59

    试了,不行

    92 #
  87. online reputation management 2013-01-31 16:57

    Thanks for finally talking about >Mapbar经纬坐标偏移的加/解密算法 | 大葱爱煎饼 <Liked it!

    93 #
  88. mumu 2013-04-29 06:20

    经实际数据验证无效,不知是否因为mapbar更新了加密手段,楼主有无办法。

    94 #
    • 煎饼 2013-04-30 11:25

      这个是很久以前写的了,现在mapbar的加密方式可能更新了~~,有时间再研究下。

      • 小白 2013-12-10 11:22

        你好,我发现加密解密可以用,且正确,但是mapbar坐标转实际坐标存在些问题。有无解决办法?或者提点下思路,我试着自己解决。

Leave a Reply

(必填项)

(必填项)

(可选)