Wie lege ich den Standardspeicherort und die Zoomstufe für Google Map API v2 fest?

88

Wenn meine Karte zeigt, beginnt sie immer an einem festen Ort (in der Nähe von Afrika).

Dann verwende ich den folgenden Code, um die Karte an dem gewünschten Ort zu zentrieren.

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

Meine Frage ist, ob ich einen Standardort und eine Zoomstufe festlegen kann, bevor die Karte angezeigt wird.

Weil ich nicht möchte, dass meine Benutzer die Animation am Anfang sehen.

Vielen Dank.

dong221
quelle
Diese Frage hat geholfen ... Auch wenn der Standort nicht aktiviert ist ... animateCamera zeigt auf irgendwo in Afrika ... seltsam! ... moveCameraist die beste Lösung dafür
Devrath
3
hahahhaha ....... + 1 für diese Frage hast du mein Herz heraus gefragt. : D ... "es beginnt immer an einem festen Ort (in der Nähe von Afrika)" ........ rofll ..... danke obwohl.
Akash89
2
@ akash89 Es beginnt wie erwartet mit LatLng (0.0,0.0): google.com/maps/@0,0,5z Ich bin mir nicht sicher, warum du buchstäblich lachend auf dem Boden rollst (wenn ich mich nicht irre), aber Ich bin froh, dass du glücklich bist :)
Navid Vafaei

Antworten:

173

Sie können dies verwenden, um direkt ohne die Animation zu zoomen:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );
Moh Sakkijha
quelle
Danke, es ist genau das, was ich brauche
:)
Ich habe minimale Breite / Länge und maximale Breite / Länge, dann wie zu setzen?
Pratik Butani
Sie können eine neue Frage hinzufügen, damit ich die vollständige Antwort für Sie veröffentlichen kann, aber kurz gesagt, Sie müssen LatLngBounds.Builder verwenden, um Grenzen zu erstellen und diese zu verwenden.
Moh Sakkijha
1
@Saksak Mein Problem ist, dass ich auf das GPS warte, um MyLocationes zu greifen, damit ich die Karte verschieben und auf den Standort des Benutzers zoomen kann. Da die Karte in XML initialisiert ist, kann ich nicht herausfinden, wie der Sprung verhindert werden kann. Im Idealfall würde ich die Karte ausblenden, bis sie MyLocationgefunden ist, und sie dann anzeigen.
Theblang
Als ich die Karte platzierte, gab es einen Fehler und ich wurde aufgefordert, eine Variable 'map' zu erstellen. ist es möglich zu importieren oder so?
Hanzawa Naoki
85

Schauen Sie sich die Dokumentation hier an:

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

Die Vorgehensweise unterscheidet sich geringfügig, je nachdem, ob Sie die Karte über XML oder programmgesteuert hinzufügen. Wenn Sie XML verwenden, können Sie dies wie folgt tun:

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

Wenn Sie dies programmgesteuert tun, können Sie Folgendes tun:

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));
Anthony
quelle
1
Gute Antwort. Eigentlich ist dieser eher für diese Frage geeignet.
MightySeal
2
in xml bekomme ich FlusenfehlerUnexpected namespace prefix "map" found for tag fragment
Muhammad Babar
Wenn auch mit xmlns: map = "schemas.android.com/apk/res-auto" immer noch der gleiche Fehler auftritt. Versuchen Sie, diese xmlns: tools = " schemas.android.com/tools " hinzuzufügen und verwenden Sie "tools:" anstelle von "map:"
Guillaume Ilitch Tchaïkovsky
Link zur Dokumentation mit allen Optionen: developer.google.com/maps/documentation/android-sdk/…
Albert Vila Calvo
5

Nur für den Fall, dass Sie Google Mapbei einer Initiale Locationprogrammgesteuert laden möchten, können Sie diesen Code verwenden.

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

Fügen Sie diesen Code für hinzu layout

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

Dies wird GoogleMapinsbesondere Locationdirekt geladen, dh initialLatLng.

Jaydipsinh Zala
quelle
3

Ich habe ein Handle für erstellt SupportMapFragmentund es visibilityauf View.INVISIBLEusing gesetzt SupportMapFragment.getView().setVisibility(). Dann onLocationChangedüberprüfe ich in dem Rückruf, den meine Klasse implementiert, ob INVISIBLEund setze auf VISIBLEif true. Dadurch wird das Springen, das Sie unter Last sehen, beseitigt, und Sie können die Startposition dynamisch initialisieren. In meinem Fall zentriere ich die Kamera um den Standort des Benutzers, wird also onLocationChangedsofort wegen angerufen setMyLocationEnabled(true).

Ihre Anforderungen mögen unterschiedlich sein, aber in beiden Fällen müssen Sie nur die Sichtbarkeit einstellen INVISIBLEund dann einen guten Ort zum Festlegen finden, VISIBLEnachdem Ihre entsprechenden Daten geladen wurden.

theblang
quelle
2

Sie können direkt CameraUpdate mit statischem Latlong verwenden

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
Mahesh Gawhane
quelle