尝试在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?
答案 0 :(得分:1)
1)单位是米(见distanceTo())。
2)是的。但是像所有程序员一样,你还在学习,所以为了更有帮助,我不会把它留在那里!您获得距离很远的原因是因为您的代码距locationA
和locationB
之间的距离很远,并且您在执行该行时没有设置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);
这样做。