我在使用HTC One上的GPS跟踪数据时遇到了一些奇怪的数字。本质上,我有一个函数来计算两个GPS位置之间的近似差异,但结果是......奇数。
我得到的第一个读数通常是合理的,然后下一个读数都是0.0km直到大约5或6。
我每10秒计算一次距离,同时以大约50公里/小时的速度移动,所以我自然会在每次阅读时预计不到0.0公里的距离。
有人可以找出问题所在吗?我可以获得GPS读数的次数有限制吗?谢谢!
以下是我的数据以50 km / h的速度进行的示例,每10秒读取一次读数:
186m
0.0m
0.0m
0.0m
190m
0.0
...
public class profile extends Activity {
GPSTracker gps;
private double long1, lat1;
public static double haversine(
double lat1, double lng1, double lat2, double lng2) {
int r = 6371; // average radius of the earth in km
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lng2 - lng1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
* Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double d = r * c;
return d*1000.00;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
gps = new GPSTracker(profile.this);
if(gps.canGetLocation()) {
lat1 = gps.getLatitude();
long1 = gps.getLongitude();
}
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@SuppressWarnings("unchecked")
public void run() {
try {
if(gps.canGetLocation()) {
gps = new GPSTracker(profile.this);
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
double distance = haversine(lat1, long1, latitude, longitude);
Toast.makeText(
getApplicationContext(),
String.valueOf(distance) + " meters", Toast.LENGTH_LONG).show();
long1 = longitude;
lat1 = latitude;
} else {
gps.showSettingsAlert();
}
}
catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 10000);
}
}
答案 0 :(得分:0)
什么是GPSTracker课程?
我的猜测是,首先使用Wi-Fi和Cell塔(使用网络提供商)计算结果并返回相同的大致位置。一段时间后,您将获得GPS修复并开始获得更准确的位置信息。