4

私は店の経度と緯度を持つ sqlite db を持っていて、最も近い 5 つの店を見つけたいと思っています。

したがって、次のコードは正常に機能します。

    if(sqlite3_prepare_v2(db, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {


    while (sqlite3_step(compiledStatement) == SQLITE_ROW) {

        NSString *branchStr = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
        NSNumber *fLat = [NSNumber numberWithFloat:(float)sqlite3_column_double(compiledStatement, 1)];
        NSNumber *fLong = [NSNumber numberWithFloat:(float)sqlite3_column_double(compiledStatement, 2)];

        NSLog(@"Address %@, Lat = %@, Long = %@", branchStr, fLat, fLong);
        CLLocation *location1 = [[CLLocation alloc] initWithLatitude:currentLocation.coordinate.latitude longitude:currentLocation.coordinate.longitude];
        CLLocation *location2 = [[CLLocation alloc] initWithLatitude:[fLat floatValue] longitude:[fLong floatValue]];

        NSLog(@"Distance i meters: %f", [location1 getDistanceFrom:location2]);
        [location1 release];
        [location2 release];
    }       
}

今いる場所から各店までの距離を知っています。私の質問はです。

  1. 距離を sqlite の行に戻す方がよいでしょうか。データベースをステップスルーすると、行が表示されます。それ、どうやったら出来るの?UPDATE ステートメントを使用しますか? 誰かが私を助けるためのコードを持っていますか?

  2. sqlite を配列に読み取ってから、配列を並べ替えることができます。上記のアプローチよりもこれをお勧めしますか?これはより効率的ですか?

最後に、最寄りの 5 つのショップを見つけるためのより良い方法があれば、ぜひ教えてください。

4

2 に答える 2

6

SQL で近くの場所を見つける最速の方法は、SQL クエリで Haversine 式を使用することです。Google で sqlite と Haversine を検索すると、実装が見つかります。

これは私が以前に使用したものです:

http://www.thismuchiknow.co.uk/?p=71

于 2010-06-01T11:11:28.980 に答える
0

すべての要素を一度だけ実行する必要があるため、複雑さはかなり良好です。固定サイズの Deque-container、一種のリンク リスト、または固定サイズの配列が必要です。サイズは 5 で固定されており、すべてのポイントから取得したいショップの数です。Deque までの距離が最も短いショップを常に追加します。データベースを実行した後、deque に最も近い 5 つのショップがあります。

于 2010-06-01T11:12:16.713 に答える