@memori.ai/memori-react
Version:
[](https://www.npmjs.com/package/@memori.ai/memori-react)   • 1.18 kB
text/typescript
export const EARTH_RADIUS_AT_45_DEGRESS = (6357.0 + 6378.0) / 2.0;
export const DEGREES_TO_RADIANS = Math.PI / 180;
export const getUncertaintyByViewport = (
bouningBox:
| [number, number, number, number]
| [string, string, string, string]
) => {
// https://nominatim.org/release-docs/develop/api/Output/#boundingbox
const [minLat, maxLat, minLng, maxLng] =
typeof bouningBox[0] === 'string'
? (bouningBox as string[]).map(parseFloat)
: (bouningBox as number[]);
// Convert latitude and longitude to radians
const phi1 = minLat * DEGREES_TO_RADIANS;
const lambda1 = minLng * DEGREES_TO_RADIANS;
const phi2 = maxLat * DEGREES_TO_RADIANS;
const lambda2 = maxLng * DEGREES_TO_RADIANS;
// Compute distance using the haversine formula
// https://en.wikipedia.org/wiki/Haversine_formula
const angle =
2.0 *
Math.asin(
Math.sqrt(
Math.sin((phi2 - phi1) / 2.0) * Math.sin((phi2 - phi1) / 2.0) +
Math.cos(phi1) *
Math.cos(phi2) *
Math.sin((lambda2 - lambda1) / 2.0) *
Math.sin((lambda2 - lambda1) / 2.0)
)
);
return EARTH_RADIUS_AT_45_DEGRESS * angle;
};