2

私は、都市名、経度、緯度を含む7000以上のレコードを含むsqliteデータベースを使用したアプリケーションを持っています..また、これらの「都市」は、データベースの関連する都市フィールドにも接続されています。

私のアプリが行っていることは、コアの場所で現在の場所をクエリし、経度と緯度の値を取得してから、データベースから最も近い場所を見つけることです。

結果は非常に正確である必要はありません (都市を一致させたいだけです) ので、最も近い点を見つけるために斜辺の式を使用したいと思います。

closest city in db: min((x1-x2)^2 +(y1-y2)^2)^(1/2)

x1, y1: lon and lat for user
x2, y2: lon and lat for points in database. 

ms-sql または sqlite データベースを使用していた場合、簡単にクエリを作成できましたが、コア データに関しては、アイデアがありません。

すべてのデータをフェッチしてメモリをいっぱいにしたくないので、この式をすべてのフィールドに集計したくないので、クエリを作成してデータベースから結果を取得する方法はありますか?

この問題を考えすぎて、簡単な解決策を見逃していませんか?

4

3 に答える 3

1

これは、Core Data に関するよくある質問に直接関連しています。

Objective C を使用して緯度と経度に基づいて周辺の郊外を検索する

必要なポイント (最小緯度/経度、最大緯度/経度) の周囲の境界ボックスを計算し、それらの値に対して NSPredicate を使用して、ボックス内のすべてを見つけます。そこから、返された結果に対して距離計算を行い、それらを並べ替えることができます。

複数の距離で検索できるように設定することをお勧めします。その後、都市が 10 マイル、100 マイルなどの範囲内にあるかどうかを確認できます。1 つ以上の結果が返されるまで、バウンディング ボックスをゆっくりと広げていきます。

于 2013-12-20T15:49:47.277 に答える
0

NSPredicate を使用して、フィルターとして機能する検索基準を定義します。これがどの程度最適化されているか、すべてのレジスタをプルするかどうかはわかりませんが、coreData には検索を最適化する何らかのインデックス作成メカニズムがあると想定しています。

このドキュメントをご覧いただけます

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html

という名前のセクションを確認してください

特定のオブジェクトの取得

于 2013-12-20T15:39:00.893 に答える