Jak ustawić domyślną lokalizację i poziom powiększenia dla Google Map API v2?

91

Kiedy moja mapa jest wyświetlana, zawsze zaczyna się w określonym miejscu (w pobliżu Afryki).

Następnie używam następującego kodu, aby wyśrodkować mapę do wybranej lokalizacji.

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

Moje pytanie brzmi, czy mogę ustawić domyślną lokalizację i poziom powiększenia, zanim mapa się wyświetli?

Ponieważ nie chcę, aby moi użytkownicy widzieli animację na początku.

Dzięki.

dong221
źródło
Ta kwestia pomogła… Nawet jeśli lokalizacja nie jest włączona… animateCamera wskazuje gdzieś w Afryce… dzierżona! ... moveCamerajest najlepszym rozwiązaniem na to
Devrath
3
hahahhaha ....... + 1 za to pytanie, zapytałeś moje serce. : D ... "zawsze zaczyna się w określonym miejscu (w pobliżu Afryki)" ........ rofll ..... mimo to dzięki.
akash89
2
@ akash89 Zaczyna się od LatLng (0.0,0.0) zgodnie z oczekiwaniami: google.com/maps/@0,0,5z Nie jestem pewien, co sprawia, że tarzasz się po podłodze ze śmiechu (jeśli się nie mylę), ale Cieszę się, że jesteś szczęśliwy :)
Navid Vafaei

Odpowiedzi:

175

możesz użyć tego do bezpośredniego powiększenia bez animacji:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );
Moh Sakkijha
źródło
Dzięki, właśnie tego potrzebuję
:)
mam minimalną szerokość / długość geograficzną i maksymalną szerokość / długość geograficzną, to jak ustawić ???
Pratik Butani
możesz dodać nowe pytanie, abym mógł opublikować pełną odpowiedź, ale w skrócie będziesz musiał użyć LatLngBounds.Builder do zbudowania granic i wykorzystania tego.
Moh Sakkijha
1
@Saksak Mój problem polega na tym, że czekam na GPS, żeby złapać MyLocation, abym mógł przesunąć i powiększyć mapę do lokalizacji użytkownika. Ponieważ mapa jest zainicjowana w XML, nie mogę dowiedzieć się, jak zapobiec skoku. Idealnie byłoby ukryć mapę, dopóki nie MyLocationzostanie znaleziona, a następnie ją pokażę.
theblang
kiedy umieściłem mapę, dało mi to błąd i powiedział, żebym utworzył zmienną „map”. czy można importować czy coś?
Hanzawa Naoki
86

Spójrz na dokumentację tutaj:

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

Sposób, w jaki można to zrobić, różni się nieco w zależności od tego, czy dodajesz mapę za pomocą XML, czy programowo. Jeśli używasz XML, możesz to zrobić w następujący sposób:

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

Jeśli robisz to programowo, możesz wykonać następujące czynności:

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));
Anthony
źródło
1
Dobra odpowiedź. Właściwie ten jest bardziej odpowiedni dla tego pytania.
MightySeal
2
w xml pojawia się błąd lintaUnexpected namespace prefix "map" found for tag fragment
Muhammad Babar,
Jeśli nawet z xmlns: map = "schemas.android.com/apk/res-auto" nadal masz ten sam błąd. Spróbuj dodać to xmlns: tools = " schemas.android.com/tools " i użyj "tools:" zamiast "map:"
Guillaume Ilitch Tchaïkovsky
Link do dokumentacji ze wszystkimi opcjami: developers.google.com/maps/documentation/android-sdk/ ...
Albert Vila Calvo,
szukał atrybutów układu, działa idealnie. dzięki
Abhishek Garg
5

Na wypadek, gdybyś chciał załadować program Google Mapw dowolnym początkowym miejscu Location, możesz użyć tego fragmentu kodu,

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

Dodaj ten fragment kodu dla layout

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

Spowoduje to załadowanie bezpośrednio GoogleMapw konkretnym miejscu, Locationczyli initialLatLng.

Jaydipsinh Zala
źródło
3

Utworzyłem uchwyt SupportMapFragmenti ustawiłem go visibilityna View.INVISIBLEużywanie SupportMapFragment.getView().setVisibility(). Następnie w onLocationChangedwywołaniu zwrotnym, które implementuje moja klasa, sprawdzam, czy INVISIBLEi ustawiam wartość VISIBLEtrue. Eliminuje to skoki, które widzisz podczas ładowania, jednocześnie umożliwiając dynamiczną inicjalizację pozycji początkowej. W moim przypadku centruję kamerę wokół lokalizacji użytkownika, więc onLocationChangedjest wywoływana natychmiast z powodu setMyLocationEnabled(true).

Twoje wymagania mogą być inne, ale tak czy inaczej, musisz po prostu ustawić widoczność, INVISIBLEa następnie znaleźć dobre miejsce do ustawienia VISIBLEpo załadowaniu odpowiednich danych.

theblang
źródło
2

możesz użyć bezpośrednio CameraUpdate używając statycznego latlong

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
Mahesh Gawhane
źródło