[解決済み】Android map v2 zoom to show all markers
質問
の中に10個のマーカーがあります。
GoogleMap
. できるだけズームインして、すべてのマーカーを表示したままにしたいのですが?以前のバージョンでは、以下の方法で実現可能でした。
zoomToSpan()
が、v2 ではどうすればいいのかさっぱりわかりません。さらに、私は見えるようにする必要がある円の半径を知っています。
どのように解決するのですか?
を使用する必要があります。
CameraUpdate
クラスを使用して、(おそらく)すべてのプログラムによるマップの移動を行います。
そのために、まずすべてのマーカーの境界を次のように計算します。
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : markers) {
builder.include(marker.getPosition());
}
LatLngBounds bounds = builder.build();
次に、ファクトリーを使用して動作記述オブジェクトを取得します。
CameraUpdateFactory
:
int padding = 0; // offset from edges of the map in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
最後にマップを移動します。
googleMap.moveCamera(cu);
また、アニメーションが必要な場合は
googleMap.animateCamera(cu);
以上です :)
明確化1
ほとんどすべてのムーブメントメソッドで
Map
オブジェクトがレイアウト処理を通過している必要があります。これを待つには
addOnGlobalLayoutListener
という構文があります。詳細は、この回答や残りの回答へのコメントで確認できます。また
を使用してマップの範囲を設定するための完全なコードです。
addOnGlobalLayoutListener
ここで
.
明確化2
あるコメントで、1つのマーカーに対してこの方法を使用すると、地図のズームが "奇妙な" ズームレベルに設定されるという指摘がありました(私は与えられた場所で利用できる最大ズームレベルだと考えています)。私は、これは予想されたことだと思います。
-
その
LatLngBounds bounds
インスタンスにはnortheast
プロパティに等しいsouthwest
つまり、地球上の面積のうち、このbounds
はちょうどゼロです。(これは論理的なことで、1つのマーカーは面積を持たないからです)。 -
を渡すことで
bounds
をCameraUpdateFactory.newLatLngBounds
のようなズームレベルの計算を要求します。bounds
(面積がゼロ)であれば、マップビュー全体をカバーします。 -
この計算は、実際に紙の上で行うことができます。答えとなる理論上のズームレベルは「+∞」(正の無限大)です。実際には
Map
オブジェクトはこの値をサポートしていないので、与えられた場所で許容されるより合理的な最大レベルに固定されます。
別の言い方をすれば、どのようにすれば
Map
オブジェクトがどのようなズームレベルを選択すべきかを知ることができます。
一箇所
? たぶん、最適な値は20(特定の住所を表す場合)であるべきです。あるいは、11(町を表す場合)。あるいは、6(国を表す場合)かもしれません。APIはそれほど賢くないので、その判断はあなた次第です。
ということは、単純に
markers
が1箇所しかない場合は、どちらかを使用します。
-
CameraUpdate cu = CameraUpdateFactory.newLatLng(marker.getPosition())
- マーカー位置へ移動し、現在のズームレベルはそのままにします。 -
CameraUpdate cu = CameraUpdateFactory.newLatLngZoom(marker.getPosition(), 12F)
- マーカー位置に移動し、ズームレベルを任意に選択した値12に設定します。
関連
-
[解決済み】メソッド 'findViewById(int)' を解決できない。)
-
[解決済み】ビットマップを保存する場所について
-
[解決済み】android.content.res.Resources$NotFoundExceptionの取得:androidにリソースが存在する場合でも例外が発生する。
-
[解決済み] android.support.design.widget.FloatingActionButton クラスの展開に失敗しました。
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] Gradleのエラーです。イベントディスパッチスレッドからの書き込みアクセスは、Android Studioでのみ許可されます。
-
[解決済み] Android M パーミッション : shouldShowRequestPermissionRationale()関数の使用方法について混乱しています。
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] グリッドレイアウトにおけるフリングジェスチャーの検出
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】AndroidのSSL接続でトラストアンカーが見つからない
-
[解決済み】シンボル 'AppCompatActivity' を解決できない。
-
[解決済み] [Solved] Error "File google-services.json is missing from module root folder. これがないとGoogle Services Pluginは機能しません" [重複]。
-
[解決済み】onCreateOptionsMenu(Menu メニュー)とは何ですか?)
-
[解決済み] [Solved] Unsupported method: ベースコンフィグ.getApplicationIdSuffix()
-
[解決済み】Android Studioです。「プロジェクトが C ドライブに作成されている場合、「タスク ':app:mergeDebugResources' の実行に失敗しました。
-
[解決済み] [Solved] java.lang.RuntimeException: アクティビティーのインスタンス化ができません ComponentInfo
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] Xlint:deprecationを使用して再コンパイルする方法
-
[解決済み] Gradle DSL メソッドが見つかりません:'compile()'