有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数学Java Haversine公式的实现问题

我正在Java上开发一个Android 10应用程序,其中我必须计算两个位置之间的距离,但我遇到了一个问题

输出应该是数据库中各点之间的一组距离。坐标作为一组纬度和经度存储在SQLite数据库中。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);
}

共 (0) 个答案