Calculate distance between two points directly in SQLite

前端 未结 5 652
北海茫月
北海茫月 2020-12-17 19:15

In my web/MySQL application I have something like this to get distance between two points:

6371 * acos(cos(radians(-19.83996)) * cos(radians(lat)) * cos(radi         


        
5条回答
  •  南笙
    南笙 (楼主)
    2020-12-17 19:55

    Insert cos_lat_rad,sin_lat_rad,cos_lon_rad,sin_lon_rad in to your table

    contentValues.put("cos_lat_rad", Math.cos(deg2rad(latitude)));
    contentValues.put("sin_lat_rad", Math.sin(deg2rad(latitude)));
    contentValues.put("cos_lon_rad", Math.cos(deg2rad(longitude)));
    contentValues.put("sin_lon_rad", Math.sin(deg2rad(longitude)));
    

    degree to radian

    public static double deg2rad(double deg) {
        return (deg * Math.PI / 180.0);
    }
    

    query , distance in km

     Cursor c=database.dis(String.valueOf(Math.cos((double) distance / (double) 6380)), Math.cos(deg2rad(latitude)), Math.sin(deg2rad(latitude)), Math.cos(deg2rad(longitude)), Math.sin(deg2rad(longitude)));
    

    query

    public Cursor dis(String dis, double cos_lat_rad, double sin_lat_rad, double cos_lon_rad, double sin_lon_rad) {
    
        Cursor cursor = sqLiteDatabase.rawQuery("SELECT * ,(" + sin_lat_rad + "*\"sin_lat_rad\"+" + cos_lat_rad + "*\"cos_lat_rad\"*(" + sin_lon_rad + "*\"sin_lon_rad\"+" + cos_lon_rad + "*\"cos_lon_rad\")) AS \"distance_acos\" FROM parish WHERE ("+sin_lat_rad+" * \"sin_lat_rad\" +"+ cos_lat_rad +"* \"cos_lat_rad\" * (+"+sin_lon_rad +"* \"sin_lon_rad\" + "+cos_lon_rad +"* \"cos_lon_rad\")) >"+dis+ " ORDER BY \"distance_acos\" DESC ", null);
        return cursor;
    
    }
    

    convert distance_acos to km

     if(c.moveToFirst())
            do {
                double distance_acos= c.getDouble(c.getColumnIndex("distance_acos"));
                         String Distance=String.valueOf(Math.acos(distance_acos) * 6380); 
            }while (c.moveToNext());
    

提交回复
热议问题