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