2014-02-07 3 views
0

Я хочу получить расстояние между 2 точками, один доставлен GPS, а второй - исправлен. Я получаю результат, но расстояние составляет 40 км, но должно быть около 25 км, и я не могу найти другую формулу. Пожалуйста, помогите мне решить проблему.неправильное расстояние между 2 точками GPS - андроид

btnShowLocation = (кнопка) getView(). FindViewById (R.id.btnLocation);

 btnShowLocation.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) {   
       //Objekt in der Klasse erzeugen 
       gps = new GPSTracker(getActivity()); 

       //überprüfen, ob GPS aktiv ist 
       if(gps.canGetLocation()){ 

        latitude = gps.getLatitude(); 
        longitude = gps.getLongitude(); 

        Toast.makeText(getActivity(), "Deine Location - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); 
       }else{ 
        //wenn keine Location gefunden wurde 
        // GPS oder Netzwerk nicht verfügbar 
        // User fragen, ob er die Einstellungen ändern will 
        gps.showSettingsAlert(); 
       } 
      } 
      }); 


     btnEntfernung = (Button) getView().findViewById(R.id.btnDistance); 

     btnEntfernung.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) {  

       double x1,y1,x2,y2,radius; 
       latitudeDB = Math.toRadians(48.569601); 
       longitudeDB = Math.toRadians(16.572087); 
       double entfernung=0; 
       radius= 6378.137/360; 

       x2=latitudeDB; 
       y2=longitudeDB; 

       x1=latitude; 
       y1=longitude; 

       double distanz =(x1-x2)+(y1-y2); 
       double distanzfaktor = Math.acos((Math.sin(y1)*Math.sin(y2))+((Math.cos(y1)*Math.cos(y2))* (Math.cos(x2)-Math.cos(x1)))); 

       if (distanz >=0){ 
        entfernung = radius*distanzfaktor; 
       } 
       else if(distanz < 0){ 
        entfernung = radius*(distanzfaktor + Math.PI); 
       } 
       Toast.makeText(getActivity(), "Deine Entfernung" + entfernung + " km", Toast.LENGTH_LONG).show(); 
      } 
     }); 

ответ

1

Почему бы не использовать встроенный класс Location, чтобы сделать это за вас?

x2=latitudeDB; 
y2=longitudeDB; 

x1=latitude; 
y1=longitude; 

float[] results = new float[1]; 
Location.distanceBetween(x1, y1, x2, y2, results); 
float distanceInMeters = results[0]; 

float distanceInKm = distanceInMeters/1000.0f; 

Toast.makeText(getActivity(), "Deine Entfernung" + distanceInKm + " km", Toast.LENGTH_LONG).show(); 
+0

Я не знаю, как использовать его, я просто новичок, и это, кажется, самый простой способ: s, но это неправильно – user3224612

+0

Ну я только что показал вам, как использовать это :) Что вы означает, что это неверно? Вы уверены, что ваш расчет _other_ правильный (если вы считаете, что результат метода «Location» неверен)? –

+0

no no Я уверен, что ваш код верен, мой код не тот. Но где мне его скопировать и как я могу показать расстояние в тосте, например. Я очень благодарю вас за вашу помощь. Я не очень хорош в программировании: s – user3224612

Смежные вопросы