2010-11-10 17 views
5

Witam Chciałbym, aby moja mapa powiększyła się do mojej bieżącej lokalizacji. Ta bieżąca lokalizacja jest obecnie określana przez wysyłanie lat i długich do emulatora. Jak mógłbym to zrobić?W jaki sposób zmienić moją mapę google w moją bieżącą lokalizację?

Mój obecny mapactivity.java

public class MapsActivity extends MapActivity { 

    private MapView mapView; 
    private MyLocationOverlay myLocOverlay; 
    MapController mc; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mapactivity); 
     initMap(); 
     initMyLocation(); 


    } 

    /** 
    * Initialise the map and adds the zoomcontrols to the LinearLayout. 
    */ 
    private void initMap() { 
     mapView = (MapView) findViewById(R.id.mapView); 

     View zoomView = mapView.getZoomControls(); 
     LinearLayout myzoom = (LinearLayout) findViewById(R.id.zoom); 
     myzoom.addView(zoomView); 
     mapView.displayZoomControls(true); 
     mapView.getController().setZoom(17); 
    } 

    /** 
    * Initialises the MyLocationOverlay and adds it to the overlays of the map 
    */ 
    private void initMyLocation() { 
     myLocOverlay = new MyLocationOverlay(this, mapView); 
     myLocOverlay.enableMyLocation(); 
     mapView.getOverlays().add(myLocOverlay); 

    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     return false; 
    } 

Dziękuję.

Odpowiedz

3

Musisz zaimplementować onLocationChanged(). W moim kodzie dodałem też tutaj nakładki. Jako minimum trzeba setCenter() z bieżącej lokalizacji

public void onLocationChanged(Location location) { 

    List<Overlay> overlays = mapView.getOverlays(); 
    myLocOverlay = new MyLocationOverlay(this, mapView); 
    overlays.add(myLocOverlay); 
    myLocOverlay.enableMyLocation();* 

    // definitely need what's below 
    int lat = (int) (location.getLatitude() * 1E6); 
    int lng = (int) (location.getLongitude() * 1E6); 
    GeoPoint point = new GeoPoint(lat, lng); 
    mc.setCenter(point); 
    mapView.invalidate(); 

} 
+0

To nie działa. Po wysłaniu wartości długich i długich znacznik na mapie porusza się, ale nie przesuwa się automatycznie do znacznika. – User358218

+0

Nie wiedziałem, że masz znacznik. To sprawia, że ​​centrum mapy do bieżącej lokalizacji. Jeśli pierwsza odpowiedź spełnia to, czego potrzebujesz, trzymaj się jej. – NickT

+0

Nie, nie mam znacznika. Ale mój kod umieszcza nakładkę, kiedy wysyłam łata i długo. Chciałbym się dowiedzieć, jak sprawić, by telefon z Androidem ładował moją aktualną lokalizację po uruchomieniu programu. – User358218

9

warto dodać to na końcu kodu initMyLocation:

controller = mapView.getController(); 
mMyLocOverlay.runOnFirstFix(new Runnable() { 
      public void run() { 
       controller.setZoom(17); 
       controller.animateTo(mMyLocOverlay.getMyLocation()); 
      } 
     }); 

Można usunąć tę linię od wybranej metody initMap:

mapView.getController().setZoom(17); 

Daj mi znać, czy działa

Ger

+0

To działa. Dzięki. – User358218

+1

Po refleksji: To jest niebezpieczne, ponieważ modyfikujesz interfejs użytkownika, a nie w tym wątku. Zobacz, jak owijać go w coś takiego: http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29 – Ryan

1

Skoro masz swoje dane lokalizacji już można utworzyć długość i szerokość geograficzną Object/konstrukcji i wykorzystać tę linię bezpośrednio na obiekcie mapy:

map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15.0f)); 

Używam Androida Google Maps API v2

Powiązane problemy