首页 > 解决方案 > 如何过滤和计算距原点 10 公里的 JSON 对象纬度和经度?

问题描述

我正在尝试过滤和计算给定原点 10 公里内的 api 端点的对象。我一直纠结于如何过滤 api 结果并计算匹配项的数量。

我能够通过一对一的比较来过滤数据并计算有多少项目具有“香港”城市,但距离计算是过滤数据的另一个复杂层。

coords = [
   [
      City: "Hong Kong",
      Lat: “22.667790”, 
      Long: “-111.909905” 
   ],
   [
      City: "Atlanta",
      Lat: “22.958769”, 
      Long: “-111.948939”
   ],
   [
      City: "Paris",
      Lat: “23.989803”, 
      Long: “-112.989850”
   ],
   [
      City: "Sydney",
      Lat: “22.001118”,
      Long:”-111.939433”
   ],
   [
      City: "Hong Kong",
      Lat: “22.667790”, 
      Long: “-111.909905” 
   ],
];



origin = [  
     lat:"22.111009",
     long: "-113.667870"
];

function getDistance(lat1, lon1, lat2, lon2) {
     var R = 6371; // Radius of the earth in km
     var dLat = deg2rad(lat2 - lat1); // deg2rad below
     var dLon = deg2rad(lon2 - lon1);
     var a =
        Math.sin(dLat / 2) * Math.sin(dLat / 2) +
        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
        Math.sin(dLon / 2) * Math.sin(dLon / 2);
     var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
     var d = R * c; // Distance in km
     return d;

}


function deg2rad(deg) {
     return deg * (Math.PI / 180);
}



coords.forEach(function(coord){
    distance = getDistance(coord.lat, coord.long, origin.lat, origin.long);

    if (distance < 10){
        return distance;
    }

});

到目前为止,我还没有能够返回任何有意义的东西,只能返回原点和每个对象之间的距离列表。它应该显示在原点 10 公里内有多少个城市。

标签: javascriptjson

解决方案


你需要使用filter 方法

const filtered = coords.filter(coord => {
    distance = getDistance(coord.lat, coord.long, origin.lat, origin.long);
    return distance < 10
});

现在您已经过滤了存储在名为的数组中的结果filtered


推荐阅读