Android java从sqlite计算距离许多坐标[重复]

Posted

技术标签:

【中文标题】Android java从sqlite计算距离许多坐标[重复]【英文标题】:Android java calculate distance many coordinates from sqlite [duplicate] 【发布时间】:2014-01-27 14:36:05 【问题描述】:

我正在为我使用 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);


【问题讨论】:

我可以在两个坐标之间进行计算,但我不想计算整个路线 你需要计算每个段,并求和。由于错误聚合,这也很复杂。 我也在考虑这个,但我不知道如何......用一个列表,或者类似的东西? 是的,有一个列表或类似的东西 :-) 在问这里之前先尝试一下...... 我试过但我失败了:D 【参考方案1】:

好的,因为你在挣扎。这是一个开始:

假设你有这样一个准备好的语句:

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;

【讨论】:

如果段很短,由于累积误差,总长度不会很准确。如果段长度太小,最好简单地跳过点。 谢谢,我试试看:)

以上是关于Android java从sqlite计算距离许多坐标[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在谷歌地图 api 中计算从 1 个位置到许多其他位置的距离? [复制]

java Java / Android - 使用大圆公式计算两个坐标之间的距离。

java Java / Android - 使用大圆公式计算两个坐标之间的距离。

java Java / Android - 使用大圆公式计算两个坐标之间的距离。

java Java / Android - 使用大圆公式计算两个坐标之间的距离。

java Java / Android - 使用大圆公式计算两个坐标之间的距离。