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.


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

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

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


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.


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.


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);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.