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

标签 java android sqlite coordinates calculator

我正在制作一个应用程序,用于通过 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/

相关文章:

sql - 如何从一个表中选择一个值,其中在另一个表中满足两个单独的条件对

java - 在 Java 中计算耗时时收到 NaN

java - 如何将多个 ArrayList<Hashmap> 值组合到一个 ListView 中

android - Google Maps open-source-attribution 非常大并且阻塞了主线程

android - 如何从 Android 使用 Google Cloud 语音 API?

Android:存储在数据库中的缩略图返回空

java - LibGDX无法访问内部图像资源

java - 我可以使用 Java 打开 Windows Enterprise 上用户主目录中的文件吗?

java - 无法在 docker 中初始化类 sun.security.ec.SunEC 异常

java - Android SimpleCursorAdapter.ViewBinder 不更新绑定(bind)的 TextView