2010-11-10 12 views
5

Hola me gustaría hacer que mi mapa se acerque a mi ubicación actual. Esta ubicación actual se define actualmente enviando lat y long al emulador. ¿Cómo podría hacer esto?¿Cómo haré que mi mapa de Google haga zoom en mi ubicación actual?

Mi mapactivity.java actual

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

Gracias.

Respuesta

3

Necesita implementar onLocationChanged(). En mi código también he agregado las superposiciones aquí. Como mínimo es necesario setCenter() con su ubicación actual

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

Esto no funciona. Después de enviar los valores lat y long, el marcador en el mapa se mueve pero no se mueve automáticamente al marcador. – User358218

+0

No sabía que tenías un marcador. Esto hace que el mapa se centre en su ubicación actual. Si la primera respuesta hace lo que necesita, entonces quédese con ella. – NickT

+0

No, no tengo un marcador. Pero mi código coloca una superposición cuando envío el lat y mucho más. Lo que me gustaría saber es cómo haré que el teléfono Android cargue mi ubicación actual cuando arranque el programa. – User358218

9

Trate de añadir esto al final de su código initMyLocation:

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

Usted puede eliminar esta línea de su método initMap:

mapView.getController().setZoom(17); 

Avísame si funciona

Ger

+0

Esto funciona. Gracias. – User358218

+1

Una idea de último momento: no es seguro ya que está modificando la interfaz de usuario mientras no está en ese hilo. Busque en envolverse en algo como esto: http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29 – Ryan

1

Puesto que usted tiene sus datos de localización ya se puede crear un objeto LatLng/Estructura y utilizar esta línea directamente en el objeto Map:

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

Uso Android API de Google Maps v2

Cuestiones relacionadas