私は、位置座標 (緯度と経度) を持つアプリケーションを持っています。次に、(緯度と経度) を持つ友人のリストを持っています。
自分に最も近い人が最初になるという条件に従って、友達の配列をソートする必要があります
.私は彼らと私の緯度と経度を持っています.誰かがこれを達成するのを手伝ってくれますか?
CLLocation *myLoc = [[CLLocation alloc] initWithLatitude:42.5000 longitude:1.5000];
NSArray *arr = [NSArray arrayWithObjects:
[[CLLocation alloc] initWithLatitude:42.5000 longitude:1.5000],
[[CLLocation alloc] initWithLatitude:24.0000 longitude:54.0000],
[[CLLocation alloc] initWithLatitude:33.0000 longitude:65.0000],
[[CLLocation alloc] initWithLatitude:17.0500 longitude:-61.8000],
[[CLLocation alloc] initWithLatitude:18.2500 longitude:-63.1667],
[[CLLocation alloc] initWithLatitude:41.0000 longitude:20.0000],
[[CLLocation alloc] initWithLatitude:40.0000 longitude:45.0000],
nil
];
CLLocation *nearestLoc = nil;
CLLocationDistance nearestDis = DBL_MAX;
for (CLLocation *loc in arr) {
CLLocationDistance distance = [myLoc distanceFromLocation:loc];
if (nearestDis > distance) {
nearestLoc = loc;
nearestDis = distance;
}
}
うーん、この情報をどのように保存しているかによって異なります。postgisを使用してpostgresに保存している場合、距離でソートできると確信しています。そうでない場合は、距離計算アルゴリズムを引っ掛けて、すべての友達に対して実行し、おそらくキャッシュしてから、距離で並べ替えることができます。