GoogleマップAPI v2のデフォルトの場所とズームレベルを設定するにはどうすればよいですか?


88

私の地図が示すとき、それは常に固定された場所(アフリカの近く)から始まります。

次に、次のコードを使用して、マップを必要な場所の中央に配置します。

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));

私の質問は、地図が表示される前にデフォルトの場所とズームレベルを設定できるということです。

ユーザーにアニメーションを最初から見てほしくないからです。

ありがとう。


この質問は役に立ちました....場所が有効になっていない場合でも... animateCameraはアフリカのどこかを指しています... ...これmoveCameraは最善の解決策です
Devrath、

3
はははは…………この質問の+1、あなたは私の心を尋ねました。:D ... "それは常に固定された場所(アフリカの近く)から始まります" ........ rofll .....それでも感謝します。
akash89

2
@ akash89予想どおりLatLng(0.0,0.0)から始まります:google.com/maps/@0,0,5z何があなたを床に転がらせるのかはわかりません(私が間違っていなければ)。私はあなたが幸せであることを嬉しく思います:)
Navid Vafaei

回答:


173

これを使用して、アニメーションなしで直接ズームできます。

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );

ありがとう、それは私が必要としているものです:)
dong221

私は最小の緯度/経度と最大の緯度/経度を持っていて、どのように設定するのですか?
Pratik Butani 2013

そのための新しい質問を追加して、完全な回答を投稿することができますが、簡単に言えば、LatLngBounds.Builderを使用して境界を構築し、それを使用する必要があります。
Moh Sakkijha 2013

1
@Saksak私の問題はMyLocation、ユーザーの場所にマップを移動およびズームできるように、GPSがグラブするのを待っていることです。マップはXMLで初期化されているため、ジャンプが発生しないようにする方法がわかりません。理想的にMyLocationは、見つかるまで地図を非表示にしてから表示します。
theblang 2013年

マップを配置するとエラーが発生し、変数「マップ」を作成するように言われました。インポートすることは可能ですか?
半沢直樹

85

こちらのドキュメントをご覧ください。

https://developers.google.com/maps/documentation/android-api/map#configure_initial_state

その方法は、マップをXML経由で追加するか、プログラムで追加するかによって若干異なります。XMLを使用している場合は、次のように実行できます。

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"/>

プログラムで行う場合は、次の操作を実行できます。

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));

1
いい答えだ。実際、これはこの質問により適しています。
MightySeal 14

2
xmlでlintエラーが発生するUnexpected namespace prefix "map" found for tag fragment
Muhammad Babar 2014

xmlns:map = "schemas.android.com/apk/res-auto"を使用しても、同じエラーが発生する場合があります。このxmlns:tools = " schemas.android.com/tools " を追加して、 "map:"の代わりに "tools:"を使用してみてください
Guillaume IlitchTchaïkovskyMay

すべてのオプションを持つドキュメントへのリンク:developers.google.com/maps/documentation/android-sdk/...
アルバート・ビラ・カルボ

5

プログラムGoogle Mapで初期にロードしたい場合に備えてLocation、このコードを使用できます。

FragmentManager fm = getFragmentManager(); // getChildFragmentManager inside fragments.
CameraPosition cp = new CameraPosition.Builder()
                    .target(initialLatLng) // your initial co-ordinates here. like, LatLng initialLatLng
                    .zoom(zoom_level)
                    .build();
SupportMapFragment mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().camera(cp));
fm.beginTransaction().replace(R.id.rl_map, mapFragment).commit();

このコードを追加します layout

<RelativeLayout
       android:id="@+id/rl_map"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" />

これはGoogleMap特定のLocation場所、つまり、initialLatLngで直接ロードされます。


3

へのハンドルを作成し、SupportMapFragmentそれvisibilityView.INVISIBLEusingに設定しましたSupportMapFragment.getView().setVisibility()。次に、onLocationChangedクラスが実装するコールバックで、私がかどうかを確認INVISIBLEVISIBLE、trueに設定します。これにより、開始位置を動的に初期化しながら、ロード時に表示されるジャンプを取り除くことができます。私の場合、ユーザーの場所を中心にカメラを中心に配置しているため、のためにonLocationChangedすぐに呼び出されsetMyLocationEnabled(true)ます。

要件は異なる場合がありますが、どちらの方法でも、可視性をINVISIBLEに設定VISIBLEし、適切なデータが読み込まれた後に設定するのに適した場所を見つける必要があります。


2

あなたは静的latlongを使用して直接CameraUpdateを使用することができます

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.