如何计算两个经度之间的距离?

问题描述 投票:0回答:1

我有多个纬度和经度,它们存储在我的SQLite数据库中,我想计算这些点的总距离。第一个位置到第二个位置再到第三个位置,都存储在数据库中。

从数据库中获取经纬度。

       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);
    }

此方法的返回距离(以英里为单位)我检查了此函数的静态值lat和lon值。我想知道如何计算多个点之间的距离。

java android android-sqlite latitude-longitude
1个回答
0
投票

获取距离公里

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.