2000 を超える場所を含む KML ファイルがありますが、それを使用すると、すべての場所を読み込むのに 5 分以上かかります。今私の質問は、ローカルの場所から約 5 マイルの場所だけをマップにロードし、ユーザーが必要なときにクリックしてすべての場所を使用できるようにするためのボタンを追加できるかどうかです。
私は趣味のプログラマーであり、解決策が見つからないのを助けてください。
および特定の KML 目印のCLLocation
オブジェクトを作成する必要があります。その後、 を使用してそれらの距離 (メートル単位) を確認できます。1 マイルが 1,609.34 メートルであることから、5 マイルは 8,046.72 メートルになります。currentLocation
placemarkLocation
distanceFromLocation
CLLocation *placemarkLocation = [[CLLocation alloc] initWithLatitude:latitude
longitude:longitude];
if ([placemarkLocation distanceFromLocation:currentLocation] < 8046.72)
{
// add placemark to map
}
else
{
// don't
}
2 つのフォローアップ観察があります。
読み込みプロセスに 5 分かかるとおっしゃいました。私はそれが非常に疑わしく、何か他のことが起こっているのではないかと思います. 笑ったりニヤニヤしたりするために、地図に 2000 個の注釈を追加しましたが、数分ではなく数秒かかりました。遅延の原因を特定するために何らかの診断を行うことをお勧めします。問題が XML 解析などにある場合、マップ生成を最適化しても意味がないからです。診断作業を行って、遅延の実際の原因を特定します。
たとえば、数十または数百メガバイト単位の巨大な KML ファイルをインターネット経由でダウンロードしていることが問題である場合、 を最適化MKMapView
しても全体的なパフォーマンスにはほとんど影響しません。これはランダムな例にすぎませんが、問題の原因を本当に理解していることを確認してください。
iPhone 5 のmy に 2000 個の注釈を追加するMKMapView
のに数秒かかりましたが、明らかに優れた UX ではありません (数秒の遅延の点でも、iPhone の画面では明らかに視覚的に区別できない 2,000 個の注釈を持つという考えも同様です)。 )。5 マイル以内にある目印を取得し、それらすべてを選択するオプションをユーザーに提供することを提案しました。別のアプローチをお勧めします。
この「5 マイルまたはすべて」のロジックをコーディングするのではなく、region
またはvisibleMapRect
でを調べ、MKMapView
その領域または 内にある注釈を表示することをお勧めしますMKMapRect
。または、さらに良いことに、領域内にある 100 個の注釈を表示するだけです。これをregionDidChangeAnimated
ルーチンにフックすると、必要に応じて新しい注釈が取得されます。