免责声明这是一个家庭作业。请不要认真对待或思考这个问题超过2秒。这是不值得的。对不起。
我试图计算路线的近似距离。在getPoints方法中,我从数据库中请求所有路线点并将它们写入数组。这部分工作正常,正如预期的那样。这里你可以看到代码片段:
public ArrayList<Double> getPoints() {
ArrayList<Double> location = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("select latitude,longitude from " + Table_Name_Location, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
Double latitude = cursor.getDouble(cursor.getColumnIndex("Lat"));
Double longitude = cursor.getDouble(cursor.getColumnIndex("Longi"));
location.add(latitude);
location.add(longitude);
}
}
cursor.close();
return location;
}
private double distance(double lat1, double lon1, double lat2, double lon2) {
double theta = lon1 - lon2;
double dist = Math.sin(deg2rad(lat1))
* Math.sin(deg2rad(lat2))
+ Math.cos(deg2rad(lat1))
* Math.cos(deg2rad(lat2))
* Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
return (dist);
}
private double deg2rad(double deg) {
return (deg * Math.PI / 180.0);
}
private double rad2deg(double rad) {
return (rad * 180.0 / Math.PI);
}
字符串
然而,当计算距离本身的时候,问题就出现了。由于某种原因,半正矢公式计算的距离不正确。我推测,问题出在距离方法的某个地方,但我自己无法识别它。我比较了我的半正矢公式的实现,但没有发现与原始公式有任何差异。
1条答案
按热度按时间bvn4nwqk1#
这里是源代码。
该方法的标题为 “distanceBetween”,并使用 private*“computeDistanceAndBearing”* 方法。
并且,计算出的值是,以米为单位的距离、初始方位角和最终方位角。
这是一个移植版本。
我已经删除了 BearingDistanceCache 参数,并将其调整为返回一个 double array。
字符串
下面是一个示例用法。
根据一些资料,从 * 纽约市 * 到 * 洛杉矶 * 的距离大约是3,934公里。
型
输出
型