2012-02-10 11 views
1

こんにちは私のアプリはうまく動作しています。注釈は別のplistsの複数の異なるマップに読み込まれます。表示されている注釈の数の制限

私の問題は、私のplistの1つに約5000の注釈があり、地図表示に注釈を表示するのに約20秒かかります。

現在の場所の半径20kmと言われるように読み込まれた注釈の量をおそらく制限する方法はありますか?

これにより、読み込み時間が短縮されますか?

私は基本的にすべてのことをやり直す必要はありません。私は基本的にそうしているので、plistは私が持っているものです。

+0

大規模なplistをより小さな領域をカバーする小さなものに分解することが私の考えであると思います。現在の場所に基づいて、現在の場所またはその近くのplistだけをロードします。また、 "Xcode"は単なるIDEであり、IDEに関する問題ではありません。タグを「ios」に更新しました。 – Anna

+0

途中のように聞こえるアンナに感謝します。したがって、特定の経度と緯度の間の領域に基づいて特定のplistを読み込むためにifステートメントを設定する必要がありますか?オーストラリアに7つの州があり、私は7つの声明を設定すべきだと言いますか? –

答えて

1

私が示唆している選択肢は、plistsにとどまりたい場合は、大きなplistを小さな領域をカバーする小さなものに分割することです。

オーストラリアの7州に分割すると、必要なパフォーマンスが得られる場合は問題ありません。しかし、私は代わりに、それぞれが一定のN度の角度をカバーする小さな領域(すべて長方形)を作成します。 Nは小さすぎてはいけませんが、大きすぎてはいけません(データを表示する現在の場所からどのくらい離れているかによって異なります)。

たとえば、あなたがこのような16件の地域(それは平方数である必要はありません)に単一のplistを破ることができます:

  North 

     A B C D 
West E F G H East 
     I J K L 
     M N O P 

     South 

plistの「」と言う緯度のための注釈データが含まれています012〜50および51およびLon 100〜110.
Plist「B」は、Lat 50〜51およびLon 110〜120の注釈データを含みます。
Plist「E」は、Lat 49〜50およびLon 100〜110の注釈データを含みます

私はまた、アプリケーションが特定の座標がどのplistにあるのか、そのplistの隣人が何であるかを把握させる追加の「インデックス」plistを持っています。アプリケーションは、現在の場所が地域の端に近い場合に、現在の場所のplistおよびその隣人から注釈データを読み取ることができます。

インデックスのplistの構造は次のようになります。

PlistName NWCoordinate SECoordinate Neighbors 
A   51,100  50,110  B, E, F 
F   50,110  49,120  A, B, C, E, G, I, J, K 

インデックスのplistは、アプリの起動時に一度読まれることになります。アプリは、現在の場所を持っていたら(あるいは、それはかなり十分に変化するたびに)

その後は、アプリは次の操作を行います:

  • マップから既存の注釈を削除します。
  • インデックスを使用して、新しいアノテーションを読み込むplistを特定します。現在の位置が49.25,112.3であるとします。インデックスを使用すると、アプリはF plistとその近傍を何らかの配列にロードします(一度に1つずつマップに直接は移動しません)。
  • addAnnotationsを使用して、配列内のアノテーションをワンショットで追加します。
1

5,000ポイントはそれほど多くありません。私は100,000ポイントのデータベースを持っていますが、それよりもかなり高速です(私はMapKitを使用していません)。 20秒かかる場合は、各マーカーに何らかの種類のネットワークトラフィックを行わなければなりませんか?

あなたのplistには各マーカーの緯度/経度が含まれていますか?その場合は、マップ上のマーカーごとにCLLocationオブジェクトを作成し、マップの中心にはCLLocationオブジェクトを作成し、次に[mapCentre distanceFromLocation:markerLocation]を使用して、中心からマーカーまでの距離を計算できます。

マップ上にないものはすべて削除してください。あなたは良いことがあります。

plistを小さなファイルに分割したい場合は、その場所で分割します。たとえば、125.1/-19.1で始まる緯度/経度のマーカーはすべて単一のファイルになります。

オーストラリアで働いている私の経験は、メルボルンのような都市は非常に狭い地域にたくさんのものがありますが、国の残りはかなり空です。だから、小さなものに分割するのは難しいです。

また、Instrumentsの「Time Profile」機能を使用してアプリを実行し、実際に何が長くかかるのか調べてください。これはXcodeのProduct -> Profileメニュー項目です。チュートリアルでは、オンラインで使用する方法がたくさんあります。