2010-11-23 46 views
2

想要为移动web应用程序实现“查找最近”过程,该过程将根据用户的当前位置自动选择表单中下拉列表中最接近的项目。移动设备webapp的“查找最近的”过程?

假设我们对列表中的每个元素都有纬度/经度,以及移动设备上的人员位置,找到最近的项目的最佳方法是什么?我们将有大约150-200个可能的项目,并希望距离用户最近的项目,因此我们可以将其设置为默认项目。

有没有办法在JS中有效地做到这一点,或者它会更适合服务器端?

回答

1

您需要一个循环来计算距离,并从此计算最近的距离。使用haversine公式:

var R = 6371; // km 
var dLat = (lat2-lat1).toRad(); 
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var distance = R * c; 

更好地运行自己的基准测试,以找出是否会更好做这个服务器端或客户端。

+0

谢谢。在相关的方法上,是否有可能通过SQL Server TSQL完成这一切的方法?所以我们可以创建一个web服务来接受经纬度,然后返回最近的项目的ID? – schooner 2010-11-23 16:31:15