mirror of
https://github.com/visgl/react-map-gl.git
synced 2025-12-08 20:16:02 +00:00
31 lines
921 B
JavaScript
31 lines
921 B
JavaScript
const EPSILON = 1e-9;
|
|
|
|
// Discard precision errors for comparison
|
|
export function toLowPrecision(input, precision = 11) {
|
|
if (Number.isFinite(input)) {
|
|
return Number(input.toPrecision(precision));
|
|
} else if (Array.isArray(input)) {
|
|
return input.map(item => toLowPrecision(item, precision));
|
|
} else if (input) {
|
|
const output = {};
|
|
for (const key in input) {
|
|
output[key] = toLowPrecision(input[key], precision);
|
|
}
|
|
return output;
|
|
}
|
|
return input;
|
|
}
|
|
|
|
// Compare two [lng, lat] locations, account for longitude wrapping
|
|
export function isSameLocation(lngLat1, lngLat2) {
|
|
const lng1 = toLowPrecision(lngLat1[0]);
|
|
const lat1 = toLowPrecision(lngLat1[1]);
|
|
const lng2 = toLowPrecision(lngLat2[0]);
|
|
const lat2 = toLowPrecision(lngLat2[1]);
|
|
return (lng1 - lng2) % 360 === 0 && lat1 === lat2;
|
|
}
|
|
|
|
export function equals(a, b, epsilon = EPSILON) {
|
|
return Math.abs(a - b) < epsilon;
|
|
}
|