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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    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.

  2. #2
    Membre éclairé 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
    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

  3. #3
    Expert confirmé

    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
    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

  4. #4
    Membre éclairé 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
    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

  5. #5
    Expert confirmé

    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
    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....

  6. #6
    Membre éclairé 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
    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);}

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