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

Android Discussion :

Distance entre 2 géopoints


Sujet :

Android

  1. #1
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut Distance entre 2 géopoints
    salut
    j'essaye de calculer le point le plus proche de la localisation de l'utilisateur,
    cependant ou dois je développer la méthode de calcul distance? dans onLocationChanged ??
    voilà ce que j'ai fais, qulqu'un pourra t-il me dire s'il y a des fautes. merci
    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
     @Override
    		    public void onLocationChanged(Location location) {
    			latitudeUser = location.getLatitude();
    			longitudeUser = location.getLongitude();
    			float[] tab1 = new float[100];
     
    			  int j = 0;
    			 for (int i = 0 ; i< listF.size() ; i++){
    				 Location location1 = null;
    				 location1.setLatitude(listF.get(i).getLatitude());
    				 location1.setLongitude(listF.get(i).getLongitude());
    				 location.distanceTo(location1);
    				tab1[j] = location.distanceTo(location1);
    				j++;
     
    			 }
    			 float dmin = tab1[0];
    			 int indexmin;
    			 for (int i = 0; i<j ; i++){
    				if (tab1[i] < dmin){
    					dmin = tab1[1];
    					indexmin = i;
    				}
     
    			 }
     
    		}
    listF : contient l'ensemble des points avec lesquels je vais comparer les distances entre eux et la localisation actuelle.
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  2. #2
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    public class CalculDistance extends MapActivity implements LocationListener {
    	double latitudeUser;
    	double longitudeUser;
    	Location locationUser;
    	double latitudemin;
    	double longitudemin;
    	FormationBDD formationBdd;
    	Formation formation;
        Location localtion;
        int indexmin;
    	MapView	mapView = null;
    	 private LocationManager lm = null;
    	MapController mc = null;
    	List<Formation> listF = new ArrayList<Formation>();
    	private MyLocationOverlay myLocation = null;
     
    	 public void onCreate(Bundle savedInstanceState) {
    		 super.onCreate(savedInstanceState);
    			setContentView(R.layout.localisation);
    			mapView = (MapView) this.findViewById(R.id.mapview);
    			mapView.setBuiltInZoomControls(true);
    			lm = (LocationManager) this.getSystemService(LOCATION_SERVICE);
    			lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);
    			lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 0,
    				this);
     
     
    			mc = mapView.getController();
    			mc.setZoom(15);
    		    formationBdd = new FormationBDD(this);
    		    formationBdd.open();
    		   // récupération liste centres de formations
    		    listF = formationBdd.getAllFormations();
    		    Log.i(getClass().getName(), "liste : " + listF);
     
     
     
    			  int   indexDistancemin = calculmin();
    			  Log.i(getClass().getName(), "index : " + indexDistancemin);
    			  double   latitudemin = listF.get(indexDistancemin).getLatitude();
    			    double longitudemin = listF.get(indexDistancemin).getLongitude();
    		// récupérer l'index du centre le plus proche 
     
    		    // création du géopoint correspondant au centre plus proche
    		    GeoPoint point = new GeoPoint(microdegrees(latitudemin),microdegrees(longitudemin));
    		    ItemizedOverlayPerso pinOverlay = new ItemizedOverlayPerso(getResources().getDrawable(R.drawable.marker));
    			pinOverlay.addPoint(point);
    			mapView.getOverlays().add(pinOverlay);
     
    			myLocation = new MyLocationOverlay(getApplicationContext(), mapView);
     
    			//Ajouter votre location dans la map
    			mapView.getOverlays().add(myLocation);
    			//Activer l'affichage de la localisation
    			myLocation.enableMyLocation();
    		myLocation.runOnFirstFix(new Runnable(){
    			 public void run() {
    				 mc.animateTo(myLocation.getMyLocation());
    				 mc.setZoom(17);
    				    }
    		});
     
     
    	 }
    public int calculmin(){
     		    float[] tab1 = new float[100];
     
     			  int j = 0;
     			  int k;
     			 for (int i = 0 ; i< listF.size() ; i++){
     				 Location location1 = null;
     				 location1.setLatitude(listF.get(i).getLatitude());
     				 location1.setLongitude(listF.get(i).getLongitude());
     				 locationUser.distanceTo(location1);
     				tab1[j] = locationUser.distanceTo(location1);
     				j++;
     				k = j;
     				Log.i(getClass().getName(), "tableau : " + k);
     
     			 }
     
     			 float dmin = tab1[0];
     			 int indexmin = 0;
     			 for (int i = 0; i<j ; i++){
     				if (tab1[i] < dmin){
     					dmin = tab1[1];
     					indexmin = i;
     				}
     
     			 }
     			 return indexmin;
     		   }
     
     @Override
    		    public void onLocationChanged(Location location) {
    			latitudeUser = location.getLatitude();
    			longitudeUser = location.getLongitude();
    			locationUser = location;
     
     
    		}
    }
    rapport logcat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    12-31 18:09:41.825: E/AndroidRuntime(29539): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.trainingcenter/com.example.trainingcenter.CalculDistance}: java.lang.NullPointerException
    12-31 18:09:41.825: E/AndroidRuntime(29539): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
    12-31 18:09:41.825: E/AndroidRuntime(29539): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
    12-31 18:09:41.825: E/AndroidRuntime(29539): 	at android.app.ActivityThread.access$600(ActivityThread.java:128)
    Votre aide me sera aussi bénéfique
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Dommage.... le logcat est coupé avant la partie interessante... la "cause"....

    Ensuite... pourquoi réinventer la roue ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    GeoPoint point1, point2;
    float[] results = new float[1];
    Location.distanceBetween(point1.getLatitudeE6()/1E6, point1.getLongitudeE6()/1E6, point2.getLatitudeE6()/1E6, point2.getLongitudeE6()/1E6, results);
    // distance = results[0]
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Location loc1, loc2;
    float dist = loc1.distanceTo(loc2);

    Bonne année
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Bonsoir,
    Bonne année à vous aussi
    Bon voilà la suite du rapport LogCat:
    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
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at android.os.Looper.loop(Looper.java:137)
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at java.lang.reflect.Method.invokeNative(Native Method)
     
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at android.app.ActivityThread.main(ActivityThread.java:4517)
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at java.lang.reflect.Method.invoke(Method.java:511)
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at dalvik.system.NativeStart.main(Native Method)
    01-03 20:11:19.840: E/AndroidRuntime(10176): Caused by: java.lang.NullPointerException
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at com.example.trainingcenter.CalculDistance.calculmin(CalculDistance.java:140)
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at com.example.trainingcenter.CalculDistance.onCreate(CalculDistance.java:59)
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at android.app.Activity.performCreate(Activity.java:4533)
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
    et pour la proposition comme solution plus simple pour le calcul, je vais l'essayer et voir le résultat
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Voila... le reste du logcat donne la réponse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Caused by: java.lang.NullPointerException
    01-03 20:11:19.840: E/AndroidRuntime(10176): 	at com.example.trainingcenter.CalculDistance.calculmin(CalculDistance.java:140)
    Donc utilisation d'un objet null dans la fonction calculmin du fichier "CalculDistance.java", ligne 140

    Et bim:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Location location1 = null;
     				 location1.setLatitude(listF.get(i).getLatitude());
    Donc forcément, mettre la latitude à une objet qui n'existe pas....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Ah oui merci! je devrai apprendre à comprendre le rapport LogCat, ce qui ne parait pas difficile.

    J'ai une petite question concernant la méthode distanceBetween(): est ce que lorsque j'ai une liste de points à tester, j'ai besoin d'incrémenter le compteur du tableau float[] results ou l'incrémentation se fait automatiquement tant que le tableau n'est initialisé qu'avant la boucle dans laquelle on calcule la distance entre la localisation actuelle et chaque point de la liste?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    float[] results = new float[listF.size()-1];
     for (int i = 0 ; i< listF.size() ; i++){
     				 double latitudeElmt = listF.get(i).getLatitude();
     				 double longitudeElmt = listF.get(i).getLongitude();
     			  GeoPoint point = new GeoPoint(microdegrees(latitudeElmt),microdegrees(longitudeElmt));
     			 myLocation = new MyLocationOverlay(getApplicationContext(), mapView);
     			  GeoPoint locationUser = myLocation.getMyLocation();
     
     			    Location.distanceBetween(locationUser.getLatitudeE6(), locationUser.getLongitudeE6(), microdegrees(latitudemin), microdegrees(longitudemin), results);}
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non mais le tableau qu'on passe est utilisé pour recevoir de 1 à 3 valeurs... la première étant TOUJOURS la distance...
    (la doc javadoc de la fonction est très explicite là dessus)

    Donc c'est toujours:
    float[] results = new float[1]; // ou 2 ou 3 selon qu'on veut les autres infos

    ensuite, le resultat, tu en fait ce que tu veux à chaque itération...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Bonjour,
    J'ai reglé la taille du tableau results[] et j'ai fais une modification au niveau de la méthode qui calcule la distance la plus proche calculDistanceMin() mais j'ai de nouveau l'erreur NullPointerException
    voilà le code:
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    public class LocalisationActivity extends MapActivity implements LocationListener {
    	double latitudeUser;
    	double longitudeUser;
    	Location locationUser;
    	double latitudemin;
    	double longitudemin;
    	FormationBDD formationBdd;
    	Formation formation;
        Location localtion;
        int indexmin;
    	MapView	mapView = null;
    	 private LocationManager lm = null;
    	MapController mc = null;
    	List<Formation> listF = new ArrayList<Formation>();
    	private MyLocationOverlay myLocation;
     
    	 public void onCreate(Bundle savedInstanceState) {
    		 super.onCreate(savedInstanceState);
    			setContentView(R.layout.localisation);
    			mapView = (MapView) this.findViewById(R.id.mapview);
    			mapView.setBuiltInZoomControls(true);
    			lm = (LocationManager) this.getSystemService(LOCATION_SERVICE);
    			lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);
    			lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 0,
    				this);
     
     
    			mc = mapView.getController();
    			mc.setZoom(15);
    		    formationBdd = new FormationBDD(this);
    		    formationBdd.open();
    		   // récupération liste centres de formations
    		    listF = formationBdd.getAllFormations();
    		    Log.i(getClass().getName(), "liste : " + listF);
     
     
    			  // calcul distance min
    			  int   indexDistancemin = calculDistanceMin();
    			  Log.i(getClass().getName(), "index : " + indexDistancemin);
    			  double   latitudemin = listF.get(indexDistancemin).getLatitude();
    			    double longitudemin = listF.get(indexDistancemin).getLongitude();
    		// récupérer l'index du centre le plus proche 
     
    		    // création du géopoint correspondant au centre plus proche
    		    GeoPoint point = new GeoPoint(microdegrees(latitudemin),microdegrees(longitudemin));
    		    ItemizedOverlayPerso pinOverlay = new ItemizedOverlayPerso(getResources().getDrawable(R.drawable.marker));
    			pinOverlay.addPoint(point);
    			mapView.getOverlays().add(pinOverlay);
     
    			myLocation = new MyLocationOverlay(getApplicationContext(), mapView);
     
    			//Ajouter votre location dans la map
    			mapView.getOverlays().add(myLocation);
    			//Activer l'affichage de la localisation
    			myLocation.enableMyLocation();
    		myLocation.runOnFirstFix(new Runnable(){
    			 public void run() {
    				 mc.animateTo(myLocation.getMyLocation());
    				 mc.setZoom(17);
    				    }
    		});
     
     
    	 }
    // méthode qui calcule la distance entre chaque point et la localisation actuelle et retourne l'index min
    	 public int calculDistanceMin(){
     
     			float[] results = new float[2];
     
    	 		int indexmin = 0;
     			 for (int i = 0 ; i< listF.size() ; i++){
     				 double latitudeElmt = listF.get(i).getLatitude();
     				 double longitudeElmt = listF.get(i).getLongitude();
     			  GeoPoint point = new GeoPoint(microdegrees(latitudeElmt),microdegrees(longitudeElmt));
     			 myLocation = new MyLocationOverlay(getApplicationContext(), mapView);
     			  GeoPoint locationUser = myLocation.getMyLocation();
     
     			    Location.distanceBetween(locationUser.getLatitudeE6(), locationUser.getLongitudeE6(), microdegrees(latitudeElmt), microdegrees(longitudeElmt), results);
     			 }
     			float dmin = results[0];
     			 for (int i = 0; i<listF.size() ; i++){
      				if (results[i] < dmin){
      					dmin = results[1];
      					indexmin = i;
      				}
     
     
     			 }
     			 return indexmin;
     		 }
    }
    LogCat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    02-19 01:10:11.385: E/AndroidRuntime(4932): Caused by: java.lang.NullPointerException
    02-19 01:10:11.385: E/AndroidRuntime(4932): 	at com.guideformation.main.LocalisationActivity.calculDistanceMin(LocalisationActivity.java:174)
    la ligne 174 est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Location.distanceBetween(locationUser.getLatitudeE6(), locationUser.getLongitudeE6(), microdegrees(latitudeElmt), microdegrees(longitudeElmt), results);
    Pouvez vous m'aider?
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  9. #9
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    locationUser est null
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  10. #10
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Bon voilà maintenant la méthode distanceBetween fonctionne et ma méthode calculDistanceMin() retourne bel et bien un résultat. Cependant lorsque j'ai voulu vérifier le résultat avec Google Maps je n'ai pas trouvé que c'est la distance minimal,celle que la fonction a retourné.
    Je me pose alors ces questions:
    1- comment se fait le calcul avec la méthode distanceBetween puisqu'il y a plusieurs chemins entre 2 géopoints? est ce que la méthode prend en compte le plus court chemin?
    2- quel est le moyen de transport considéré par défaut?

    Quelqu'un pourra-t-il m'aider?

    Merci

    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
    public int calculDistanceMin(){
     
     			float[] results = new float[1];
     			//initialisation distance min = distance entre 1èr point de la liste et la localisation actuelle
     			double latitudemin = listF.get(0).getLatitude();
     			double longitudemin = listF.get(0).getLongitude();
     			  Log.i(getClass().getName(), "latitude default : " + latitudemin + " longitude default: " + longitudemin);
     
     			Location.distanceBetween(latitudeUser, longitudeUser, microdegrees(latitudemin), microdegrees(longitudemin), results);
     			 float distanceMin = results[0];
    	 		 float dmin = 0;
    	 		  indexMin = 0;
     			 for (int i = 1 ; i< listF.size() ; i++){
     				 double latitudeElmt = listF.get(i).getLatitude();
     				 double longitudeElmt = listF.get(i).getLongitude();
     			 // GeoPoint point = new GeoPoint(microdegrees(latitudeElmt),microdegrees(longitudeElmt));
     			 //myLocation = new MyLocationOverlay(getApplicationContext(), mapView);
     
     			 Location.distanceBetween(latitudeUser, longitudeUser, microdegrees(latitudeElmt), microdegrees(longitudeElmt), results);
     			   if (results[0] < distanceMin){
     				   distanceMin = results[0];
     				   indexMin = i;
     			   }
     			 }
     			dmin = distanceMin;
     
     			 return indexMin;
     		 }
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  11. #11
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    distanceBetween renvoie la distance "à vol d'oiseau" il me semble, il n'est pas question de "route"...
    Pour calculer la distance sur un chemin, il faut prendre tous les points du chemin, et rajouter les distances entre chacun.

    Vérifier sur google maps avec la règle (passer en mode "earth")
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  12. #12
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Donc ma méthode n'effectue pas l'objectif (savoir la distance la plus proche réellement! ) . as tu une idée sur comment procéder pour atteindre cet objectif? J'ai besoin de savoir lesquels parmi les centres de formations qui existantes dans la base de données sont les plus proches de la localisation actuelle
    Merci
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  13. #13
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    j'ai trouvé cette définition sur android developer pour la méthode distanceBetween:
    distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)
    Computes the approximate distance in meters between two locations, and optionally the initial and final bearings of the shortest path between them.
    Donc en principe elle peut calculer la distance en prenant en compte le plus court chemin, non?
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  14. #14
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    J'aimerai faire la recherche du plus proche centre de formation dans un autre thread, non pas le thread principal. Comment devrai-je faire s'il vous plait?
    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
     public void onCreate(Bundle savedInstanceState) {
    		 super.onCreate(savedInstanceState);
    			setContentView(R.layout.localisation);
    			mapView = (MapView) this.findViewById(R.id.mapview);
    			mapView.setBuiltInZoomControls(true);
    			lm = (LocationManager) this.getSystemService(LOCATION_SERVICE);
    			lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);
    			lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 0,
    				this);
     
     
    			mc = mapView.getController();
    			mc.setZoom(15);
    		    formationBdd = new FormationBDD(this);
    		    formationBdd.open();
    		   // récupération liste centres de formations
    		    listF = formationBdd.getAllFormations();
    		    Log.i(getClass().getName(), "liste : " + listF);
     
     
    			  // calcul distance min
    			  int   indexDistancemin = indexmindistance();
    			//  Log.i(getClass().getName(), "index : " + indexmin);
    			   double   latitudemin = listF.get(indexDistancemin).getLatitude();
    			    double longitudemin = listF.get(indexDistancemin).getLongitude();
    			    Log.i(getClass().getName(), "latitude min : " + latitudemin + " longitude min: " + longitudemin);
    		// récupérer l'index du centre le plus proche 
     
    		    // création du géopoint correspondant au centre plus proche
    		    GeoPoint point = new GeoPoint(microdegrees(longitudemin),microdegrees(latitudemin));
    		    ItemizedOverlayPerso pinOverlay = new ItemizedOverlayPerso(getResources().getDrawable(R.drawable.marker));
    		 // Créer un Overlayitem sur le point qu'on a créé
    		    OverlayItem overlayitem = new OverlayItem(point, listF.get(indexmin).getLibellé(), listF.get(indexmin).getAdresse());
    			pinOverlay.addPoint(point);
    			mapView.getOverlays().add(pinOverlay);
    			// Ajouter cet Overlay à notre map
     
     
    			// Centrer la carte sur la position de notre point
    			mapView.getController().animateTo(point); 
     
    			// définir de niveau de zoom à 12
    			mapView.getController().setZoom(12);
     
    			myLocation = new MyLocationOverlay(getApplicationContext(), mapView);
     
    			//Ajouter votre location dans la map
    			mapView.getOverlays().add(myLocation);
    			//Activer l'affichage de la localisation
    			myLocation.enableMyLocation();
    		/*myLocation.runOnFirstFix(new Runnable(){
    			 public void run() {
    				 mc.animateTo(myLocation.getMyLocation());
    				 mc.setZoom(17);
    				    }
    		});*/
     
     
    	 }
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

Discussions similaires

  1. Calcul de distance entre géopoints
    Par tunisdroid dans le forum Android
    Réponses: 8
    Dernier message: 25/06/2012, 16h16
  2. [3D] Trouver la distance entre 2 vecteurs3d
    Par Happy dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 10/01/2006, 11h30
  3. distance entre 2 points avec Point2D
    Par mikees dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 09/01/2006, 16h10
  4. Aucune distance entre les colones d'un tableau
    Par FrankOVD dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/06/2005, 12h05
  5. Mesure distance entre 2 points d'une image
    Par vexal dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/05/2005, 14h29

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