Autore Topic: Google Maps Android API v2 - Marker mobile ?  (Letto 896 volte)

Offline DjWilliams

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    tablet
  • Sistema operativo:
    windows vista
Google Maps Android API v2 - Marker mobile ?
« il: 23 Agosto 2013, 17:57:56 CEST »
0
Salve vi sarei molto grato se mi aiutaste nel realizzare un Marker mobile da visualizzare sulla mia mappa. In sostanza il marker deve visualizzare la posizione corrente del dispositivo.

Per le mappe ho già provveduto ad implementare le opportune librerie di google(API v2) e riguardo i Marker statici, cioè fissi, non ho problemi.

Per la procedura di localizzazione invece ho sfruttato un Service che usa fondamentalmente l'import android.location.*
Anche qui il mio service riesce a recuperare le cordinate latitudine e longitudine e a scriverle in opportune variabili ( mylat, mylon) della mia MappaActivity.

La mia activity MappaActivity è così costituita :
Codice (Java): [Seleziona]
private GoogleMap map;
private LatLng MIA_POSIZIONE;
private double mylat;
private double mylon;
@Override
        public void onCreate(Bundle savedInstanceState){
                super.onCreate(savedInstanceState);
           
            setContentView(R.layout.activity_mappa);
            map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
            map.setMapType(GoogleMap.MAP_TYPE_NORMAL);

        MIA_POSIZIONE = new LatLng(mylat,mylon);       
        Marker miaPos = map.addMarker(new MarkerOptions()
                        .position(MIA_POSIZIONE)
                        .title("Mia Posizione"));
     map.moveCamera(CameraUpdateFactory.newLatLngZoom(MIA_POSIZIONE, 18));
     map.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
   

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   tools:context=".MappaActivity">

    <fragment
       android:id="@+id/map"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       class="com.google.android.gms.maps.MapFragment" />
       
</RelativeLayout>

Il codice così scritto setta solo il primo marker, ma non aggiorna lo spostamento sulla mappa.

Ho provato ad usare un handler con un timer task e richiamare ogni tot secondi il codice che compare nell' onCreate ma in quel modo non cancella i vecchi marker e mi sono ritrovato diversi marker sulla mappa a seconda dell'aggiornamento del service.

Che mi consigliate di fare ?
« Ultima modifica: 23 Agosto 2013, 18:14:05 CEST da DjWilliams »

Offline Giak

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    transformer tf101
  • Sistema operativo:
    ubuntu 12.10
Re:Google Maps Android API v2 - Marker mobile ?
« Risposta #1 il: 23 Agosto 2013, 19:40:21 CEST »
0
devi registrare un LocationListener e nel metodo onLocationChanged (Location new_location) chiamare marker.position(new_location)

Offline DjWilliams

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    tablet
  • Sistema operativo:
    windows vista
Re:Google Maps Android API v2 - Marker mobile ?
« Risposta #2 il: 24 Agosto 2013, 13:04:00 CEST »
0
Ti ringrazio per esserti reso partecipe,
Purtroppo la documentazione (Marker | Android Developers()) non concede di utilizzare il metodo .position(Location new_location) in quel modo...

L'unico modo per utilizzare position è in qst modo per esempio :
Codice (Java): [Seleziona]
 GoogleMap map = ... // get a map.
 // Add a marker at San Francisco.
 Marker marker = map.addMarker(new MarkerOptions()
     .position(new LatLng(37.7750, 122.4183))
     .title("San Francisco")
     .snippet("Population: 776733"));

e come puoi notare il metodo .position() accetta come parametro un tipo LatLng e non un tipo Location...

Tra l'altro se inserissi quel frammento di codice nel onLocationChanged() si sovrapporrebbero vari marker a seconda dell'aggiornamento della posizione del dispositivo.
« Ultima modifica: 24 Agosto 2013, 13:34:23 CEST da DjWilliams »

Offline Giak

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    transformer tf101
  • Sistema operativo:
    ubuntu 12.10
Re:Google Maps Android API v2 - Marker mobile ?
« Risposta #3 il: 24 Agosto 2013, 14:11:59 CEST »
0
dalla documentazione:
Citazione
Position
The LatLng value for the marker's position on the map. You can change this value at any time if you want to move the marker.

esistono i metodi per convertire un oggetto location in un oggetto LatLong cercali nella documentazione c'è tutto, e poi basta chiamare marker.setPosition() con la nuova posizione.

se si creano nuovi marker è perché commetti degli errori, il marker deve essere istanziato un unica volta e successivamente devi solo chiamarci sopra la setPosition() con la nuova posizione. la nuova posizione la ottieni registrando un opportuno listener, settando i parametri dell'update. ovviamente devi anche attivare la registrazione con gli opportuni metodi.

PS: è ovvio che se inserisci il frammento da te citato nella OnLocationUpdate() si creano una miriade di marker, li dentro fai la addMarker() ogni volta che la posizione cambia, e in più crei un mare di MarkerOptions.
« Ultima modifica: 24 Agosto 2013, 14:18:30 CEST da Giak »

Offline DjWilliams

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    tablet
  • Sistema operativo:
    windows vista
Re:Google Maps Android API v2 - Marker mobile ?
« Risposta #4 il: 24 Agosto 2013, 14:34:21 CEST »
0
Hai perfettamente ragione, infatti prima che leggessi il tuo post avevo consultato meglio la documentazione e mi ero accorto che il metodo giusto da usare era setPosition() che agisce direttamente sul Marker senza doverlo nuovamente istanziare.

Concordo pienamente con te che bisogna istanziare una sola volta l'oggetto Marker, purtroppo non conoscendo il metodo setPosition ero costretto a commettere l'errore "forzato"  di istanziare sempre un nuovo oggetto per dargli una nuova posizione in questo modo :

Codice (Java): [Seleziona]
 GoogleMap map = ... // get a map.
 // Add a marker at San Francisco.
 Marker marker = map.addMarker(new MarkerOptions()
     .position(new LatLng(37.7750, 122.4183))
     .title("San Francisco")
     .snippet("Population: 776733"));

però adesso ho risolto :)

Grazie Giak  :)

Non vedo l'ora di testarlo :)