|
38 | 38 | return this.west <= lon && this.east >= lon && this.north >= lat && this.south <= lat; |
39 | 39 | } |
40 | 40 |
|
41 | | - //China region - raw data |
| 41 | + // China region - raw data |
42 | 42 | var region = [ |
43 | 43 | new Rectangle(79.446200, 49.220400, 96.330000, 42.889900), |
44 | 44 | new Rectangle(109.687200, 54.141500, 135.000200, 39.374200), |
|
47 | 47 | new Rectangle(97.025300, 29.529700, 124.367395, 20.414096), |
48 | 48 | new Rectangle(107.975793, 20.414096, 111.744104, 17.871542) |
49 | 49 | ]; |
50 | | - //China excluded region - raw data |
| 50 | + // China excluded region - raw data |
51 | 51 | var exclude = [ |
52 | 52 | new Rectangle(119.921265, 25.398623, 122.497559, 21.785006), |
53 | 53 | new Rectangle(101.865200, 22.284000, 106.665000, 20.098800), |
|
56 | 56 | new Rectangle(127.456800, 55.817500, 137.022700, 49.557400), |
57 | 57 | new Rectangle(131.266200, 44.892200, 137.022700, 42.569200), |
58 | 58 | new Rectangle(73.124600, 35.398637, 77.948114, 29.529700), |
| 59 | + ] |
| 60 | + // China excluded region 2, Hongkong etc. |
| 61 | + var EXCLUDE_REGIN_2 = [ |
59 | 62 | new Rectangle(114.505238, 22.138258, 113.845000, 22.428903), |
60 | 63 | new Rectangle(113.97000, 22.507833, 114.450000, 22.428903), |
61 | 64 | ]; |
62 | 65 |
|
63 | | - function isInChina(lon, lat) { |
| 66 | + function isInChina(lon, lat, excludeRegin2 = true) { |
64 | 67 | for (var i = 0; i < region.length; i++) { |
65 | 68 | if (region[i].contain(lon, lat)) { |
66 | 69 | for (var j = 0; j < exclude.length; j++) { |
67 | 70 | if (exclude[j].contain(lon, lat)) { |
68 | 71 | return false; |
69 | 72 | } |
70 | 73 | } |
| 74 | + if (excludeRegin2) { |
| 75 | + for (var j = 0; j < EXCLUDE_REGIN_2.length; j++) { |
| 76 | + if (EXCLUDE_REGIN_2[j].contain(lon, lat)) { |
| 77 | + return false; |
| 78 | + } |
| 79 | + } |
| 80 | + } |
71 | 81 | return true; |
72 | 82 | } |
73 | 83 | } |
|
113 | 123 | * @returns {*[]} |
114 | 124 | */ |
115 | 125 | function wgs84togcj02(lng, lat) { |
116 | | - if (!isInChina(lng, lat)) { |
117 | | - return [lng, lat] |
118 | | - } |
| 126 | + |
119 | 127 | return transform(lng, lat) |
120 | 128 | }; |
121 | 129 |
|
|
126 | 134 | * @returns {*[]} |
127 | 135 | */ |
128 | 136 | function gcj02towgs84(lng, lat) { |
129 | | - if (!isInChina(lng, lat)) { |
130 | | - return [lng, lat] |
131 | | - } |
132 | 137 | var out = transform(lng, lat) |
133 | 138 | return [lng * 2 - out[0], lat * 2 - out[1]] |
134 | 139 | }; |
|
164 | 169 | }; |
165 | 170 |
|
166 | 171 | return { |
167 | | - // 向前兼容 |
168 | | - bd09togcj02: bd09togcj02, |
169 | | - gcj02tobd09: gcj02tobd09, |
170 | | - wgs84togcj02: wgs84togcj02, |
171 | | - gcj02towgs84: gcj02towgs84, |
172 | | - // 小驼峰命名风格 |
| 172 | + // 原始的转换方法 |
| 173 | + rawBd09ToGcj02: bd09togcj02, |
| 174 | + rawGcj02ToBd09: gcj02tobd09, |
| 175 | + rawWgs84ToGcj02: wgs84togcj02, |
| 176 | + rawGcj02ToWgs84: gcj02towgs84, |
| 177 | + // 判断了中国范围的转换方法 |
173 | 178 | bd09ToGcj02: bd09togcj02, |
174 | 179 | gcj02ToBd09: gcj02tobd09, |
175 | | - wgs84ToGcj02: wgs84togcj02, |
176 | | - gcj02ToWgs84: gcj02towgs84, |
177 | | - bd09ToWgs84: function (lng, lat) { |
| 180 | + wgs84ToGcj02: function (lng, lat) { |
178 | 181 | if (!isInChina(lng, lat)) { |
179 | 182 | return [lng, lat] |
180 | 183 | } |
| 184 | + return wgs84togcj02(lng, lat) |
| 185 | + }, |
| 186 | + gcj02ToWgs84: function (lng, lat) { |
| 187 | + if (!isInChina(lng, lat)) { |
| 188 | + return [lng, lat] |
| 189 | + } |
| 190 | + return gcj02towgs84(lng, lat) |
| 191 | + }, |
| 192 | + bd09ToWgs84: function (lng, lat) { |
| 193 | + if (!isInChina(lng, lat, false)) { |
| 194 | + return [lng, lat] |
| 195 | + } |
181 | 196 | var gcj02 = bd09togcj02(lng, lat) |
182 | 197 | return gcj02towgs84(gcj02[0], gcj02[1]) |
183 | 198 | }, |
184 | 199 | wgs84ToBd09: function (lng, lat) { |
185 | | - if (!isInChina(lng, lat)) { |
| 200 | + if (!isInChina(lng, lat, false)) { |
186 | 201 | return [lng, lat] |
187 | 202 | } |
188 | 203 | var gcj02 = wgs84togcj02(lng, lat) |
|
0 commit comments