UNPKG

5.6 kBJavaScriptView Raw
1import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2import { degreesToRadians, radiansToLength } from '@turf/helpers';
3var originShift = 2 * Math.PI * 6378137 / 2.0;
4export function extent(data) {
5 var dataExtent = [Infinity, Infinity, -Infinity, -Infinity];
6 data.forEach(function (item) {
7 var coordinates = item.coordinates;
8 caculExtent(dataExtent, coordinates);
9 });
10 return dataExtent;
11}
12
13function caculExtent(dataExtent, coords) {
14 if (Array.isArray(coords[0])) {
15 coords.forEach(function (coord) {
16 caculExtent(dataExtent, coord);
17 });
18 } else {
19 if (dataExtent[0] > coords[0]) {
20 dataExtent[0] = coords[0];
21 }
22
23 if (dataExtent[1] > coords[1]) {
24 dataExtent[1] = coords[1];
25 }
26
27 if (dataExtent[2] < coords[0]) {
28 dataExtent[2] = coords[0];
29 }
30
31 if (dataExtent[3] < coords[1]) {
32 dataExtent[3] = coords[1];
33 }
34 }
35
36 return dataExtent;
37}
38
39export function tranfrormCoord(data, cb) {
40 return transform(data, cb);
41}
42
43function transform(item, cb) {
44 if (Array.isArray(item[0])) {
45 return item.map(function (coord) {
46 return transform(coord, cb);
47 });
48 }
49
50 return cb(item);
51}
52
53export function lngLatToMeters(lnglat) {
54 var validate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
55 var accuracy = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
56 enable: true,
57 decimal: 1
58 };
59 lnglat = validateLngLat(lnglat, validate);
60 var lng = lnglat[0];
61 var lat = lnglat[1];
62 var x = lng * originShift / 180.0;
63 var y = Math.log(Math.tan((90 + lat) * Math.PI / 360.0)) / (Math.PI / 180.0);
64 y = y * originShift / 180.0;
65
66 if (accuracy.enable) {
67 x = Number(x.toFixed(accuracy.decimal));
68 y = Number(y.toFixed(accuracy.decimal));
69 }
70
71 return lnglat.length === 3 ? [x, y, lnglat[2]] : [x, y];
72}
73export function metersToLngLat(meters) {
74 var decimal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;
75 var x = meters[0];
76 var y = meters[1];
77 var lng = x / originShift * 180.0;
78 var lat = y / originShift * 180.0;
79 lat = 180 / Math.PI * (2 * Math.atan(Math.exp(lat * Math.PI / 180.0)) - Math.PI / 2.0);
80
81 if (decimal !== undefined && decimal !== null) {
82 lng = Number(lng.toFixed(decimal));
83 lat = Number(lat.toFixed(decimal));
84 }
85
86 return meters.length === 3 ? [lng, lat, meters[2]] : [lng, lat];
87}
88export function longitude(lng) {
89 if (lng === undefined || lng === null) {
90 throw new Error('lng is required');
91 }
92
93 if (lng > 180 || lng < -180) {
94 lng = lng % 360;
95
96 if (lng > 180) {
97 lng = -360 + lng;
98 }
99
100 if (lng < -180) {
101 lng = 360 + lng;
102 }
103
104 if (lng === 0) {
105 lng = 0;
106 }
107 }
108
109 return lng;
110}
111export function latitude(lat) {
112 if (lat === undefined || lat === null) {
113 throw new Error('lat is required');
114 }
115
116 if (lat > 90 || lat < -90) {
117 lat = lat % 180;
118
119 if (lat > 90) {
120 lat = -180 + lat;
121 }
122
123 if (lat < -90) {
124 lat = 180 + lat;
125 }
126
127 if (lat === 0) {
128 lat = 0;
129 }
130 }
131
132 return lat;
133}
134export function validateLngLat(lnglat, validate) {
135 if (validate === false) {
136 return lnglat;
137 }
138
139 var lng = longitude(lnglat[0]);
140 var lat = latitude(lnglat[1]);
141
142 if (lat > 85) {
143 lat = 85;
144 }
145
146 if (lat < -85) {
147 lat = -85;
148 }
149
150 return lnglat.length === 3 ? [lng, lat, lnglat[2]] : [lng, lat];
151}
152export function aProjectFlat(lnglat) {
153 var maxs = 85.0511287798;
154 var lat = Math.max(Math.min(maxs, lnglat[1]), -maxs);
155 var scale = 256 << 20;
156 var d = Math.PI / 180;
157 var x = lnglat[0] * d;
158 var y = lat * d;
159 y = Math.log(Math.tan(Math.PI / 4 + y / 2));
160 var a = 0.5 / Math.PI;
161 var b = 0.5;
162 var c = -0.5 / Math.PI;
163 d = 0.5;
164 x = scale * (a * x + b);
165 y = scale * (c * y + d);
166 return [Math.floor(x), Math.floor(y)];
167}
168export function unProjectFlat(px) {
169 var a = 0.5 / Math.PI;
170 var b = 0.5;
171 var c = -0.5 / Math.PI;
172 var d = 0.5;
173 var scale = 256 << 20;
174
175 var _px = _slicedToArray(px, 2),
176 x = _px[0],
177 y = _px[1];
178
179 x = (x / scale - b) / a;
180 y = (y / scale - d) / c;
181 y = (Math.atan(Math.pow(Math.E, y)) - Math.PI / 4) * 2;
182 d = Math.PI / 180;
183 var lat = y / d;
184 var lng = x / d;
185 return [lng, lat];
186}
187export function lnglatDistance(coordinates1, coordinates2, units) {
188 var dLat = degreesToRadians(coordinates2[1] - coordinates1[1]);
189 var dLon = degreesToRadians(coordinates2[0] - coordinates1[0]);
190 var lat1 = degreesToRadians(coordinates1[1]);
191 var lat2 = degreesToRadians(coordinates2[1]);
192 var a = Math.pow(Math.sin(dLat / 2), 2) + Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);
193 return radiansToLength(2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)), units = 'meters');
194}
195export function project(lnglat) {
196 var d = Math.PI / 180;
197 var max = 85.0511287798;
198 var earthRadius = 6378137;
199 var lat = Math.max(Math.min(max, lnglat[1]), -max);
200 var sin = Math.sin(lat * d);
201 var x = earthRadius * lnglat[0] * d;
202 var y = earthRadius * Math.log((1 + sin) / (1 - sin)) / 2;
203 return [x, y];
204}
205export function padBounds(b, bufferRatio) {
206 var heightBuffer = Math.abs(b[1][1] - b[0][1]) * bufferRatio;
207 var widthBuffer = Math.abs(b[1][0] - b[0][0]) * bufferRatio;
208 return [[b[0][0] - widthBuffer, b[0][1] - heightBuffer], [b[1][0] + widthBuffer, b[1][1] + heightBuffer]];
209}
210export function boundsContains(b1, b2) {
211 return b1[0][0] <= b2[0][0] && b1[0][1] <= b2[0][1] && b1[1][0] >= b2[1][0] && b1[1][1] >= b2[1][1];
212}
213export function bBoxToBounds(b1) {
214 return [[b1[0], b1[1]], [b1[2], b1[3]]];
215}
216//# sourceMappingURL=geo.js.map
\No newline at end of file