我正在制作一个应用程序,用于通过 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);
}
最佳答案
好吧,既然你正在挣扎。这是一个开始:
假设您有这样的准备好的声明:
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;
关于java - Android java计算距离sqlite的多个坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21383582/