我有 db 表,其中包含位置详细信息,如邮政编码、长/纬度数据、地区、城市等。我正在使用这些数据在我的 Web 应用程序中显示用户位置。现在我想根据距离对用户搜索的地方进行排序,比如最近的地方。如何计算用户当前位置与他搜索过的地方之间的距离,然后根据距离对结果进行排序。
问问题
143 次
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
如果你确实有longitude
和latitude
数据,你可以用这些计算来对你的搜索结果进行排序。
示例数据:
- 执行搜索的用户有(经度/纬度): 51.993073 , 5.952852
- 用户 1(经度/纬度): 52.893073 , 5.952852
- 用户 2(经度/纬度): 60.993073 , 5.952852
您可以清楚地看到“用户 1”比“用户 2”更接近执行搜索的用户(参见经度)。
注意:您需要一个公式来计算这个,检查JDev
答案。
于 2012-05-18T10:17:22.573 回答