运行 全球定位系统 android

Running gps android

尝试在 android 中创建一个 运行 gps,使用此代码每秒计算两点之间的距离(至少我认为它正在这样做):

    gps = new GPSTracker(AndroidGPSTrackingActivity.this);

                // check if GPS enabled
                if (gps.canGetLocation()) {

                    final Handler h = new Handler();
                    final int delay = 1000; //milliseconds

                    h.postDelayed(new Runnable() {
                        public void run() {

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

                            Location locationA = new Location("point A");
                            final Location locationB = new Location("point B");

                            locationA.setLatitude(latitude);
                            locationA.setLongitude(longitude);
                            Timer t = new Timer();

                            h.postDelayed(new Runnable() {
                                public void run() {

                                    double latitude1 = gps.getLatitude();
                                    double longitude2 = gps.getLongitude();

                                    locationB.setLatitude(latitude1);
                                    locationB.setLongitude(longitude2);

                                }
                            }, delay);
                            float distance = locationA.distanceTo(locationB);

                            finalDistance[0] = (finalDistance[0] + distance);

                            displayDistance.setText(String.valueOf(finalDistance[0]));

                            h.postDelayed(this, delay);


                        }
                    }, delay);

无论我走还是不走,距离都会或多或少地以相同的增量变化。

我得到的距离也是一个奇怪的值,例如:6.47875890357E9

我的问题:1)这个距离的单位是什么?

2)我是不是因为垃圾编程技能而得到一些随机的官方文章?

1) 单位为米(参见distanceTo())。

2) 是的。但是像所有程序员一样,您仍在学习,所以为了更有帮助,我不会就此罢手!你距离很远的原因是因为你的代码在 locationAlocationB 之间取得了距离,而你在执行该行时没有设置 locationB:

float distance = locationA.distanceTo(locationB);

所以你得到 locationA 和 lat/long 0,0 之间的距离。

您只是在 Runnable 中设置 locationB 的纬度和经度,这将在设置 distance 之后执行。因此,您可能需要将距离计算和输出它的代码移动到 Runnable 中,为 locationB 设置纬度和经度。您还必须 locationA final 才能做到这一点。