我正在制作一个应用程序,用于通过GPS跟踪驱动路线,对于我使用SQLite的数据库。当前位置发生变化时,数据(纬度,经度,日期)将保存到数据库中,因此我的数据库中有许多坐标+日期的列表。
现在,我想计算整条路线的距离。我知道开始和结束位置以及中间位置。我也知道如何计算两个位置之间的距离。我不知道如何计算所有段的距离。有人能帮助我吗?
这就是我计算两个位置之间距离的方法:
private double calculateDistance(double fromLong, double fromLat,double toLong, double toLat) {
double d2r = Math.PI / 180;
double dLong = (toLong - fromLong) * d2r;
double dLat = (toLat - fromLat) * d2r;
double a = Math.pow(Math.sin(dLat / 2.0), 2) + Math.cos(fromLat * d2r)
* Math.cos(toLat * d2r) * Math.pow(Math.sin(dLong / 2.0), 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double d = 6367000 * c;
return Math.round(d);
}
答案 0 :(得分:0)
好的,因为你正在努力。这是一个开始:
假设你有这样的预备陈述:
select lat, lon from position order by save_date
你可以像这样对这些片段求和:
double total = 0.0;
double a_lat;
double a_lon;
// first lat
if( rs.next() == false) return 0.0; // nothing in db.
a_lat = rs.getDouble("lat");
a_lon = rs.getDouble("lon");
while( rs.next()) {
b_lat = rs.getDouble("lat");
b_lon = rs.getDouble("lon");
double segment = calcLength(a_lat, a_lon, b_lat, b_lon);
if( segment < MINIMUM_SEG_LENGTH) {
continue; // skip this point, it's too close to the previous.
}
total+=segmentLength;
a_lat = b_lat; // oops, forgot this.
a_lon = b_lon;
}
return total;