2016-04-13 3 views
1

Ich entwerfe eine Android-App, die mehrere Markierungen auf der Karte zeigen soll. Ich kann das leicht machen. Mein Problem ist, dass ich alle Markierungen um meine Position herum zeigen muss und die CameraPosition muss in meiner Position fokussiert sein. Ich kann sie einfach einzeln machen, aber was ich brauche ist, sie zusammen zu zeigen, meinen Standort in der Mitte der Karte und die Markierungen um meinen Standort herum. Irgendeine Idee, wie kann ich das erreichen? Danke im Voraus!Stelle CameraPosition auf meinen Standort ein, zeige aber auch andere Marker an

+0

Zoomen Sie Ihre Karte nicht, wenn Sie die Kameraposition einstellen –

Antwort

2

Stellen Sie Ihren Zoom auf eine höhere Ebene ein, damit er auszoomen und mehr von Ihrer Karte um Ihren aktuellen Standort sehen kann.

CameraPosition cameraPosition = new CameraPosition.Builder() 
           .target(yourLatLng).zoom(12).build(); 
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
+0

Ich schätze, das ist der Ansatz, den ich verwenden werde. Ich dachte, es könnte eine Möglichkeit geben, das Ziel auf LatLngBounds zu setzen. Danke für die Antwort – ErenisR

+0

Sie können meine Antwort oder Abstimmung zumindest akzeptieren, wenn es hilft. Vielen Dank! – ljpv14

2

Die Funktionalität, die Sie benötigen, ist alle ausgewählten Markierungen auf den Karten zu halten und es sollte zu einem einzigen Zeitpunkt zu sehen sein. Sie müssen alle diese Punkte im sichtbaren Bereich mit myLlocation (Ihrem aktuellen Standort) immer in der Mitte des Bildschirms behalten.

  • Zuerst halten Sie Ihre MyLocation innerhalb einer latlng Variable und alle anderen latlng, die innerhalb der Grenzen in einem anderen Arraylist von LatLng sein sollen. Definieren Sie auch einige Variablen, um den Vorgang zu verfolgen.

    LatLng myLocation=null; 
    ArrayList<LatLng> latlngs = null; // the arraylist of other latlng; 
    boolean are_all_inside_viewport = false; 
    float current_zoom = googleMap.getCameraPosition().zoom; 
    //initialise these variables myLocation and latlngs; 
    
  • animieren Sie dann Ihre Kamera zu MyLocation, die in der Mitte der Karte platziert werden. Setzen Sie hier eine niedrige Zoomstufe.

    CameraPosition cameraPosition = new CameraPosition.Builder() 
          .target(myLocation) 
          .zoom(14) 
          .build(); 
    
    googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
    
  • nun für jedes Zimmer in der Arraylist latlng von sie sind in der Google Maps-Port anzuzeigen. Wenn sie drin sind, dann ist es in Ordnung. Wenn nicht, verringern Sie die Zoomstufe der Karten und animieren Sie die Kamera erneut.

    while (!are_all_inside_viewport) { 
         are_all_inside_viewport = true; 
         for (LatLng latLng : latlngs) { 
          if (!bounds.contains(latLng)) { 
           are_all_inside_viewport = false; 
           break; 
          } 
         } 
    
         bounds = googleMap_local.getProjection().getVisibleRegion().latLngBounds; 
    
         cameraPosition = new CameraPosition.Builder() 
           .target(myLocation) 
           .zoom(current_zoom - 1) 
           .build(); 
         googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
        } 
    

    werden, sind diese gehen in der Ansichtsfenster, bis alle latlng innerhalb der Arraylist für jede latlng auf Überprüfung.

Ich hoffe, diese Antwort hilft Ihnen.

+0

Nun, das ist es, was ich brauche, mein aktueller Standort, um in der Mitte zu sein, und andere Marker um ihn herum. – ErenisR

+0

Haben Sie all das bereit? –

+0

Siehe meine bearbeitete Antwort @ user3419782 –

Verwandte Themen