IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Problème de Précision GPS


Sujet :

API standards et tierces Android

  1. #1
    Membre très actif
    Avatar de didate
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 90
    Par défaut Problème de Précision GPS
    Bonjour à tous,

    J'ai un problème de précision du GPS dans une application que je suis entrain de développer.

    Quand je demande ma position, j'obtiens une location qui est à plus 50 m (des fois ça part jusqu'à 1km).

    Par contre quand j'utilise l'application android googlemap la précision est beaucoup mieux .

    Voici un extrait de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      googleApiClient = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
     @Override
        protected void onStart() {
            if(googleApiClient!=null) googleApiClient.connect();
            super.onStart();
        }
     
        @Override
        protected void onStop() {
            if(googleApiClient!=null)
            googleApiClient.disconnect();
            super.onStop();
        }
     
        @Override
        protected void onPause() {
            //Unregister for location callbacks:
            if (googleApiClient != null && googleApiClient.isConnected()) {
                LocationServices.FusedLocationApi.removeLocationUpdates(googleApiClient, this);
            }
            super.onPause();
        }
     
        @Override
        public void onConnected(@Nullable Bundle bundle) {
            //getCurrentLocation();
     
            Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                    googleApiClient);
            if (mLastLocation != null) {
                //place marker at current position
                mGoogleMap.clear();
                latLng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(latLng);
                markerOptions.title("Position Actuelle");
                markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
               // markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.blue_dot));
                mCurrLocation = mGoogleMap.addMarker(markerOptions);
                mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, CAMERA_ZOOM));
            }
     
            mLocationRequest = new LocationRequest();
            mLocationRequest.setInterval(5000); //5 seconds
            mLocationRequest.setFastestInterval(3000); //3 seconds
            mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
            //mLocationRequest.setSmallestDisplacement(0.1F); //1/10 meter
     
            LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, mLocationRequest, this);
     
        }
     
     @Override
        public void onLocationChanged(Location location) {
            //remove previous current location marker and add new one at current position
            if (mCurrLocation != null) {
                mCurrLocation.remove();
            }
            latLng = new LatLng(location.getLatitude(), location.getLongitude());
            MarkerOptions markerOptions = new MarkerOptions();
            markerOptions.position(latLng);
            markerOptions.title(getString(R.string.current_position));
            markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
            mCurrLocation = mGoogleMap.addMarker(markerOptions);
     
        }
    Je me demande s'il n'y a pas un paramètre que j'ai raté ?

    Merci à tous.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Il semblerait qu'à la connection tu demande la dernière position connue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
    ce qui n'est pas du tout la même chose que la position actuelle. La dernière position connu est une position mise n cache qui est retournée instantanément au lieux de faire la demande aux différents capteurs. C'est en quelque sorte une première info grossière qui devrait ensuite être mise à jour lorsque la coordoonées va changer.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif
    Avatar de didate
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 90
    Par défaut
    Merci pour ta réponse,

    D'après toi qu'es ce que je devrais mettre dans onConnect ?

    la méthode onLocationChanged devrait déplacer le marquer en fonction de mon déplacement. C'est là qu'il me donne des positions aléatoire.

  4. #4
    Membre très actif Avatar de jmonga
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 175
    Par défaut
    Le taux de rafraichissement de position est faible.
    Et la précision dépend du type de fournisseur de position .

    Soit c'est le réseau GSM a l'aide des antennes GSM l'appareil ( téléphone) peut calculer ta position et ce extrêmement lent et ne fourni pas de bon résultat de position d'où les positions aléatoires.

    Soit c'est le GPS intégré dans ton smartphone un peu plus précis que le deux autres mais peut faire griller ton processeur en diminuant le temps de mise à jour.

    soit c'est le wifi de ton smartphone.

    la solution serait d'utiliser le trois.

  5. #5
    Membre très actif
    Avatar de didate
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 90
    Par défaut
    Justement, si j'ai bien compris la doc, GoogleApiClient sélectionne le meilleur.
    Voilà ce que dit la documentation officielle

    the API updates your app periodically with the best available location, based on the currently-available location providers such as WiFi and GPS (Global Positioning System). The accuracy of the location is determined by the providers, the location permissions you've requested, and the options you set in the location request.
    Je me dit qu'il y a un truc que j'ai raté sur la partie en GRAS.

    Voici les permissions que j'ai ajouté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  6. #6
    Membre très actif Avatar de jmonga
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 175
    Par défaut
    Quel est le résultat?

Discussions similaires

  1. Problème de précision dans une requête
    Par Le Pharaon dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/08/2006, 14h16
  2. Réponses: 5
    Dernier message: 11/05/2006, 08h51
  3. Problème de précision avec FloatToStr
    Par Clorish dans le forum Langage
    Réponses: 9
    Dernier message: 06/12/2005, 15h38
  4. Réponses: 4
    Dernier message: 26/10/2005, 20h38
  5. [FLASH MX] Problème de "précision"
    Par will-scs dans le forum Flash
    Réponses: 2
    Dernier message: 03/07/2005, 00h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo