2010-11-23 48 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