-1

我有 db 表,其中包含位置详细信息,如邮政编码、长/纬度数据、地区、城市等。我正在使用这些数据在我的 Web 应用程序中显示用户位置。现在我想根据距离对用户搜索的地方进行排序,比如最近的地方。如何计算用户当前位置与他搜索过的地方之间的距离,然后根据距离对结果进行排序。

4

2 回答 2

1
i just have this function for calculate distance between two latitude,longitude, pleaes have a look if its helpful to you.

function distance(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
}      
于 2012-05-18T10:16:42.223 回答
1

如果你确实有longitudelatitude数据,你可以用这些计算来对你的搜索结果进行排序。


示例数据:

  • 执行搜索的用户有(经度/纬度): 51.993073 , 5.952852
  • 用户 1(经度/纬度): 52.893073 , 5.952852
  • 用户 2(经度/纬度): 60.993073 , 5.952852

您可以清楚地看到“用户 1”比“用户 2”更接近执行搜索的用户(参见经度)。

注意:您需要一个公式来计算这个,检查JDev答案。

于 2012-05-18T10:17:22.573 回答