我正在用C#編寫WCF服務。我需要根據當前用戶登錄來計算用戶的距離。例如,我需要當前用戶10 KM內的所有用戶。數據量過大時計算距離的最佳和最快的方法?
數據看起來像這樣。
User Longitude Latitude
1 71.23232 31.23232
2 69.23232 30.23232
3 68.23232 28.23232
4 67.23232 27.23232
.
.
1000 23.22332 45.22323
我正在用下面的方法來計算距離。
public static double Distance(double sLatitude, double sLongitude, double dLatitude, double dLongitude, char unit='m')
{
var sCoord = new GeoCoordinate(sLatitude, sLongitude);
var dCoord = new GeoCoordinate(dLatitude, dLongitude);
if(unit == 'm')
return sCoord.GetDistanceTo(dCoord);
else if(unit == 'k')
return (sCoord.GetDistanceTo(dCoord))/1000;
}
用戶1登錄,我需要得到誰在10公里或用戶1. 20公里的範圍內有沒有fatest方式來獲得這些用戶的所有用戶?我在後端usig SQL服務器。請指教。
比較距離時的一個便利技巧是通過比較平方距離來消除計算昂貴的平方根。因此,要找到距離當前用戶10公里內的所有用戶,計算'(x1 - x0)^ 2 +(y1 - y0)^ 2'(距離平方),並將其與100平方公里比較。 (請注意,這些計算不適用於緯度/經度值;您需要在投影中工作。) – adv12
@VMAtm根本不重複這個問題。 – eocron
@eocron你需要更多的解釋,而不是「不重複」來說服人們不是,因爲它看起來非常相似(獲得兩個緯度/長度座標之間的距離)。 –