运行gps android

时间:2015-08-01 09:11:40

标签: android gps location

尝试在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)我是否因为垃圾编程技巧而得到一些随机的gobbledigook?

1 个答案:

答案 0 :(得分:1)

1)单位是米(见distanceTo())。

2)是的。但是像所有程序员一样,你还在学习,所以为了更有帮助,我不会把它留在那里!您获得距离很远的原因是因为您的代码距locationAlocationB之间的距离很远,并且您在执行该行时没有设置locationB

float distance = locationA.distanceTo(locationB);

所以你得到locationA和纬度/长0,0之间的距离。

您只需在locationB中设置Runnable的纬度和经度,该distance将在设置Runnable后执行。因此,您可能需要将距离计算和输出它的代码移动到locationB内,以设置locationA的纬度和经度。您还必须final Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "Job1"); job.setJarByClass(Simpletask.class); job.setMapperClass(TokenizerMapper.class); //job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(IntWritable.class); job.setOutputValueClass(Text.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class); 这样做。