Android java计算距离sqlite的多个坐标

Android java计算距离sqlite的多个坐标,java,android,sqlite,coordinates,calculator,Java,Android,Sqlite,Coordinates,Calculator,我正在为我使用的SQLite数据库制作一个通过GPS跟踪行驶路线的应用程序。当当前位置更改时,数据(纬度、经度、日期)将保存到数据库中,因此我的数据库中有许多坐标+日期的列表 现在,我想计算整个路线的距离。我知道起始位置、结束位置和中间位置。我还知道如何计算两个位置之间的距离。我不知道如何计算所有线段的距离。有人能帮我吗 这是我计算两个位置之间距离的方法: private double calculateDistance(double fromLong, double fromLat,doubl

我正在为我使用的SQLite数据库制作一个通过GPS跟踪行驶路线的应用程序。当当前位置更改时,数据(纬度、经度、日期)将保存到数据库中,因此我的数据库中有许多坐标+日期的列表

现在,我想计算整个路线的距离。我知道起始位置、结束位置和中间位置。我还知道如何计算两个位置之间的距离。我不知道如何计算所有线段的距离。有人能帮我吗

这是我计算两个位置之间距离的方法:

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;
您可以按如下方式对段进行求和:

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;
双倍合计=0.0;
双平面;
双a_lon;
//第一拉特
if(rs.next()==false)返回0.0;//数据库中没有任何内容。
a_lat=rs.getDouble(“lat”);
a_lon=rs.getDouble(“lon”);
while(rs.next()){
b_lat=rs.getDouble(“lat”);
b_lon=rs.getDouble(“lon”);
双段=计算长度(a_-lat,a_-lon,b_-lat,b_-lon);
if(段<最小分段长度){
continue;//跳过这一点,它离上一点太近了。
}
总长度+=分段长度;
a_lat=b_lat;//哎呀,忘了这个。
a_lon=b_lon;
}
返回总数;

我可以在两个坐标之间进行计算,但我不想计算整个路线。您需要计算每个路段,然后求和。这也很复杂,因为错误会聚集在一起。我也在想,但我不知道如何…使用列表或类似的东西?是的,使用列表或类似的东西:-)在询问之前尝试一下…我尝试了,但我失败了:如果段短,由于累积的错误,总长度将不太准确。如果线段长度太小,可能最好跳过点。谢谢,我会试试:)