2011-07-26 6 views
6

私のアプリケーションには興味深い点のすべての緯度と経度を持つ埋め込みデータベースがあります。これらの点から私の距離を知る必要があります。 私の問題は、SQLiteが三角関数(SIN、COS ...)を計算しないため、私が持っているクエリを使用してSQLiteが距離を計算できないことがわかりました。私はこれらの距離をこのクエリを使用してプログラム的に計算することを避けようとしていました:IPhone - 緯度と経度によるSQLiteの距離

NSLog(@"SELECT ((ACOS(SIN(%@ * PI()/180) * SIN(lat * PI()/180) + COS(%@ * PI()/180) * COS(lat * PI()/180) * COS((%@ – lon) * PI()/180)) * 180/PI()) * 60 * 1.1515) AS `distance` FROM `members` HAVING `distance`<=’1000′ ORDER BY `distance`", Latitude,Latitude, Longitude); 

誰にも解決策がありますか?

よろしくお願いいたします。うん、あなたはそれから計算するために半正矢式を使用し、場所の周りの長方形に基づいて単純なクエリを作ることができますhttp://www.thismuchiknow.co.uk/?p=71

答えて

9

はこの男が同じ問題を抱えていた客観C.

でそれを行います正確な距離。

利点は、SQLiteテーブルでインデックスを使用することです。

haversine公式の詳細:http://en.wikipedia.org/wiki/Haversine_formula

+0

素晴らしいです。どうもありがとう! – Claudio

+3

答えにリンクされているのは本当に良いです。距離を計算するためにsqliteから呼び出されたc関数を定義します。それは速く、それは動作します。私が広告するのは、BETWEENステートメントを使用して検索を絞り込むことだけです。私はこれを使用しています:SELECT * FROMロケーションWHAT LET BETWEEN%f AND%f AND lon BETWEEN%f AND%f ORDER BY距離(lat、lon、%f、%f)LIMIT 25 –

+0

@KennyWinker%f値を入力してください –

0

+0

例とのリンクはありますか? – Claudio

関連する問題