我有关于商店纬度和经度的数据集,如何找到距我当前位置(纬度,经度)100米范围内的商店?
答案 0 :(得分:2)
为此使用Haversine formula。
function distance(coords1, coords2) {
const { lat: lat1, lon: lon1 } = coords1;
const { lat: lat2, lon: lon2 } = coords2;
const degToRad = x => x * Math.PI / 180;
const R = 6371;
const halfDLat = degToRad(lat2 - lat1) / 2;
const halfDLon = degToRad(lon2 - lon1) / 2;
const a = Math.sin(halfDLat) * Math.sin(halfDLat) +
Math.cos(degToRad(lat1)) * Math.cos(degToRad(lat2)) *
Math.sin(halfDLon) * Math.sin(halfDLon);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return R * c;
}
const paris = { lat: 48.864716, lon: 2.349014 };
const newYork = { lat: 40.730610, lon: -73.935242 };
console.log(distance(paris, newYork), 'km');
然后,您只需要遍历商店,使用上述功能即可计算出商店到您所在位置的距离,而只保留距离小于100米的商店。
我不知道您的数据的结构,但是如果您的商店位于阵列中,则可以使用filter
:
const shopsNearMe =
shopLocations.filter(shop => distance(shop.coords, myLocation) <= 0.1);