0

現在、私は基本的にシティガイドであるiPhoneアプリを持っています。それはユーザーに彼らの周りのさまざまなものを示し、距離の順にそれらをリストします。

現在、アプリのデータはオンラインのMySQLデータベースにあり、phpスクリプトは銀行などのこのデータベースのさまざまな部分をXMLドキュメントに変換するため、銀行用、バー用などのXMLドキュメントがあります。各XMLドキュメントには独自のURLがあります。

次に、iPhoneアプリはURLからXMLドキュメントを読み取り、XMLドキュメントを解析し、CoreLocationを使用してXMLドキュメント内の各場所とユーザーの間の距離を計算し、データを距離順に並べ替えたTableViewに配置します。(データベース内の各データ(バー、バンクなど)には座標が付加されていることに注意してください)。

これは正常に機能しており、距離を解析および計算する場所が最大数百ある場合でも問題はありません。しかし、あなたが数千人になり始めると、それは長い時間がかかり始めます。

基本的に、すべてのデータをダウンロードして距離を計算するのではなく、電話のGPS位置をサーバー/データベースなどに送信して、最も近い20の位置を返し、それを以前のように解析して表示できる方法を誰かが知っているかどうか疑問に思っています。

私はこれが大きな質問であることを知っています。私がすべてを作成するのを手伝ってくれる人を探していません。これを行う方法を知る必要があります。または、誰かがこれに似た何かをした場合。

前もって感謝します。

4

1 に答える 1

1

質問でこれを正しく行う方法をほぼ定義しました。必要なのは、ユーザーの座標を Web サービスに渡すことです。Web サービスまたはストアド プロシージャは、近くのものだけに結果をフィルター処理するロジックを実装する必要があります。アドバイスが必要な特定の部分がある場合は、明確にしてください。

ここでの面倒な作業は、データベース エンジンに任せるべきです。mySQL では、次のようなものを使用します。

SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) + 
     COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon - lon) * 
     PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance 
FROM members 
HAVING distance<='10' ORDER BY distance ASC

パラメータを使用した JSON の get リクエストの AFNetworking コードを次に示します (これは最も関連性の高いコードのスニペットであり、スタンドアロンでは実行されません)。

NSString *latString = [NSString stringWithFormat:@"%f", lastLocation.coordinate.latitude];
    NSString *lonString = [NSString stringWithFormat:@"%f", lastLocation.coordinate.longitude];
    NSString *accString = [NSString stringWithFormat:@"%f", lastLocation.horizontalAccuracy];

    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:[defaults valueForKeyPath:@"sessionRP"] , @"sessionRP",  [defaults valueForKeyPath:@"partnerID"], @"pid", appointment.scheduleRowPointer, @"srp", latString, @"lat", lonString, @"long", status, @"stat", @"0", @"cached", accString, @"acc", nil];
    NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET" path:myPath parameters:params];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
于 2012-11-16T17:03:30.153 に答える