GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)

WGS-84:是国际标准,GPS坐标(Google Earth使用、或者GPS模块)
GCJ-02:中国坐标偏移标准,Google Map、高德、腾讯使用
BD-09:百度坐标偏移标准,Baidu Map使用

//WGS-84 to GCJ-02
GPS.gcj_encrypt();

//GCJ-02 to WGS-84 粗略
GPS.gcj_decrypt();

//GCJ-02 to WGS-84 精确(二分极限法)
// var threshold = 0.000000001; 目前设置的是精确到小数点后9位,这个值越小,越精确,但是javascript中,浮点运算本身就不太精确,九位在GPS里也偏差不大了
GSP.gcj_decrypt_exact();

//GCJ-02 to BD-09
GPS.bd_encrypt();

//BD-09 to GCJ-02
GPS.bd_decrypt();

//求距离
GPS.distance();

示例:
document.write("GPS: 39.933676862706776,116.35608315379092<br />");
var arr2 = GPS.gcj_encrypt(39.933676862706776, 116.35608315379092);
document.write("中国:" + arr2['lat']+","+arr2['lon']+'<br />');
var arr3 = GPS.gcj_decrypt_exact(arr2['lat'], arr2['lon']);
document.write('逆算:' + arr3['lat']+","+arr3['lon']+' 需要和第一行相似(目前是小数点后9位相等)');


本算法 gcj算法、bd算法都非常精确,已经测试通过。
(BD转换的结果和百度提供的接口精确到小数点后4位)
请放心使用
 
标签:  jQuery GPS  PHP
 

代码片段(2)[全屏查看所有代码]

1. [代码][JavaScript]代码     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
var GPS = {
     PI : 3.14159265358979324,
     x_pi : 3.14159265358979324 * 3000.0 / 180.0,
     delta : function (lat, lon) {
         // Krasovsky 1940
         //
         // a = 6378245.0, 1/f = 298.3
         // b = a * (1 - f)
         // ee = (a^2 - b^2) / a^2;
         var a = 6378245.0; //  a: 卫星椭球坐标投影到平面地图坐标系的投影因子。
         var ee = 0.00669342162296594323; //  ee: 椭球的偏心率。
         var dLat = this .transformLat(lon - 105.0, lat - 35.0);
         var dLon = this .transformLon(lon - 105.0, lat - 35.0);
         var radLat = lat / 180.0 * this .PI;
         var magic = Math.sin(radLat);
         magic = 1 - ee * magic * magic;
         var sqrtMagic = Math.sqrt(magic);
         dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * this .PI);
         dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * this .PI);
         return { 'lat' : dLat, 'lon' : dLon};
     },
     
     //WGS-84 to GCJ-02
     gcj_encrypt : function (wgsLat, wgsLon) {
         if ( this .outOfChina(wgsLat, wgsLon))
             return { 'lat' : wgsLat, 'lon' : wgsLon};
 
         var d = this .delta(wgsLat, wgsLon);
         return { 'lat' : wgsLat + d.lat, 'lon' : wgsLon + d.lon};
     },
     //GCJ-02 to WGS-84
     gcj_decrypt : function (gcjLat, gcjLon) {
         if ( this .outOfChina(gcjLat, gcjLon))
             return { 'lat' : gcjLat, 'lon' : gcjLon};
         
         var d = this .delta(gcjLat, gcjLon);
         return { 'lat' : gcjLat - d.lat, 'lon' : gcjLon - d.lon};
     },
     //GCJ-02 to WGS-84 exactly
     gcj_decrypt_exact : function (gcjLat, gcjLon) {
         var initDelta = 0.01;
         var threshold = 0.000000001;
         var dLat = initDelta, dLon = initDelta;
         var mLat = gcjLat - dLat, mLon = gcjLon - dLon;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值