Files
modstagram-back/utils/nearbyPosts.js
payacom 3f416a7a60 full
2026-08-31 20:45:41 +03:30

28 lines
939 B
JavaScript

function haversineMeters(lat1, lon1, lat2, lon2) {
const toRad = (deg) => (deg * Math.PI) / 180
const dLat = toRad(lat2 - lat1)
const dLon = toRad(lon2 - lon1)
const a =
Math.sin(dLat / 2) ** 2 +
Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) ** 2
return 6371000 * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
}
function filterPostsByDistance(posts, viewerLat, viewerLng, radiusMeters) {
const parsedLat = parseFloat(viewerLat)
const parsedLng = parseFloat(viewerLng)
if (!Number.isFinite(parsedLat) || !Number.isFinite(parsedLng)) return []
return posts.filter((post) => {
const postLat = parseFloat(post.lat)
const postLng = parseFloat(post.lng)
if (!Number.isFinite(postLat) || !Number.isFinite(postLng)) return false
return haversineMeters(parsedLat, parsedLng, postLat, postLng) <= radiusMeters
})
}
module.exports = {
haversineMeters,
filterPostsByDistance,
}