【问题标题】:wrong distance between 2 GPS points - android2个GPS点之间的距离错误 - android
【发布时间】:2014-02-07 20:20:45
【问题描述】:

我想得到两点之间的距离,一个是通过 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();  
            }
        });

【问题讨论】:

    标签: android gps distance


    【解决方案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();  
    

    【讨论】:

    • 我不知道如何使用它,我只是一个初学者,这似乎是最简单的方法:s但它不正确
    • 好吧,我只是向你展示了如何使用它:) 你的意思是它不正确?你确定你的other计算是正确的(如果你认为Location方法的结果是错误的)?
    • 不不,我确定您的代码是正确的,但我的代码不是。但是我应该在哪里复制它以及如何在吐司中显示距离。我真的很感谢你的帮助。我在编程方面不太好:s
    • 我将我的答案进一步集成到您提供的代码中。
    • 真的很感谢你的努力,但我现在有 5255 公里 :s
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2014-02-28
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多