5

私はcaを持つアプリケーションを書いています。データベースに 7000 のヨーロッパのレストランがあり、ユーザーに最も近いレストランのリストを表示したいと考えています。たとえば、ユーザーから半径 5 km 以内にあるすべてのレストランです。

サーバー上で検索を実行できますが、インターネットが必要です。データを iPhone に保存して、データベースにクエリを実行することはできますか? コアデータやiPhoneのSQLiteでそのようなものの参照が見つかりません。

ピタゴラスなどを使って自分でプログラムし、すべてのクエリですべてのレストランまでの距離を計算する必要がありますか? それとも何か他の方法がありますか?

[更新] サーバー上で既に行っているように使用したい (ただし、iPhone 上で行う):SELECT * FROM restaurants WHERE ST_Distance_Sphere(geo, ST_GeomFromText(POINT(55.98767 57.12345), -1)) < 5000

たとえば外国にいるときなど、インターネットに接続していなくても、ユーザーがレストランを見つけられるようにしたいと考えています。

4

2 に答える 2

9

緯度と経度の計算を読んでください。緯度と経度は、それ自体が球面上の円弧として表される距離です。緯度と経度で表現された場所のデータベースがある場合は、フェッチを実行して、ユーザーの現在の場所から北緯と南緯数度、東経と西経度の数度以内にあるレコードのみを検索できます。

したがって、次のような述語になります (疑似コード):

latitude >= (currentLatitude-aFewMinutesOfArc)
AND
latitude <= (currentLatitude+aFewMinutesOfArc)
AND
longitude >= (currentLongitude-aFewMinutesOfArc)
AND
longitude >= (currentLongitude+aFewMinutesOfArc)

...これにより、ボックス内にあるすべてのレストランのレコードを返す論理ボックスが作成されます。次に、正確な距離を計算する必要がある場合は、7,000 のレコードのうち少数のレコードに対して計算を実行するだけで済みます。

位置情報の計算を処理するための多くのツールが提供されているため、位置情報サービスについて読むことをお勧めします。

プレーン SQL と Core Data のどちらを使用するかについては、この件に関する以前の回答を確認してください。簡単に言えば、C SQL API を既に知っていて、データが単純で大きく、静的である場合は、SQL を選択することをお勧めします。Core Data の学習に時間を割くことができ、データが複雑で動的である場合は、データのサイズに関係なく、Core Data を選択することをお勧めします。

于 2011-07-15T18:45:25.713 に答える