2012-08-10 4 views
1

Je travaille sur un projet qui nécessite des mises à jour constantes de localisation de mon téléphone android. Cela fonctionne bien, mais est très inexact. À l'intérieur, j'obtenais la précision de l'emplacement récupéré (via getAccuracy()) pour être autour de 60 (qui, autant que je sache est en mètres), où je veux que la précision soit (à max) 2-3 mètres. Tout d'abord, n'est-il pas possible d'obtenir une précision de (2-3 mètres) en permanence? Si oui, comment?Précision des coordonnées GPS trouvées dans Android

Suivez est le code que j'utilise pour récupérer l'emplacement de l'utilisateur.

public boolean getLocation(Context context, LocationResult result) 
{ 
    //I use LocationResult callback class to pass location value from MyLocation to user code. 
     locationResult = result; 

    if(lm==null) 
     lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

    //exceptions will be thrown if provider is not permitted. 
    try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){} 
    try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){} 

    //don't start listeners if no provider is enabled 
    if(!gps_enabled && !network_enabled) 
     return false; 

    if(gps_enabled) 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps); 
    if(network_enabled) 
     lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork); 
    timer1=new Timer(); 
    timer1.schedule(new GetLastLocation(), 10000); 
    return true; 
} 

J'étais aussi obtenir un autre problème, avec mon appareil en permanence placé à un endroit statique, la distance entre deux emplacement tiré par les cheveux est très peu fiable GPS successives, il change de 0,0 mètres à 16meters, ce qui signifie que mon appareil est constamment en mouvement.

Si l'un d'entre vous a une idée de cela, comment obtenir une précision s'il vous plaît aidez-moi.

Merci

Répondre

2

au lieu d'utiliser uniquement mintime et mindistance, vous pourriez obtenir de meilleurs résultats en passant dans un objet Criteria avec

ACCURACY_FINE 
POWER_HIGH 

Votre téléphone individuel et l'environnement physique aura un impact sur les lectures de toute évidence. Vous obtiendrez probablement de meilleurs résultats dans l'ensemble, ce qui permettra au système de faire une partie du travail pour vous en ne spécifiant pas le fournisseur de localisation exact avec l'appel et les critères suivants.

http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long, flotteur, android.location.Criteria, android.location.LocationListener, android.os.Looper)

1

Miser sur la réponse de porc, vous pouvez réduire la variance un peu dans le cas où vous présenter ci-dessus (échantillons avec une précision variable) si vous êtes flexible avec votre fréquence de mise à jour. Supposons que vous définissiez la fréquence souhaitée à 0,1 hz (mise à jour toutes les 10 secondes), puis vous pouvez filtrer vos mises à jour de localisation en opérant uniquement sur le «meilleur» emplacement parmi l'ensemble des échantillons des 10 dernières secondes. Un moyen simple de déterminer le «meilleur» pourrait être de renvoyer l'échantillon de l'ensemble qui a la cote de précision la plus élevée. Si plusieurs échantillons ont la même précision, retournez-en le dernier. Une autre chose que vous pouvez faire est de faire la moyenne de tous les échantillons d'un ensemble donné, ou tous les échantillons avec la même précision. Cela n'améliorera pas la précision globale en raison de la nature géométrique de l'erreur GPS, mais réduira la variance; vous réduirez votre erreur maximale en augmentant votre erreur minimale. Vous introduisez également un peu d'effet de décalage dans les cas où l'appareil est en mouvement, ce qui peut ou peut ne pas être un problème selon votre application.

1

Il est fondamentalement impossible d'obtenir une précision de 2-3m en utilisant le GPS à l'intérieur.

Le GPS nécessite une ligne de site relativement claire pour les satellites, de sorte que plus vous vous trouvez à l'intérieur, moins il est précis. Pour déterminer votre position à l'intérieur Android va essayer d'utiliser le GPS, puis la triangulation en utilisant les emplacements connus des points d'accès WIFI environnants, puis la triangulation de la tour de téléphonie cellulaire. Il combine probablement ces 3 pour fournir une estimation plus précise.

Pour déterminer avec précision l'emplacement à l'intérieur, vous devez disposer d'un nombre assez important de points d'accès WIFI dans des emplacements connus de Google. Je suis à peu près sûr que c'est ce qu'ils font à l'intérieur de leur centre commercial.D'autres trucs que vous pourriez utiliser pour améliorer votre précision (ou pour jeter des lectures inexactes) pourraient être de lire les données des accéléromètres (ou des gyroscopes, etc.), et d'utiliser ces lectures pour essayer de déterminer quand l'appareil ne bouge pas ou le taux de déplacement dans une certaine direction. Tout ce qui utilise ces techniques est susceptible d'être assez difficile à mettre en œuvre.

+0

Quelle précision puis-je obtenir à l'extérieur? –

+0

La précision à l'extérieur dépend vraiment du type de paysage dans lequel vous vous trouvez. En terrain plat, vous pouvez atteindre une précision d'environ 1m, au milieu d'une ville avec de grands gratte-ciel dont la précision peut descendre jusqu'à 50m. – Rob