1

API から場所を読み込むマップ アプリに取り組んでいます。ユーザーがかなりの距離をパンすると、API が x キロメートル以内の場所を照会し、注釈が置き換えられるように、コードを作成しました。

私は iOS 用にコーディングしていますが、これはどのマップ アプリにも当てはまります。

この時点ですべてが機能しますが、重要な距離とは何か、ロードする場所の半径についてのアルゴリズムには不満があります。私が考えているいくつかのこと -

  • マップ ビューは、幅より高さが長い長方形です。
  • x キロメートル以内の場所を読み込むと、円が表示されます
  • ユーザーはズームインおよびズームアウトできます
  • ユーザーは北、南、東、西にパンできます
  • ビューを少し変更するたびに再読み込みすると、ユーザー エクスペリエンスが低下します。しきい値が必要です。
  • ユーザーがリロードする前にある程度パンおよびズームできるように、ビューの外側に位置が必要です。
  • 円の内側に長方形がある場合、ユーザーが上下にパンすると、左右にパンするよりも早く円の端に到達します。
  • リソースを節約するために、縮小しすぎるとすべての場所が表示されるわけではないため、拡大すると新しい場所が表示される場合があります
  • ズームアウトすると、新しい場所が表示されます

どのようなアルゴリズムを実行する必要があるかについて何か提案はありますか? 次の変数を決定しようとしています-

  • 指定された画面幅をロードする場所の半径
  • スポットをリロードする前の変更 (パンとズーム) のしきい値
4

1 に答える 1

1

ラスター マップの一般的な解決策は、画像をタイルに分割し、視聴者がいる場所の「近く」にあるものを読み込むことです。そこにあるものを削除せずに、パン/ズーム後に追加のポイントをロードすることにより、データに対してこれを行うことができます。新しいポイントを取得するためのコードがバックグラウンド スレッドで実行されている場合、ユーザーは気付かず、すべてのパンで常にそれらのデータが既にあるスポットに行き着き、ユーザーがそれを見ている間、さらにデータをロードします。彼らの次のパンのために。1回の移動でどこまで行けるかを計算する必要があります。経度は簡単です。経度の差 (つまり、左右) を取るだけで、指をドラッグしてマップをドラッグできる距離を計算できます。したがって、マップ ビューの幅が 1 度の場合、マップの右に 1 度、マップの左に 1 度のデータが既にあるはずです。緯度は、赤道から離れると変化するため、難しくなります。上から下まで、スコットランドを見ている場合とは異なる測定値があります. 原理は同じですが。ユーザーが 1 回のドラッグでどこまでスクロールできるかを計算し、そのデータをプリロードします。3x3 グリッドを電話パッドのように考えてみてください。マップ ビューは 5 ボタンにあり、すべてのサラウンド ボタンをプリロードする必要があります。マップビューは横にドラッグされるため、画面上のデータを失うことなく、それを超える追加の正方形にロードする必要がある 6 つの正方形が表示されます。右、右上、右上、右下の 3 つの呼び出しを行うことができます。または、1 回の呼び出しを実行して、1 回の呼び出しですべての新しいデータを取得します。スコットランドを見直す。原理は同じですが。ユーザーが 1 回のドラッグでどこまでスクロールできるかを計算し、そのデータをプリロードします。3x3 グリッドを電話パッドのように考えてみてください。マップ ビューは 5 ボタンにあり、すべてのサラウンド ボタンをプリロードする必要があります。マップビューは横にドラッグされるため、画面上のデータを失うことなく、それを超える追加の正方形にロードする必要がある 6 つの正方形が表示されます。右、右上、右上、右下の 3 つの呼び出しを行うことができます。または、1 回の呼び出しを実行して、1 回の呼び出しですべての新しいデータを取得します。スコットランドを見直す。原理は同じですが。ユーザーが 1 回のドラッグでどこまでスクロールできるかを計算し、そのデータをプリロードします。3x3 グリッドを電話パッドのように考えてみてください。マップ ビューは 5 ボタンにあり、すべてのサラウンド ボタンをプリロードする必要があります。マップビューは横にドラッグされるため、画面上のデータを失うことなく、それを超える追加の正方形にロードする必要がある 6 つの正方形が表示されます。右、右上、右上、右下の 3 つの呼び出しを行うことができます。または、1 回の呼び出しを実行して、1 回の呼び出しですべての新しいデータを取得します。マップ ビューは 5 ボタンにあり、すべてのサラウンド ボタンをプリロードする必要があります。マップビューは横にドラッグされるため、画面上のデータを失うことなく、それを超える追加の正方形にロードする必要がある 6 つの正方形が表示されます。右、右上、右上、右下の 3 つの呼び出しを行うことができます。または、1 回の呼び出しを実行して、1 回の呼び出しですべての新しいデータを取得します。マップ ビューは 5 ボタンにあり、すべてのサラウンド ボタンをプリロードする必要があります。マップビューは横にドラッグされるため、画面上のデータを失うことなく、それを超える追加の正方形にロードする必要がある 6 つの正方形が表示されます。右、右上、右上、右下の 3 つの呼び出しを行うことができます。または、1 回の呼び出しを実行して、1 回の呼び出しですべての新しいデータを取得します。

もちろん、新しいデータを取得するための呼び出しが少し遅く、回答を受け取る前にユーザーが 2 回パンする可能性がある場合は、より大きな領域を取得する必要があるかもしれません。したがって、5x5 グリッドの中心にいて、ビューが端に向かって移動すると、別の行または列を取得する必要があります。

それが役立つことを願っています。

于 2013-06-04T20:54:59.093 に答える