32

新しいGoogleMapsAndroidAPIv2を使用するように既存のAndroidアプリを更新しています。マップに追加したいマーカーが約2500あります。古いバージョンのAPIでは、2500個のマーカーがある場合、マップの応答性がひどいことがわかったため、マップの現在の表示領域にあるマーカーを追加するだけで回避する必要がありました。

新しいAPIを使用すると2500マーカーが高速になることを期待していましたが、Nexus 4でもひどいので、クラスタリングを行うためのオプションはありません。

だから私の質問:特定の緯度/経度のポイントが地図の表示領域内に含まれているかどうかをどのように判断できますか?

ドキュメントでVisibleRegionを見てきましたが、今のところ運がありません。どんな助けでも大歓迎です。

*補足:iOS MKMapView(googleマップまたはAppleマップ)の2500マーカーは、iPhone3gsでも非常にスムーズで応答性が高くなっています。最新の最高のハードウェアを使用しても、Androidでなぜこれほど遅いのかまだ理解できません。

4

2 に答える 2

54

さて、さらにいくつかのことを試した後、特定のポイントが表示領域にあるかどうかを判断する方法を理解しました。これは非常に簡単です。

//Note: this.mMap is an instance of GoogleMap

LatLngBounds bounds = this.mMap.getProjection().getVisibleRegion().latLngBounds;

LatLng markerPoint = new LatLng(item.getLatitude(), item.getLongitude());

if(bounds.contains(markerPoint))
{
    this.mMap.addMarker(new MarkerOptions(...));    
}

* GoogleMapの投影を取得するのはコストのかかる操作であるため、アイテムの長いリストをループしてマーカーを作成し、私のようにそれらをマップに追加する場合は、ループする前に1回だけ投影を取得してください。

アップデート

マップの表示領域にあるマーカーを表示し、画面から移動するときにマーカーを非表示にする方法を詳しく説明したブログ投稿を作成することにしました。これは完璧な解決策ではありませんが、何千ものマーカーを表示していて、ユーザーがそれらすべてを同時に表示する必要がないことがわかっている場合(ズームアウトしない限り)、これはかなり良い回避策です。

Google Maps AndroidAPIV2を使用した画面マーカーの非表示と表示

于 2012-12-04T22:45:55.593 に答える
13

Androidのクラスタリングソリューションについては、Android Maps Extensionsを試してみてください: https ://github.com/mg6maciej/android-maps-extensions

于 2013-03-18T19:37:30.873 に答える