Skip to content

Commit 82eae44

Browse files
committed
new picture gps
1 parent 0214ae9 commit 82eae44

File tree

2 files changed

+155
-0
lines changed

2 files changed

+155
-0
lines changed

_posts/2018-02-08-picture-gps.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@
6363

6464
<button data-type="baidu">百度地图</button>
6565
<button data-type="google">谷歌地图</button>
66+
<button data-type="googleSatellite">谷歌卫星</button>
67+
<label for="satellite">卫星图</label><checkbox id="satellite" />
6668

6769
</div>
6870
<div class="container" id="baiduMapCtn"></div>

resource/2021/gpsConvert.js

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
/**
2+
* Created by Wandergis on 2015/7/8.
3+
* 提供了百度坐标(BD-09)、国测局坐标(火星坐标,GCJ-02)、和 WGS-84 坐标系之间的转换
4+
*/
5+
// UMD 魔法代码
6+
// if the module has no dependencies, the above pattern can be simplified to
7+
(function (root, factory) {
8+
if (typeof define === 'function' && define.amd) {
9+
// AMD. Register as an anonymous module.
10+
define([], factory);
11+
} else if (typeof module === 'object' && module.exports) {
12+
// Node. Does not work with strict CommonJS, but
13+
// only CommonJS-like environments that support module.exports,
14+
// like Node.
15+
module.exports = factory();
16+
} else {
17+
// Browser globals (root is window)
18+
root.coordtransform = factory();
19+
}
20+
}(this, function () {
21+
// 定义一些常量
22+
var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
23+
var PI = 3.1415926535897932384626;
24+
var a = 6378245.0;
25+
var ee = 0.00669342162296594323;
26+
/**
27+
* 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02) 的转换
28+
* 即 百度 转 谷歌、高德
29+
* @param bd_lng
30+
* @param bd_lat
31+
* @returns {*[]}
32+
*/
33+
var bd09togcj02 = function bd09togcj02(bd_lng, bd_lat) {
34+
var bd_lng = +bd_lng;
35+
var bd_lat = +bd_lat;
36+
var x = bd_lng - 0.0065;
37+
var y = bd_lat - 0.006;
38+
var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);
39+
var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);
40+
var gg_lng = z * Math.cos(theta);
41+
var gg_lat = z * Math.sin(theta);
42+
return [gg_lng, gg_lat]
43+
};
44+
45+
/**
46+
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
47+
* 即 谷歌、高德 转 百度
48+
* @param lng
49+
* @param lat
50+
* @returns {*[]}
51+
*/
52+
var gcj02tobd09 = function gcj02tobd09(lng, lat) {
53+
var lat = +lat;
54+
var lng = +lng;
55+
var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
56+
var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
57+
var bd_lng = z * Math.cos(theta) + 0.0065;
58+
var bd_lat = z * Math.sin(theta) + 0.006;
59+
return [bd_lng, bd_lat]
60+
};
61+
62+
/**
63+
* WGS-84 转 GCJ-02
64+
* @param lng
65+
* @param lat
66+
* @returns {*[]}
67+
*/
68+
var wgs84togcj02 = function wgs84togcj02(lng, lat) {
69+
var lat = +lat;
70+
var lng = +lng;
71+
if (out_of_china(lng, lat)) {
72+
return [lng, lat]
73+
} else {
74+
var dlat = transformlat(lng - 105.0, lat - 35.0);
75+
var dlng = transformlng(lng - 105.0, lat - 35.0);
76+
var radlat = lat / 180.0 * PI;
77+
var magic = Math.sin(radlat);
78+
magic = 1 - ee * magic * magic;
79+
var sqrtmagic = Math.sqrt(magic);
80+
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
81+
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
82+
var mglat = lat + dlat;
83+
var mglng = lng + dlng;
84+
return [mglng, mglat]
85+
}
86+
};
87+
88+
/**
89+
* GCJ-02 转换为 WGS-84
90+
* @param lng
91+
* @param lat
92+
* @returns {*[]}
93+
*/
94+
var gcj02towgs84 = function gcj02towgs84(lng, lat) {
95+
var lat = +lat;
96+
var lng = +lng;
97+
if (out_of_china(lng, lat)) {
98+
return [lng, lat]
99+
} else {
100+
var dlat = transformlat(lng - 105.0, lat - 35.0);
101+
var dlng = transformlng(lng - 105.0, lat - 35.0);
102+
var radlat = lat / 180.0 * PI;
103+
var magic = Math.sin(radlat);
104+
magic = 1 - ee * magic * magic;
105+
var sqrtmagic = Math.sqrt(magic);
106+
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
107+
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
108+
var mglat = lat + dlat;
109+
var mglng = lng + dlng;
110+
return [lng * 2 - mglng, lat * 2 - mglat]
111+
}
112+
};
113+
114+
var transformlat = function transformlat(lng, lat) {
115+
var lat = +lat;
116+
var lng = +lng;
117+
var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
118+
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
119+
ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
120+
ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
121+
return ret
122+
};
123+
124+
var transformlng = function transformlng(lng, lat) {
125+
var lat = +lat;
126+
var lng = +lng;
127+
var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
128+
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
129+
ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
130+
ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
131+
return ret
132+
};
133+
134+
/**
135+
* 判断是否在国内,不在国内则不做偏移
136+
* @param lng
137+
* @param lat
138+
* @returns {boolean}
139+
*/
140+
var out_of_china = function out_of_china(lng, lat) {
141+
var lat = +lat;
142+
var lng = +lng;
143+
// 纬度 3.86~53.55, 经度 73.66~135.05
144+
return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55);
145+
};
146+
147+
return {
148+
bd09togcj02: bd09togcj02,
149+
gcj02tobd09: gcj02tobd09,
150+
wgs84togcj02: wgs84togcj02,
151+
gcj02towgs84: gcj02towgs84
152+
}
153+
}));

0 commit comments

Comments
 (0)