如何在javascripts中按经度纬度距离对数组项进行排序?

Tha*_*aka 4 javascript arrays sorting geo latitude-longitude

我正在关注6个位置的JSON数组.有没有什么方法可以根据经度和纬度对这些数据进行排序?

[
{"id" : 279, "longitude":79.853239,"latitude":6.912283},
{"id" : 284, "longitude":79.865699,"latitude":6.885697},
{"id" : 13,  "longitude":79.851187,"latitude":6.912220},
{"id" : 282, "longitude":79.858904,"latitude":6.871041},
{"id" : 281, "longitude":79.853346,"latitude":6.899757},
{"id" : 16,  "longitude":79.854786,"latitude":6.894039}
]
Run Code Online (Sandbox Code Playgroud)

排序可以从第一项开始,结果应该是这样的

[
{"id" : 279, "longitute":79.853239,"latitude":6.912283},
{"id" : 13,  "longitute":79.851187,"latitude":6.912220},
{"id" : 281, "longitute":79.853346,"latitude":6.899757},
{"id" : 16,  "longitute":79.854786,"latitude":6.894039},
{"id" : 284, "longitute":79.865699,"latitude":6.885697},
{"id" : 282, "longitute":79.858904,"latitude":6.871041}
]
Run Code Online (Sandbox Code Playgroud)

Tha*_*aka 9

通过添加另一个名为distance的属性解决问题.使用以下函数计算两点之间的距离

function calculateDistance(lat1, lon1, lat2, lon2, unit) {
  var radlat1 = Math.PI * lat1/180
  var radlat2 = Math.PI * lat2/180
  var radlon1 = Math.PI * lon1/180
  var radlon2 = Math.PI * lon2/180
  var theta = lon1-lon2
  var radtheta = Math.PI * theta/180
  var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
  dist = Math.acos(dist)
  dist = dist * 180/Math.PI
  dist = dist * 60 * 1.1515
  if (unit=="K") { dist = dist * 1.609344 }
  if (unit=="N") { dist = dist * 0.8684 }
  return dist
}
Run Code Online (Sandbox Code Playgroud)

然后使用上面的函数计算数组中每个项目的距离.然后按距离排序数组.

for ( i = 0; i < uniqueNodes.length; i++) {
  uniqueNodes[i]["distance"] = calculateDistance(uniqueNodes[0]["latitude"],uniqueNodes[0]["longitute"],uniqueNodes[i]["latitude"],uniqueNodes[i]["longitute"],"K");
}

uniqueNodes.sort(function(a, b) { 
  return a.distance - b.distance;
});
Run Code Online (Sandbox Code Playgroud)

  • computeDistance函数定义radlon1和radlon2,但从不使用它们。算法有问题吗? (2认同)
  • 这使用*余弦球定律* https://www.movable-type.co.uk/scripts/latlong.html。单位是什么意思?K 为公里?和 N 表示英制单位/英里? (2认同)