Autore Topic: recupero coordinate  (Letto 712 volte)

Offline qualcuno

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Google+
    • Mostra profilo
    • Ingegnere Informatico Blog
recupero coordinate
« il: 14 Febbraio 2012, 13:12:25 CET »
0
Salve, sto testando la mia applicazione ma ho notato che il recupero del luogo non è così efficiente

praticamente, io recupero le coordinate una volta sola e fermo il locationupdate,
quello che ho notato è che alcune volte le coordinate sono corrette, altre volte le coordinate sono sbagliate di poco
altre volte il luogo viene recuperato ma è un luogo completamente sbagliato


vorrei migliorare la cosa.. non c'è un modo per controllare se il fix è più o meno preciso? nel caso in cui non è preciso ripetere l'operazione
mentre nel caso in cui è preciso interromperla???



Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:recupero coordinate
« Risposta #1 il: 14 Febbraio 2012, 13:50:34 CET »
0
Ciao,

si, puoi verificare quanto è accurato la localizzazione guardanto il valore di accuracy nella Location. Più è basso, meglio è.

Che tipo di LocationProvider  usi? Fine o coarse?

Offline qualcuno

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Google+
    • Mostra profilo
    • Ingegnere Informatico Blog
Re:recupero coordinate
« Risposta #2 il: 14 Febbraio 2012, 14:03:09 CET »
0
io recupero il provider tramite  GetBestProvider ... tra i criteri di scelta ho messo questi:

criteriLocation=new Criteria();
criteriLocation.setSpeedRequired(true);
criteriLocation.setCostAllowed(false);
      
però ora ho aggiunto questa istruzione

criteriLocation.setAccuracy(1);

da quello che ho capito, se l'accuracy è maggiore di 100 il fix non avviene nemmeno, quindi non devo preoccuparmi di controllarne la precisione... giusto?

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:recupero coordinate
« Risposta #3 il: 14 Febbraio 2012, 14:09:52 CET »
0
ciao,

ma che cosa usi per ottenere la Location? getLastKnowLocation() oppure usi un LocationListenere?

il valore 100 da dove lo prendi?


Offline qualcuno

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Google+
    • Mostra profilo
    • Ingegnere Informatico Blog
Re:recupero coordinate
« Risposta #4 il: 14 Febbraio 2012, 14:44:59 CET »
0
ciao,

ma che cosa usi per ottenere la Location? getLastKnowLocation() oppure usi un LocationListenere?

il valore 100 da dove lo prendi?

no... uso il locationListener il valore 100 è una proprietà che gestisce android direttamente...

ho eseguito alcune prove

con il LocationChanged:

Codice (Java): [Seleziona]
public void onLocationChanged(Location location) {
                // TODO Auto-generated method stub
                Log.i("LOCATION REQUEST", "nuovo luogo recuperato lat: "+location.getLatitude()+" long: "+ location.getLongitude() + " accuracy: " + location.getAccuracy());
}
               

e mi stampa sempre una precisione minore di 100.

Comunque nei prossimi giorni effettuerò delle prove in diversi luoghi e vi farò sapere... così se puo' servire a qualcun altro...

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:recupero coordinate
« Risposta #5 il: 14 Febbraio 2012, 15:18:35 CET »
0
Ciao,

nel mio app ho fatto cosi:

MIN_RADIUS è la precisione alla quale vuoi arrivare, dopo smette di fare il fix

Codice (Java): [Seleziona]
private final static int MIN_RADIUS = 2;

protected void registerLocationListeners() {

                // Initialize criteria for location providers
                Criteria fine = new Criteria();
                fine.setAccuracy(Criteria.ACCURACY_FINE);


                if (listenerFine == null )
                        createLocationListeners();
                try {
                        locationManager.requestLocationUpdates(
                                        locationManager.getBestProvider(fine, true), 500,
                                        MIN_RADIUS, listenerFine);
                } catch (Exception e) {
                        Log.d(TAG, "error in registering Location listeners");
                }
        }

        /**
         * Creates LocationListeners
         */

        private void createLocationListeners() {


                listenerFine = new LocationListener() {
                        public void onStatusChanged(String provider, int status,
                                        Bundle extras) {
                                switch (status) {
                                case LocationProvider.OUT_OF_SERVICE:
                                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                                        locationAvailable = false;
                                        break;
                                case LocationProvider.AVAILABLE:
                                        locationAvailable = true;
                                }
                        }

                        public void onProviderEnabled(String provider) {
                        }

                        public void onProviderDisabled(String provider) {
                        }

                        public void onLocationChanged(Location location) {
                               
                               
                                currentLocation = location;

                        }
                };

        }

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:recupero coordinate
« Risposta #6 il: 14 Febbraio 2012, 17:30:32 CET »
0

da quello che ho capito, se l'accuracy è maggiore di 100 il fix non avviene nemmeno, quindi non devo preoccuparmi di controllarne la precisione... giusto?

No.  :D
I criteria servono per lasciare decidere Android quale provider scegliere.
Il metodo Criteria.setAccuracy(int accuracy) come parametro può avere solo i valori 1,2 o 3 (che corrispondo alle costanti Criteria.ACCURACY_LOW, Criteria.ACCURACY_MEDIUM, Criteria.ACCURACY_HIGH/ACCURACY_FINE). La funzione del metodo è quindi quella di dire al sistema quale provider scegliere in base all'accuratezza che ti serve, ma ciò non va a limitare le location ricevute nell'onLocationUpdates() in base all'accuracy. Il fatto che, usando il log, tu veda solo location con accuracy<100, è una casualità.

Per controllare la precisione del fix, un metodo efficace è usare un if per scremare le location ricevute nell'onLocationChanged proprio in base all'accuracy.   :D
« Ultima modifica: 14 Febbraio 2012, 17:33:47 CET da Verandi »