私は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 KMまたはユーザー1の20 KMの範囲内にあるすべてのユーザーを取得する必要があり、そのようなユーザーを取得するための最も太っている方法はありますか?私はバックエンドでSQLサーバーを利用しています。お知らせ下さい。
距離を比較すると便利なのは、計算された高価な平方根を、距離の自乗を比較することによって排除することです。したがって、現在のユーザから10 km以内のすべてのユーザを見つけるには、 '(x1-x0)^ 2 +(y1-y0)^ 2'(距離自乗)を計算し、それを100km^2と比較します。 (これらの計算は緯度/経度では機能しませんので、投影で作業する必要があります)。 – adv12
@VMAtmこの質問は全く重複していません。 – eocron
@eocronあなたは人を納得させるために "重複しない"よりも多くの説明が必要です。なぜなら、それは非常に似ているからです(2つの緯度/経度の間の距離を得る)。 –