两个GPS点之间的距离错误 - 安卓

时间:2014-02-07 20:20:45

标签: android gps distance

我希望获得2点之间的距离,一个是通过GPS获得的,第二个是修复。我得到一个结果,但距离是40公里,但它应该是大约25公里,我找不到另一个公式。请帮我解决问题。

btnShowLocation =(Button)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 个答案:

答案 0 :(得分: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();