Bagaimana cara mengatur lokasi default dan tingkat Zoom untuk google map api v2?


91

Saat peta saya muncul, itu selalu dimulai di lokasi tetap (dekat Afrika).

Kemudian, saya menggunakan kode berikut untuk memusatkan peta ke lokasi yang saya inginkan.

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

Pertanyaan saya adalah, apakah saya dapat menyetel lokasi default dan tingkat zoom sebelum peta ditampilkan?

Karena saya tidak ingin pengguna saya melihat animasi di awal.

Terima kasih.


Qustion ini membantu .... Bahkan jika lokasi tidak diaktifkan ... animateCamera menunjuk ke suatu tempat di Afrika ... heran! ... moveCameraadalah solusi terbaik untuk ini
Devrath

3
hahahhaha ....... + 1 untuk pertanyaan ini, kamu mengajakku keluar. : D ... "itu selalu dimulai di lokasi tetap (dekat Afrika)" ........ rofll ..... terima kasih meskipun.
akash89

2
@ akash89 Dimulai dari LatLng (0.0,0.0) seperti yang diharapkan: google.com/maps/@0,0,5z Saya tidak yakin apa yang membuat Anda berguling-guling di lantai tertawa secara harfiah (jika saya tidak salah), tapi Saya senang Anda bahagia :)
Navid Vafaei

Jawaban:


175

Anda dapat menggunakan ini untuk memperbesar secara langsung tanpa animasi:

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

Terima kasih, itu yang saya butuhkan
:)

Saya memiliki garis lintang / garis bujur minimum dan garis lintang / garis bujur maksimum lalu bagaimana cara mengaturnya ???
Pratik Butani

Anda dapat menambahkan pertanyaan baru untuk itu sehingga saya dapat memposting jawaban lengkap untuk Anda, tetapi singkatnya Anda harus menggunakan LatLngBounds.Builder untuk membangun batasan dan menggunakannya.
Moh Sakkijha

1
@Saksak Masalah saya adalah saya menunggu GPS untuk mengambil MyLocationsehingga saya dapat memindahkan dan memperbesar peta ke lokasi pengguna. Karena peta diinisialisasi dalam XML, saya tidak tahu bagaimana mencegah terjadinya lompatan. Idealnya, saya akan menyembunyikan peta sampai MyLocationditemukan kemudian menunjukkannya.
theblang

ketika saya meletakkan peta itu memberi saya kesalahan dan menyuruh saya membuat variabel 'peta'. apakah mungkin untuk mengimpor atau sesuatu?
Hanzawa Naoki

86

Lihat dokumentasinya di sini:

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

Cara melakukannya sedikit berbeda bergantung pada apakah Anda menambahkan peta melalui XML atau secara terprogram. Jika Anda menggunakan XML, Anda dapat melakukannya sebagai berikut:

<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"/>

Jika Anda melakukannya secara terprogram, Anda dapat melakukan hal berikut:

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

1
Jawaban yang bagus. Sebenarnya yang ini lebih cocok untuk pertanyaan ini.
MightySeal

2
di xml saya mendapatkan kesalahan lintUnexpected namespace prefix "map" found for tag fragment
Muhammad Babar

Bahkan jika dengan xmlns: map = "schemas.android.com/apk/res-auto" Anda masih memiliki kesalahan yang sama. Coba tambahkan xmlns ini: tools = " schemas.android.com/tools " dan gunakan "tools:" alih-alih "map:"
Guillaume Ilitch Tchaïkovsky


sedang mencari atribut tata letak, bekerja dengan sempurna. terima kasih
Abhishek Garg

5

Untuk berjaga-jaga jika Anda ingin memuat Google Mapdi awal secara Locationterprogram maka Anda dapat menggunakan bagian kode ini,

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();

Tambahkan bagian kode ini untuk layout

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

Ini akan dimuat GoogleMappada khususnya Locationsecara langsung yaitu initialLatLng.


3

Saya membuat pegangan SupportMapFragmentdan mengaturnya visibilityuntuk View.INVISIBLEdigunakan SupportMapFragment.getView().setVisibility(). Kemudian, dalam onLocationChangedcallback yang diimplementasikan oleh kelas saya, saya memeriksa apakah INVISIBLEdan menyetel ke VISIBLEjika benar. Ini menghilangkan lompatan yang Anda lihat saat memuat sambil memungkinkan Anda untuk menginisialisasi posisi awal secara dinamis. Dalam kasus saya, saya memusatkan kamera di sekitar lokasi pengguna, jadi onLocationChangeddipanggil segera karena setMyLocationEnabled(true).

Persyaratan Anda mungkin berbeda, tetapi bagaimanapun juga, Anda hanya perlu mengatur visibilitas INVISIBLEdan kemudian menemukan tempat yang baik untuk mengatur VISIBLEsetelah data yang sesuai telah dimuat.


2

Anda dapat menggunakan CameraUpdate langsung menggunakan latlong statis

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.