Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 基于当前位置删除数据库行_Android_Sqlite - Fatal编程技术网

Android 基于当前位置删除数据库行

Android 基于当前位置删除数据库行,android,sqlite,Android,Sqlite,我在我的Android应用程序中的一个普通SQLite数据库中存储位置为(lat/long)的对象。应用程序接收包含存储在此数据库中的新对象的消息(UDP数据包) 为了避免DB在某一点爆炸并保持其亮度,我想永久删除所有距离特定半径更远的对象。DB通过实现DB助手的DB适配器类进行控制 由于我不想使用距离近似,我想使用哈弗森公式。现在我有以下问题: 在轻量级智能解决方案中实现此任务的最佳方式是什么 我考虑使用异步任务来完成这项工作。这是推荐的吗 这是我用来获取对象排序子句的方法,对象的GPS数据存

我在我的Android应用程序中的一个普通SQLite数据库中存储位置为(lat/long)的对象。应用程序接收包含存储在此数据库中的新对象的消息(UDP数据包)

为了避免DB在某一点爆炸并保持其亮度,我想永久删除所有距离特定半径更远的对象。DB通过实现DB助手的DB适配器类进行控制

由于我不想使用距离近似,我想使用哈弗森公式。现在我有以下问题:

  • 在轻量级智能解决方案中实现此任务的最佳方式是什么
  • 我考虑使用异步任务来完成这项工作。这是推荐的吗

  • 这是我用来获取对象排序子句的方法,对象的GPS数据存储在数据库中:

    public String getOrderString(double latitude, double longitude) {
        double fudge = Math.pow(Math.cos(Math.toRadians(latitude)), 2);
    
        return "((" + latitude + " - " + KEY_LATITUDE + ") * (" + latitude
                + " - " + KEY_LATITUDE + ") + (" + longitude + " - "
                + KEY_LONGITUDE + ") * (" + longitude + " - " + KEY_LONGITUDE
                + ") * " + fudge + ") ASC";
    }
    
    “借用”自。我对福吉系数的理解是,它考虑了不在赤道附近的坐标。到目前为止,这个方程式对我很有效,而且速度相当快

    现在,我想你可以利用同样的方程,通过做如下的事情:

    public String getWhereString(double latitude, double longitude, double threshold) {
        double fudge = Math.pow(Math.cos(Math.toRadians(latitude)), 2);
    
        return "((" + latitude + " - " + KEY_LATITUDE + ") * (" + latitude
                + " - " + KEY_LATITUDE + ") + (" + longitude + " - "
                + KEY_LONGITUDE + ") * (" + longitude + " - " + KEY_LONGITUDE
                + ") * " + fudge + ") < " + threshold;
    }
    

    唯一的问题是我不知道等式结果的单位,因此你应该传递什么作为阈值。在我的情况下,我不在乎这些,因为我只想要订单,但在你的情况下,这可能会有所不同。如果您需要更精确的数字,您可以使用不同的值或尝试计算它。

    非常感谢您提供的代码和解释!这真的很有帮助!我会尝试一下并报告!好的,我用这种方式实现了它,它运行得很好。对于单位,我将两个乘积乘以111.2 km,约为赤道处的一度宽度。有了软糖因素,它也能起作用。近似值是可以的。再次感谢!看看这个答案
    public int removeBuildingEntry(double latitude, double longitude, double threshold) {
        String where = getWhereString(double latitude, double longitude, double threshold)
    
        return db.delete(TABLE, where, null);
    }