2010-11-10 8 views
5

Ciao, mi piacerebbe far ingrandire la mia mappa nella mia posizione attuale. Attualmente questa posizione viene definita inviando lat e long all'emulatore. Come faccio a fare questo?Come faccio ad ingrandire la mappa di Google nella posizione corrente?

Il mio attuale 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; 
    } 

Grazie.

risposta

3

È necessario implementare onLocationChanged(). Nel mio codice ho aggiunto anche gli overlay. Come minimo è necessario setCenter() con la posizione corrente

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

Questo non funziona. Dopo aver inviato i valori lat e long, il marker sulla mappa si sposta ma non si sposta automaticamente sul marker. – User358218

+0

Non sapevo che avessi un pennarello. Questo rende il centro della mappa nella posizione corrente. Se la prima risposta fa ciò di cui hai bisogno, allora resta con essa. – NickT

+0

No non ho un marcatore. Ma il mio codice inserisce una sovrapposizione quando invio il lat e da molto tempo. Quello che mi piacerebbe scoprire è come farò il telefono Android caricare la mia posizione corrente quando avvio il programma. – User358218

9

Prova ad aggiungere questo alla fine del codice initMyLocation:

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

È possibile rimuovere questa riga dal tuo metodo initMap:

mapView.getController().setZoom(17); 

fatemi sapere se funziona

Ger

+0

Questo funziona. Grazie. – User358218

+1

Un ripensamento: questo non è sicuro poiché si modifica l'interfaccia utente mentre non si è su quel thread. Guarda nel wrapping in qualcosa di simile: http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29 – Ryan

1

Dal momento che avete i vostri dati di localizzazione già è possibile creare un LatLng Oggetto/Struttura e utilizzare questa linea direttamente sull'oggetto Mappa:

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

Io uso l'API di Google Maps per Android v2

Problemi correlati